From a833703dab8c4ef271cb8ae11df2ca5fa46c7343 Mon Sep 17 00:00:00 2001 From: edef Date: Wed, 16 Oct 2024 00:59:28 +0300 Subject: [PATCH] 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 Tested-by: BuildkiteCI --- tvix/eval/builtin-macros/src/lib.rs | 54 ++++++++++++++++++----------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/tvix/eval/builtin-macros/src/lib.rs b/tvix/eval/builtin-macros/src/lib.rs index 5cc9807f5..9b14aee44 100644 --- a/tvix/eval/builtin-macros/src/lib.rs +++ b/tvix/eval/builtin-macros/src/lib.rs @@ -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();