diff options
-rw-r--r-- | tvix/eval/src/compiler/mod.rs | 11 | ||||
-rw-r--r-- | tvix/eval/tests/nix_oracle.rs | 5 |
2 files changed, 7 insertions, 9 deletions
diff --git a/tvix/eval/src/compiler/mod.rs b/tvix/eval/src/compiler/mod.rs index 450799d683d1..43dab506c5ed 100644 --- a/tvix/eval/src/compiler/mod.rs +++ b/tvix/eval/src/compiler/mod.rs @@ -950,15 +950,8 @@ impl Compiler<'_> { self.patch_jump(jump_to_default); - // Thunk the default expression, but only if it is something - // other than an identifier. - if let ast::Expr::Ident(_) = &default_expr { - self.compile(*idx, default_expr); - } else { - self.thunk(*idx, &self.span_for(&default_expr), move |c, s| { - c.compile(s, default_expr) - }); - } + // Does not need to thunked since compile() already does so when necessary + self.compile(*idx, default_expr); self.patch_jump(jump_over_default); } else { diff --git a/tvix/eval/tests/nix_oracle.rs b/tvix/eval/tests/nix_oracle.rs index ecaf53a1b21a..386d49c51ccd 100644 --- a/tvix/eval/tests/nix_oracle.rs +++ b/tvix/eval/tests/nix_oracle.rs @@ -154,4 +154,9 @@ compare_lazy_eval_tests! { thunked_lambda_in_list("[ (x: x) ]"); thunked_function_application_in_list("[ (builtins.add 1 2) ]"); thunked_legacy_let_in_list("[ (let { foo = 12; body = foo; }) ]"); + + unthunked_formals_fallback_literal("({ foo ? 12 }: [ foo ]) { }"); + unthunked_formals_fallback_string_literal("({ foo ? \"wiggly\" }: [ foo ]) { }"); + thunked_formals_fallback_application("({ foo ? builtins.add 1 2 }: [ foo ]) { }"); + thunked_formals_fallback_name_resolution_literal("({ foo ? bar, bar ? 12 }: [ foo ]) { }"); } |