Initial conversion to const generics (#1018)

This commit is contained in:
Amanieu d'Antras
2021-02-27 14:25:19 +00:00
committed by GitHub
parent 5728faf0f7
commit b4023b1ffe
5 changed files with 78 additions and 70 deletions

View File

@@ -62,6 +62,7 @@ pub fn assert_instr(
);
let mut inputs = Vec::new();
let mut input_vals = Vec::new();
let mut const_vals = Vec::new();
let ret = &func.sig.output;
for arg in func.sig.inputs.iter() {
let capture = match *arg {
@@ -82,6 +83,20 @@ pub fn assert_instr(
input_vals.push(quote! { #ident });
}
}
for arg in func.sig.generics.params.iter() {
let c = match *arg {
syn::GenericParam::Const(ref c) => c,
ref v => panic!(
"only const generics are allowed: `{:?}`",
v.clone().into_token_stream()
),
};
if let Some(&(_, ref tokens)) = invoc.args.iter().find(|a| c.ident == a.0) {
const_vals.push(quote! { #tokens });
} else {
panic!("const generics must have a value for tests");
}
}
let attrs = func
.attrs
@@ -133,7 +148,7 @@ pub fn assert_instr(
std::mem::transmute(#shim_name_str.as_bytes().as_ptr()),
std::sync::atomic::Ordering::Relaxed,
);
#name(#(#input_vals),*)
#name::<#(#const_vals),*>(#(#input_vals),*)
}
};