refactor(tvix/eval/builtin-macros): use match block for f.block

These nested ifs are a bit confusing, a match block makes this cleaner.

Change-Id: I256fd0bc921fbf2e60ad0f6e1ea51c2e0fb00317
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12628
Reviewed-by: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
This commit is contained in:
edef 2024-10-16 00:59:28 +03:00 committed by flokli
parent ca1e628c85
commit a833703dab

View file

@ -281,31 +281,45 @@ pub fn builtins(args: TokenStream, item: TokenStream) -> TokenStream {
let ty = &arg.ty; let ty = &arg.ty;
let ident = &arg.name; let ident = &arg.name;
if arg.strict { f.block = Box::new(match arg {
if arg.catch { BuiltinArgument {
f.block = Box::new(parse_quote_spanned! {arg.span=> { strict: true,
let #ident: #ty = tvix_eval::generators::request_force(&co, values.pop() catch: true,
.expect("Tvix bug: builtin called with incorrect number of arguments")).await; ..
} => parse_quote_spanned! {
arg.span => {
let #ident: #ty = tvix_eval::generators::request_force(
&co, values.pop().expect("Tvix bug: builtin called with incorrect number of arguments")
).await;
#block #block
}}); }
} else { },
f.block = Box::new(parse_quote_spanned! {arg.span=> { BuiltinArgument {
let #ident: #ty = tvix_eval::generators::request_force(&co, values.pop() strict: true,
.expect("Tvix bug: builtin called with incorrect number of arguments")).await; catch: false,
..
} => parse_quote_spanned! {
arg.span => {
let #ident: #ty = tvix_eval::generators::request_force(
&co, values.pop().expect("Tvix bug: builtin called with incorrect number of arguments")
).await;
if #ident.is_catchable() { if #ident.is_catchable() {
return Ok(#ident); return Ok(#ident);
} }
#block #block
}});
} }
} else { },
f.block = Box::new(parse_quote_spanned! {arg.span=> { BuiltinArgument {
let #ident: #ty = values.pop() strict: false,
.expect("Tvix bug: builtin called with incorrect number of arguments"); catch: _,
..
} => parse_quote_spanned! {
arg.span => {
let #ident: #ty = values.pop().expect("Tvix bug: builtin called with incorrect number of arguments");
#block #block
}})
} }
},
});
} }
let fn_name = f.sig.ident.clone(); let fn_name = f.sig.ident.clone();