diff --git a/internal/rosa/azalea/evaluate.go b/internal/rosa/azalea/evaluate.go index 044e6826..db2d395b 100644 --- a/internal/rosa/azalea/evaluate.go +++ b/internal/rosa/azalea/evaluate.go @@ -115,7 +115,7 @@ func (e TypeError) Is(err error) bool { } // storeE is a convenience function to set the value of a result pointer. -func storeE(rp any, r any) error { +func storeE(rp, r any) error { pv := reflect.ValueOf(rp).Elem() v := reflect.ValueOf(r) pt, vt := pv.Type(), v.Type() @@ -226,6 +226,9 @@ func evaluateAny(d PF, s []Frame, expr, rp any) bool { case "false": store(rp, false) return true + case "nil": + reflect.ValueOf(rp).Elem().SetZero() + return true default: return evaluateAny(d, s, v, rp) } diff --git a/internal/rosa/azalea/evaluate_test.go b/internal/rosa/azalea/evaluate_test.go index 4a6c2f56..0dc81e5a 100644 --- a/internal/rosa/azalea/evaluate_test.go +++ b/internal/rosa/azalea/evaluate_test.go @@ -100,13 +100,13 @@ func TestEvaluate(t *testing.T) { Err: UndefinedError("f"), }}, - {"error wrap deep", `f { v = nil; }`, makeStackCheck(func( + {"error wrap deep", `f { v = nonexistent; }`, makeStackCheck(func( FArgs, ) (any, error) { panic("unreachable") }), "", EvaluationError{ - Expr: Ident("nil"), - Err: UndefinedError("nil"), + Expr: Ident("nonexistent"), + Err: UndefinedError("nonexistent"), }}, {"common inputs", `package name { inputs, v = []; }`, nil, "", EvaluationError{