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 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();