summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStiopa Koltsov <nga@meta.com>2024-09-28 20:15:24 -0700
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>2024-09-28 20:15:24 -0700
commit7119c18aedd5073a9dc8766ba8c333cc638821e4 (patch)
tree5471d9bcb9efc04890756250689d32751b9acbe6
parent291a8342cd130206ce3e22d2a9d64cf7dcf5c1e5 (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.rs11
-rw-r--r--starlark_derive/src/module/render/fun.rs20
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 {