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:
parent
ca1e628c85
commit
a833703dab
1 changed files with 34 additions and 20 deletions
|
@ -281,31 +281,45 @@ pub fn builtins(args: TokenStream, item: TokenStream) -> TokenStream {
|
|||
let ty = &arg.ty;
|
||||
let ident = &arg.name;
|
||||
|
||||
if arg.strict {
|
||||
if arg.catch {
|
||||
f.block = Box::new(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;
|
||||
f.block = Box::new(match arg {
|
||||
BuiltinArgument {
|
||||
strict: true,
|
||||
catch: true,
|
||||
..
|
||||
} => 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
|
||||
}});
|
||||
} else {
|
||||
f.block = Box::new(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;
|
||||
}
|
||||
},
|
||||
BuiltinArgument {
|
||||
strict: true,
|
||||
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() {
|
||||
return Ok(#ident);
|
||||
}
|
||||
#block
|
||||
}});
|
||||
}
|
||||
} else {
|
||||
f.block = Box::new(parse_quote_spanned! {arg.span=> {
|
||||
let #ident: #ty = values.pop()
|
||||
.expect("Tvix bug: builtin called with incorrect number of arguments");
|
||||
|
||||
#block
|
||||
}})
|
||||
}
|
||||
}
|
||||
},
|
||||
BuiltinArgument {
|
||||
strict: false,
|
||||
catch: _,
|
||||
..
|
||||
} => parse_quote_spanned! {
|
||||
arg.span => {
|
||||
let #ident: #ty = values.pop().expect("Tvix bug: builtin called with incorrect number of arguments");
|
||||
#block
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
let fn_name = f.sig.ident.clone();
|
||||
|
|
Loading…
Reference in a new issue