Adds force_origin support (#13845)

* Adds force_origin support

* Moves a couple of tests to showcase v2 with force_origin

* Adds remaining tests

* adds documentation

* minor

* adds test for invalid origin

* ".git/.scripts/commands/fmt/fmt.sh"

* updates param to use MaxCalls

* Fixes compilation error

* Updates doc comment

* Fixes test outputs

* Fixes test output

* ".git/.scripts/commands/fmt/fmt.sh"

---------

Co-authored-by: command-bot <>
This commit is contained in:
gupnik
2023-04-24 17:34:15 +05:30
committed by GitHub
parent b8d94bfad1
commit 3688575fd0
5 changed files with 141 additions and 61 deletions
@@ -53,7 +53,7 @@ mod keywords {
#[derive(Clone)]
struct ParamDef {
name: String,
typ: Type,
_typ: Type,
start: syn::GenericArgument,
end: syn::GenericArgument,
}
@@ -229,7 +229,7 @@ fn parse_params(item_fn: &ItemFn) -> Result<Vec<ParamDef>> {
let args = segment.arguments.to_token_stream().into();
let Ok(args) = syn::parse::<RangeArgs>(args) else { return invalid_param(typ.span()) };
params.push(ParamDef { name, typ: typ.clone(), start: args.start, end: args.end });
params.push(ParamDef { name, _typ: typ.clone(), start: args.start, end: args.end });
}
Ok(params)
}
@@ -681,7 +681,6 @@ pub fn benchmarks(
struct UnrolledParams {
param_ranges: Vec<TokenStream2>,
param_names: Vec<TokenStream2>,
param_types: Vec<TokenStream2>,
}
impl UnrolledParams {
@@ -703,14 +702,7 @@ impl UnrolledParams {
quote!(#name)
})
.collect();
let param_types: Vec<TokenStream2> = params
.iter()
.map(|p| {
let typ = &p.typ;
quote!(#typ)
})
.collect();
UnrolledParams { param_ranges, param_names, param_types }
UnrolledParams { param_ranges, param_names }
}
}
@@ -726,7 +718,6 @@ fn expand_benchmark(
Ok(ident) => ident,
Err(err) => return err.to_compile_error().into(),
};
let home = quote!(#krate::v2);
let codec = quote!(#krate::frame_support::codec);
let traits = quote!(#krate::frame_support::traits);
let setup_stmts = benchmark_def.setup_stmts;
@@ -738,7 +729,6 @@ fn expand_benchmark(
let unrolled = UnrolledParams::from(&benchmark_def.params);
let param_names = unrolled.param_names;
let param_ranges = unrolled.param_ranges;
let param_types = unrolled.param_types;
let type_use_generics = match is_instance {
false => quote!(T),
@@ -763,6 +753,18 @@ fn expand_benchmark(
}
expr_call.args = final_args;
let origin = match origin {
Expr::Cast(t) => {
let ty = t.ty.clone();
quote! {
<<T as frame_system::Config>::RuntimeOrigin as From<#ty>>::from(#origin);
}
},
_ => quote! {
#origin.into();
},
};
// determine call name (handles `_` and normal call syntax)
let expr_span = expr_call.span();
let call_err = || {
@@ -803,7 +805,7 @@ fn expand_benchmark(
let __call_decoded = <Call<#type_use_generics> as #codec::Decode>
::decode(&mut &__benchmarked_call_encoded[..])
.expect("call is encoded above, encoding must be correct");
let __origin = #origin.into();
let __origin = #origin;
<Call<#type_use_generics> as #traits::UnfilteredDispatchable>::dispatch_bypass_filter(
__call_decoded,
__origin,
@@ -877,11 +879,6 @@ fn expand_benchmark(
// benchmark function definition
#fn_def
// compile-time assertions that each referenced param type implements ParamRange
#(
#home::assert_impl_all!(#param_types: #home::ParamRange);
)*
#[allow(non_camel_case_types)]
#(
#fn_attrs