diff --git a/ast/ast.go b/ast/ast.go index 1e9f389..4154914 100644 --- a/ast/ast.go +++ b/ast/ast.go @@ -444,6 +444,9 @@ const ( ObjectFieldExpr // '['expr1']':[:[:]] expr2 ObjectFieldStr // expr1:[:[:]] expr2 ObjectLocal // local id = expr2 + ObjectNullID // null id + ObjectNullExpr // null '['expr1']' + ObjectNullStr // null expr1 ) type ObjectFieldHide int diff --git a/interpreter.go b/interpreter.go index 3e95116..cc7238c 100644 --- a/interpreter.go +++ b/interpreter.go @@ -942,22 +942,20 @@ func evaluateAux(i *interpreter, node ast.Node, tla vmExtMap) (value, *TraceElem if err != nil { return nil, nil, err } - if len(tla) != 0 { - // If it's not a function, ignore TLA - if f, ok := result.(*valueFunction); ok { - toplevelArgMap := prepareExtVars(i, tla, "top-level-arg") - args := callArguments{} - for argName, pv := range toplevelArgMap { - args.named = append(args.named, namedCallArgument{name: ast.Identifier(argName), pv: pv}) - } - funcLoc := ast.MakeLocationRangeMessage("Top-level function") - funcTrace := &TraceElement{ - loc: &funcLoc, - } - result, err = f.call(args).getValue(i, funcTrace) - if err != nil { - return nil, nil, err - } + // If it's not a function, ignore TLA + if f, ok := result.(*valueFunction); ok { + toplevelArgMap := prepareExtVars(i, tla, "top-level-arg") + args := callArguments{} + for argName, pv := range toplevelArgMap { + args.named = append(args.named, namedCallArgument{name: ast.Identifier(argName), pv: pv}) + } + funcLoc := ast.MakeLocationRangeMessage("Top-level function") + funcTrace := &TraceElement{ + loc: &funcLoc, + } + result, err = f.call(args).getValue(i, funcTrace) + if err != nil { + return nil, nil, err } } manifestationLoc := ast.MakeLocationRangeMessage("During manifestation") diff --git a/testdata/function.golden b/testdata/function_manifested.golden similarity index 100% rename from testdata/function.golden rename to testdata/function_manifested.golden diff --git a/testdata/function_manifested.jsonnet b/testdata/function_manifested.jsonnet new file mode 100644 index 0000000..265a376 --- /dev/null +++ b/testdata/function_manifested.jsonnet @@ -0,0 +1,3 @@ +{ + f(x): 3, +} diff --git a/testdata/function_no_params.golden b/testdata/function_no_params.golden new file mode 100644 index 0000000..d81cc07 --- /dev/null +++ b/testdata/function_no_params.golden @@ -0,0 +1 @@ +42 diff --git a/testdata/function.jsonnet b/testdata/function_no_params.jsonnet similarity index 100% rename from testdata/function.jsonnet rename to testdata/function_no_params.jsonnet diff --git a/testdata/function_too_many_params.golden b/testdata/function_too_many_params.golden new file mode 100644 index 0000000..273e011 --- /dev/null +++ b/testdata/function_too_many_params.golden @@ -0,0 +1,5 @@ +RUNTIME ERROR: Missing argument: x +------------------------------------------------- + Top-level function + + diff --git a/testdata/function_too_many_params.jsonnet b/testdata/function_too_many_params.jsonnet new file mode 100644 index 0000000..1285c2e --- /dev/null +++ b/testdata/function_too_many_params.jsonnet @@ -0,0 +1 @@ +function(x) 3