diff options
author | Stiopa Koltsov <nga@meta.com> | 2024-09-28 20:15:24 -0700 |
---|---|---|
committer | Facebook GitHub Bot <facebook-github-bot@users.noreply.github.com> | 2024-09-28 20:15:24 -0700 |
commit | 7119c18aedd5073a9dc8766ba8c333cc638821e4 (patch) | |
tree | 5471d9bcb9efc04890756250689d32751b9acbe6 | |
parent | 291a8342cd130206ce3e22d2a9d64cf7dcf5c1e5 (diff) |
Move NativeCallableParamSpec init for &Arguments into __derive_refs
Summary: Generally it's better to move code outside of generated into `__derive_refs` if it does not affect performance or compilation speed.
Reviewed By: JakobDegen
Differential Revision: D63598693
fbshipit-source-id: 4d88825b90e46693b580680fbd2f0682416bf006
-rw-r--r-- | starlark/src/__derive_refs/param_spec.rs | 11 | ||||
-rw-r--r-- | starlark_derive/src/module/render/fun.rs | 20 |
2 files changed, 12 insertions, 19 deletions
diff --git a/starlark/src/__derive_refs/param_spec.rs b/starlark/src/__derive_refs/param_spec.rs index f6dbf787..f1cf12e1 100644 --- a/starlark/src/__derive_refs/param_spec.rs +++ b/starlark/src/__derive_refs/param_spec.rs @@ -74,6 +74,17 @@ pub struct NativeCallableParamSpec { } impl NativeCallableParamSpec { + /// For a function accepting raw `&Arguments`. + pub fn for_arguments() -> NativeCallableParamSpec { + NativeCallableParamSpec { + pos_only: Vec::new(), + pos_or_named: Vec::new(), + args: Some(NativeCallableParam::args("args", Ty::any())), + named_only: Vec::new(), + kwargs: Some(NativeCallableParam::kwargs("kwargs", Ty::any())), + } + } + pub(crate) fn param_spec(&self) -> ParamSpec { ParamSpec::new_parts( self.pos_only.iter().map(|p| (p.is_required(), p.ty.dupe())), diff --git a/starlark_derive/src/module/render/fun.rs b/starlark_derive/src/module/render/fun.rs index 06ce0f7c..03934c39 100644 --- a/starlark_derive/src/module/render/fun.rs +++ b/starlark_derive/src/module/render/fun.rs @@ -584,26 +584,8 @@ fn render_native_callable_components(x: &StarFun) -> syn::Result<TokenStream> { }; let param_spec: syn::Expr = if x.is_arguments() { - let args: syn::Expr = syn::parse_quote! { - starlark::__derive_refs::param_spec::NativeCallableParam::args( - "args", - starlark::typing::Ty::any() - ) - }; - let kwargs: syn::Expr = syn::parse_quote! { - starlark::__derive_refs::param_spec::NativeCallableParam::kwargs( - "kwargs", - starlark::typing::Ty::any() - ) - }; syn::parse_quote! { - starlark::__derive_refs::param_spec::NativeCallableParamSpec { - pos_only: vec![], - pos_or_named: vec![], - args: std::option::Option::Some(#args), - named_only: vec![], - kwargs: std::option::Option::Some(#kwargs), - } + starlark::__derive_refs::param_spec::NativeCallableParamSpec::for_arguments() } } else { let ParamSpec { |