From ea47618513375bed0d91b9e148bed21546e77fcb Mon Sep 17 00:00:00 2001 From: Jonathan Tatum Date: Tue, 7 Jan 2025 20:31:02 +0000 Subject: [PATCH 1/2] Default enable using hidden accumulator name. Switches the default accumulator name to '@result' for standard macros. The resulting ASTs are semantically equivalent, but may break checks that assumed the old name. --- checker/checker_test.go | 110 ++++++++--------- common/ast/conversion_test.go | 2 +- common/ast/factory.go | 2 +- common/ast/navigable_test.go | 8 +- interpreter/interpreter_test.go | 4 +- parser/parser.go | 1 + parser/parser_test.go | 207 +++++++++++++------------------- 7 files changed, 149 insertions(+), 185 deletions(-) diff --git a/checker/checker_test.go b/checker/checker_test.go index ac5bbd5b6..c689c52dc 100644 --- a/checker/checker_test.go +++ b/checker/checker_test.go @@ -561,23 +561,23 @@ _==_(size(x~google.expr.proto3.test.TestAllTypes^x.map_int64_nested_type // Target x~bool^x, // Accumulator - __result__, + @result, // Init true~bool, // LoopCondition @not_strictly_false( - __result__~bool^__result__ + @result~bool^@result )~bool^not_strictly_false, // LoopStep _&&_( - __result__~bool^__result__, + @result~bool^@result, _==_( y~!error!^y, true~bool )~bool^equals )~bool^logical_and, // Result - __result__~bool^__result__)~bool + @result~bool^@result)~bool `, err: `ERROR: :1:1: expression of type 'bool' cannot be range of a comprehension (must be list, map, or dynamic) | x.all(y, y == true) @@ -597,14 +597,14 @@ _==_(size(x~google.expr.proto3.test.TestAllTypes^x.map_int64_nested_type // Target x~google.expr.proto3.test.TestAllTypes^x.repeated_int64~list(int), // Accumulator - __result__, + @result, // Init []~list(double), // LoopCondition true~bool, // LoopStep _+_( - __result__~list(double)^__result__, + @result~list(double)^@result, [ double( x~int^x @@ -612,7 +612,7 @@ _==_(size(x~google.expr.proto3.test.TestAllTypes^x.map_int64_nested_type ]~list(double) )~list(double)^add_list, // Result - __result__~list(double)^__result__)~list(double) + @result~list(double)^@result)~list(double) `, outType: types.NewListType(types.DoubleType), }, @@ -630,7 +630,7 @@ _==_(size(x~google.expr.proto3.test.TestAllTypes^x.map_int64_nested_type // Target x~google.expr.proto3.test.TestAllTypes^x.repeated_int64~list(int), // Accumulator - __result__, + @result, // Init []~list(double), // LoopCondition @@ -642,17 +642,17 @@ _==_(size(x~google.expr.proto3.test.TestAllTypes^x.map_int64_nested_type 0~int )~bool^greater_int64, _+_( - __result__~list(double)^__result__, + @result~list(double)^@result, [ double( x~int^x )~double^int64_to_double ]~list(double) )~list(double)^add_list, - __result__~list(double)^__result__ + @result~list(double)^@result )~list(double)^conditional, // Result - __result__~list(double)^__result__)~list(double) + @result~list(double)^@result)~list(double) `, outType: types.NewListType(types.DoubleType), }, @@ -887,48 +887,48 @@ ERROR: :1:16: found no matching overload for '_!=_' applied to '(int, nul // Target x~google.expr.proto3.test.TestAllTypes^x.repeated_int64~list(int), // Accumulator - __result__, + @result, // Init true~bool, // LoopCondition @not_strictly_false( - __result__~bool^__result__ + @result~bool^@result )~bool^not_strictly_false, // LoopStep _&&_( - __result__~bool^__result__, + @result~bool^@result, _>_( e~int^e, 0~int )~bool^greater_int64 )~bool^logical_and, // Result - __result__~bool^__result__)~bool, + @result~bool^@result)~bool, __comprehension__( // Variable e, // Target x~google.expr.proto3.test.TestAllTypes^x.repeated_int64~list(int), // Accumulator - __result__, + @result, // Init false~bool, // LoopCondition @not_strictly_false( !_( - __result__~bool^__result__ + @result~bool^@result )~bool^logical_not )~bool^not_strictly_false, // LoopStep _||_( - __result__~bool^__result__, + @result~bool^@result, _<_( e~int^e, 0~int )~bool^less_int64 )~bool^logical_or, // Result - __result__~bool^__result__)~bool + @result~bool^@result)~bool )~bool^logical_and, __comprehension__( // Variable @@ -936,7 +936,7 @@ ERROR: :1:16: found no matching overload for '_!=_' applied to '(int, nul // Target x~google.expr.proto3.test.TestAllTypes^x.repeated_int64~list(int), // Accumulator - __result__, + @result, // Init 0~int, // LoopCondition @@ -948,14 +948,14 @@ ERROR: :1:16: found no matching overload for '_!=_' applied to '(int, nul 0~int )~bool^equals, _+_( - __result__~int^__result__, + @result~int^@result, 1~int )~int^add_int64, - __result__~int^__result__ + @result~int^@result )~int^conditional, // Result _==_( - __result__~int^__result__, + @result~int^@result, 1~int )~bool^equals)~bool )~bool^logical_and`, @@ -986,7 +986,7 @@ ERROR: :1:10: expected type 'bool' but found 'int' // Target lists~dyn^lists, // Accumulator - __result__, + @result, // Init []~list(dyn), // LoopCondition @@ -998,15 +998,15 @@ ERROR: :1:10: expected type 'bool' but found 'int' 1.5~double )~bool^greater_double|greater_int64_double|greater_uint64_double, _+_( - __result__~list(dyn)^__result__, + @result~list(dyn)^@result, [ x~dyn^x ]~list(dyn) )~list(dyn)^add_list, - __result__~list(dyn)^__result__ + @result~list(dyn)^@result )~list(dyn)^conditional, // Result - __result__~list(dyn)^__result__)~list(dyn)`, + @result~list(dyn)^@result)~list(dyn)`, outType: types.NewListType(types.DynType), env: testEnv{ idents: []*decls.VariableDecl{ @@ -1381,7 +1381,7 @@ _&&_(_==_(list~type(list(dyn))^list, "myextension"~string )~dyn^index_map.customAttributes~dyn, // Accumulator - __result__, + @result, // Init []~list(dyn), // LoopCondition @@ -1393,15 +1393,15 @@ _&&_(_==_(list~type(list(dyn))^list, "hobbies"~string )~bool^equals, _+_( - __result__~list(dyn)^__result__, + @result~list(dyn)^@result, [ x~dyn^x ]~list(dyn) )~list(dyn)^add_list, - __result__~list(dyn)^__result__ + @result~list(dyn)^@result )~list(dyn)^conditional, // Result - __result__~list(dyn)^__result__)~list(dyn)`, + @result~list(dyn)^@result)~list(dyn)`, env: testEnv{ idents: []*decls.VariableDecl{ decls.NewVariable("args", types.NewMapType(types.StringType, types.DynType)), @@ -1867,14 +1867,14 @@ _&&_(_==_(list~type(list(dyn))^list, 1~int ]~list(int), // Accumulator - __result__, + @result, // Init []~list(list(int)), // LoopCondition true~bool, // LoopStep _+_( - __result__~list(list(int))^__result__, + @result~list(list(int))^@result, [ [ x~int^x, @@ -1883,16 +1883,16 @@ _&&_(_==_(list~type(list(dyn))^list, ]~list(list(int)) )~list(list(int))^add_list, // Result - __result__~list(list(int))^__result__)~list(list(int)), + @result~list(list(int))^@result)~list(list(int)), // Accumulator - __result__, + @result, // Init []~list(list(list(int))), // LoopCondition true~bool, // LoopStep _+_( - __result__~list(list(list(int)))^__result__, + @result~list(list(list(int)))^@result, [ [ x~list(int)^x, @@ -1901,7 +1901,7 @@ _&&_(_==_(list~type(list(dyn))^list, ]~list(list(list(int))) )~list(list(list(int)))^add_list, // Result - __result__~list(list(list(int)))^__result__)~list(list(list(int))) + @result~list(list(list(int)))^@result)~list(list(list(int))) `, }, { @@ -1922,7 +1922,7 @@ _&&_(_==_(list~type(list(dyn))^list, // Target values~list(map(string, string))^values, // Accumulator - __result__, + @result, // Init []~list(map(string, string)), // LoopCondition @@ -1934,30 +1934,30 @@ _&&_(_==_(list~type(list(dyn))^list, ""~string )~bool^not_equals, _+_( - __result__~list(map(string, string))^__result__, + @result~list(map(string, string))^@result, [ i~map(string, string)^i ]~list(map(string, string)) )~list(map(string, string))^add_list, - __result__~list(map(string, string))^__result__ + @result~list(map(string, string))^@result )~list(map(string, string))^conditional, // Result - __result__~list(map(string, string))^__result__)~list(map(string, string)), + @result~list(map(string, string))^@result)~list(map(string, string)), // Accumulator - __result__, + @result, // Init []~list(string), // LoopCondition true~bool, // LoopStep _+_( - __result__~list(string)^__result__, + @result~list(string)^@result, [ i~map(string, string)^i.content~string ]~list(string) )~list(string)^add_list, // Result - __result__~list(string)^__result__)~list(string)`, + @result~list(string)^@result)~list(string)`, }, { in: `[{}.map(c,c,c)]+[{}.map(c,c,c)]`, @@ -1970,7 +1970,7 @@ _&&_(_==_(list~type(list(dyn))^list, // Target {}~map(bool, dyn), // Accumulator - __result__, + @result, // Init []~list(bool), // LoopCondition @@ -1979,15 +1979,15 @@ _&&_(_==_(list~type(list(dyn))^list, _?_:_( c~bool^c, _+_( - __result__~list(bool)^__result__, + @result~list(bool)^@result, [ c~bool^c ]~list(bool) )~list(bool)^add_list, - __result__~list(bool)^__result__ + @result~list(bool)^@result )~list(bool)^conditional, // Result - __result__~list(bool)^__result__)~list(bool) + @result~list(bool)^@result)~list(bool) ]~list(list(bool)), [ __comprehension__( @@ -1996,7 +1996,7 @@ _&&_(_==_(list~type(list(dyn))^list, // Target {}~map(bool, dyn), // Accumulator - __result__, + @result, // Init []~list(bool), // LoopCondition @@ -2005,15 +2005,15 @@ _&&_(_==_(list~type(list(dyn))^list, _?_:_( c~bool^c, _+_( - __result__~list(bool)^__result__, + @result~list(bool)^@result, [ c~bool^c ]~list(bool) )~list(bool)^add_list, - __result__~list(bool)^__result__ + @result~list(bool)^@result )~list(bool)^conditional, // Result - __result__~list(bool)^__result__)~list(bool) + @result~list(bool)^@result)~list(bool) ]~list(list(bool)) )~list(list(bool))^add_list`, }, @@ -2241,14 +2241,14 @@ _&&_(_==_(list~type(list(dyn))^list, // Target {}~map(dyn, dyn), // Accumulator - __result__, + @result, // Init []~list(list(dyn)), // LoopCondition true~bool, // LoopStep _+_( - __result__~list(list(dyn))^__result__, + @result~list(list(dyn))^@result, [ [ c~dyn^c, @@ -2259,7 +2259,7 @@ _&&_(_==_(list~type(list(dyn))^list, ]~list(list(dyn)) )~list(list(dyn))^add_list, // Result - __result__~list(list(dyn))^__result__)~list(list(dyn))`, + @result~list(list(dyn))^@result)~list(list(dyn))`, outType: types.NewListType(types.NewListType(types.DynType)), }, } diff --git a/common/ast/conversion_test.go b/common/ast/conversion_test.go index d9754014c..86b00e3e3 100644 --- a/common/ast/conversion_test.go +++ b/common/ast/conversion_test.go @@ -371,7 +371,7 @@ func TestConvertExpr(t *testing.T) { wantExpr: fac.NewComprehension(12, fac.NewList(1, []ast.Expr{}, []int32{}), "i", - "__result__", + fac.AccuIdentName(), fac.NewLiteral(5, types.False), fac.NewCall(8, "@not_strictly_false", fac.NewCall(7, "!_", fac.NewAccuIdent(6))), fac.NewCall(10, "_||_", fac.NewAccuIdent(9), fac.NewIdent(4, "i")), diff --git a/common/ast/factory.go b/common/ast/factory.go index 21d4ac1e4..24548a9d5 100644 --- a/common/ast/factory.go +++ b/common/ast/factory.go @@ -88,7 +88,7 @@ type baseExprFactory struct { // NewExprFactory creates an ExprFactory instance. func NewExprFactory() ExprFactory { return &baseExprFactory{ - "__result__", + "@result", } } diff --git a/common/ast/navigable_test.go b/common/ast/navigable_test.go index 19e2f9dc9..5dab4331a 100644 --- a/common/ast/navigable_test.go +++ b/common/ast/navigable_test.go @@ -494,8 +494,8 @@ func TestNavigableComprehensionExpr(t *testing.T) { if comp.IterVar2() != "" { t.Errorf("IterVar2() returned %s, wanted empty string", comp.IterVar2()) } - if comp.AccuVar() != "__result__" { - t.Errorf("AccuVar() got %s, wanted '__result__'", comp.AccuVar()) + if comp.AccuVar() != "@result" { + t.Errorf("AccuVar() got %s, wanted '@result'", comp.AccuVar()) } if comp.AccuInit().AsLiteral() != types.False { t.Errorf("AccuInit() returned %v, wanted false", comp.AccuInit().AsLiteral()) @@ -509,8 +509,8 @@ func TestNavigableComprehensionExpr(t *testing.T) { if comp.LoopStep().Kind() != ast.CallKind { t.Errorf("LoopStep() returned %v, wanted call", comp.LoopStep()) } - if comp.Result().AsIdent() != "__result__" { - t.Errorf("AsIdent() returned %v, wanted __result__", comp.Result().AsIdent()) + if comp.Result().AsIdent() != "@result" { + t.Errorf("AsIdent() returned %v, wanted @result", comp.Result().AsIdent()) } } diff --git a/interpreter/interpreter_test.go b/interpreter/interpreter_test.go index 8582b6bca..6fc40f4fa 100644 --- a/interpreter/interpreter_test.go +++ b/interpreter/interpreter_test.go @@ -1951,7 +1951,7 @@ func TestInterpreter_PlanListComprehensionTwoVar(t *testing.T) { }, []int32{}), "i", "v", - "__result__", + fac.AccuIdentName(), fac.NewList(5, []ast.Expr{}, []int32{}), fac.NewLiteral(6, types.True), fac.NewCall(7, operators.Add, fac.NewAccuIdent(8), @@ -1989,7 +1989,7 @@ func TestInterpreter_PlanMapComprehensionTwoVar(t *testing.T) { }), "k", "v", - "__result__", + fac.AccuIdentName(), fac.NewMap(9, []ast.EntryExpr{}), fac.NewLiteral(10, types.True), fac.NewCall(11, "cel.@mapInsert", diff --git a/parser/parser.go b/parser/parser.go index c13c7355f..b5ec73ec6 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -41,6 +41,7 @@ type Parser struct { // NewParser builds and returns a new Parser using the provided options. func NewParser(opts ...Option) (*Parser, error) { p := &Parser{} + p.enableHiddenAccumulatorName = true for _, opt := range opts { if err := opt(&p.options); err != nil { return nil, err diff --git a/parser/parser_test.go b/parser/parser_test.go index 403a141c2..eb214d9b2 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -453,22 +453,22 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init false^#5:*expr.Constant_BoolValue#, // LoopCondition @not_strictly_false( !_( - __result__^#6:*expr.Expr_IdentExpr# + @result^#6:*expr.Expr_IdentExpr# )^#7:*expr.Expr_CallExpr# )^#8:*expr.Expr_CallExpr#, // LoopStep _||_( - __result__^#9:*expr.Expr_IdentExpr#, + @result^#9:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# )^#10:*expr.Expr_CallExpr#, // Result - __result__^#11:*expr.Expr_IdentExpr#)^#12:*expr.Expr_ComprehensionExpr#`, + @result^#11:*expr.Expr_IdentExpr#)^#12:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.exists( v^#3:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# @@ -482,20 +482,20 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init true^#5:*expr.Constant_BoolValue#, // LoopCondition @not_strictly_false( - __result__^#6:*expr.Expr_IdentExpr# + @result^#6:*expr.Expr_IdentExpr# )^#7:*expr.Expr_CallExpr#, // LoopStep _&&_( - __result__^#8:*expr.Expr_IdentExpr#, + @result^#8:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# )^#9:*expr.Expr_CallExpr#, // Result - __result__^#10:*expr.Expr_IdentExpr#)^#11:*expr.Expr_ComprehensionExpr#`, + @result^#10:*expr.Expr_IdentExpr#)^#11:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.all( v^#3:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# @@ -509,7 +509,7 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init 0^#5:*expr.Constant_Int64Value#, // LoopCondition @@ -518,14 +518,14 @@ var testCases = []testInfo{ _?_:_( f^#4:*expr.Expr_IdentExpr#, _+_( - __result__^#7:*expr.Expr_IdentExpr#, + @result^#7:*expr.Expr_IdentExpr#, 1^#8:*expr.Constant_Int64Value# )^#9:*expr.Expr_CallExpr#, - __result__^#10:*expr.Expr_IdentExpr# + @result^#10:*expr.Expr_IdentExpr# )^#11:*expr.Expr_CallExpr#, // Result _==_( - __result__^#12:*expr.Expr_IdentExpr#, + @result^#12:*expr.Expr_IdentExpr#, 1^#13:*expr.Constant_Int64Value# )^#14:*expr.Expr_CallExpr#)^#15:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.existsOne( @@ -547,20 +547,20 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init []^#5:*expr.Expr_ListExpr#, // LoopCondition true^#6:*expr.Constant_BoolValue#, // LoopStep _+_( - __result__^#7:*expr.Expr_IdentExpr#, + @result^#7:*expr.Expr_IdentExpr#, [ f^#4:*expr.Expr_IdentExpr# ]^#8:*expr.Expr_ListExpr# )^#9:*expr.Expr_CallExpr#, // Result - __result__^#10:*expr.Expr_IdentExpr#)^#11:*expr.Expr_ComprehensionExpr#`, + @result^#10:*expr.Expr_IdentExpr#)^#11:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.map( v^#3:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# @@ -580,7 +580,7 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init []^#6:*expr.Expr_ListExpr#, // LoopCondition @@ -589,15 +589,15 @@ var testCases = []testInfo{ _?_:_( p^#4:*expr.Expr_IdentExpr#, _+_( - __result__^#8:*expr.Expr_IdentExpr#, + @result^#8:*expr.Expr_IdentExpr#, [ f^#5:*expr.Expr_IdentExpr# ]^#9:*expr.Expr_ListExpr# )^#10:*expr.Expr_CallExpr#, - __result__^#11:*expr.Expr_IdentExpr# + @result^#11:*expr.Expr_IdentExpr# )^#12:*expr.Expr_CallExpr#, // Result - __result__^#13:*expr.Expr_IdentExpr#)^#14:*expr.Expr_ComprehensionExpr#`, + @result^#13:*expr.Expr_IdentExpr#)^#14:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.map( v^#3:*expr.Expr_IdentExpr#, p^#4:*expr.Expr_IdentExpr#, @@ -613,7 +613,7 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init []^#5:*expr.Expr_ListExpr#, // LoopCondition @@ -622,15 +622,15 @@ var testCases = []testInfo{ _?_:_( p^#4:*expr.Expr_IdentExpr#, _+_( - __result__^#7:*expr.Expr_IdentExpr#, + @result^#7:*expr.Expr_IdentExpr#, [ v^#3:*expr.Expr_IdentExpr# ]^#8:*expr.Expr_ListExpr# )^#9:*expr.Expr_CallExpr#, - __result__^#10:*expr.Expr_IdentExpr# + @result^#10:*expr.Expr_IdentExpr# )^#11:*expr.Expr_CallExpr#, // Result - __result__^#12:*expr.Expr_IdentExpr#)^#13:*expr.Expr_ComprehensionExpr#`, + @result^#12:*expr.Expr_IdentExpr#)^#13:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.filter( v^#3:*expr.Expr_IdentExpr#, p^#4:*expr.Expr_IdentExpr# @@ -1318,7 +1318,7 @@ var testCases = []testInfo{ // Target x^#1:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init []^#19:*expr.Expr_ListExpr#, // LoopCondition @@ -1331,7 +1331,7 @@ var testCases = []testInfo{ // Target y^#4:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init []^#10:*expr.Expr_ListExpr#, // LoopCondition @@ -1343,25 +1343,25 @@ var testCases = []testInfo{ 0^#9:*expr.Constant_Int64Value# )^#8:*expr.Expr_CallExpr#, _+_( - __result__^#12:*expr.Expr_IdentExpr#, + @result^#12:*expr.Expr_IdentExpr#, [ z^#6:*expr.Expr_IdentExpr# ]^#13:*expr.Expr_ListExpr# )^#14:*expr.Expr_CallExpr#, - __result__^#15:*expr.Expr_IdentExpr# + @result^#15:*expr.Expr_IdentExpr# )^#16:*expr.Expr_CallExpr#, // Result - __result__^#17:*expr.Expr_IdentExpr#)^#18:*expr.Expr_ComprehensionExpr#, + @result^#17:*expr.Expr_IdentExpr#)^#18:*expr.Expr_ComprehensionExpr#, _+_( - __result__^#21:*expr.Expr_IdentExpr#, + @result^#21:*expr.Expr_IdentExpr#, [ y^#3:*expr.Expr_IdentExpr# ]^#22:*expr.Expr_ListExpr# )^#23:*expr.Expr_CallExpr#, - __result__^#24:*expr.Expr_IdentExpr# + @result^#24:*expr.Expr_IdentExpr# )^#25:*expr.Expr_CallExpr#, // Result - __result__^#26:*expr.Expr_IdentExpr#)^#27:*expr.Expr_ComprehensionExpr#`, + @result^#26:*expr.Expr_IdentExpr#)^#27:*expr.Expr_ComprehensionExpr#`, M: `x^#1:*expr.Expr_IdentExpr#.filter( y^#3:*expr.Expr_IdentExpr#, ^#18:filter# @@ -1382,7 +1382,7 @@ var testCases = []testInfo{ // Target a^#2:*expr.Expr_IdentExpr#.b~test-only~^#4:*expr.Expr_SelectExpr#, // Accumulator - __result__, + @result, // Init []^#8:*expr.Expr_ListExpr#, // LoopCondition @@ -1391,15 +1391,15 @@ var testCases = []testInfo{ _?_:_( c^#7:*expr.Expr_IdentExpr#, _+_( - __result__^#10:*expr.Expr_IdentExpr#, + @result^#10:*expr.Expr_IdentExpr#, [ c^#6:*expr.Expr_IdentExpr# ]^#11:*expr.Expr_ListExpr# )^#12:*expr.Expr_CallExpr#, - __result__^#13:*expr.Expr_IdentExpr# + @result^#13:*expr.Expr_IdentExpr# )^#14:*expr.Expr_CallExpr#, // Result - __result__^#15:*expr.Expr_IdentExpr#)^#16:*expr.Expr_ComprehensionExpr#`, + @result^#15:*expr.Expr_IdentExpr#)^#16:*expr.Expr_ComprehensionExpr#`, M: `^#4:has#.filter( c^#6:*expr.Expr_IdentExpr#, c^#7:*expr.Expr_IdentExpr# @@ -1416,7 +1416,7 @@ var testCases = []testInfo{ // Target x^#1:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init []^#35:*expr.Expr_ListExpr#, // LoopCondition @@ -1430,55 +1430,55 @@ var testCases = []testInfo{ // Target y^#4:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init false^#11:*expr.Constant_BoolValue#, // LoopCondition @not_strictly_false( !_( - __result__^#12:*expr.Expr_IdentExpr# + @result^#12:*expr.Expr_IdentExpr# )^#13:*expr.Expr_CallExpr# )^#14:*expr.Expr_CallExpr#, // LoopStep _||_( - __result__^#15:*expr.Expr_IdentExpr#, + @result^#15:*expr.Expr_IdentExpr#, z^#8:*expr.Expr_IdentExpr#.a~test-only~^#10:*expr.Expr_SelectExpr# )^#16:*expr.Expr_CallExpr#, // Result - __result__^#17:*expr.Expr_IdentExpr#)^#18:*expr.Expr_ComprehensionExpr#, + @result^#17:*expr.Expr_IdentExpr#)^#18:*expr.Expr_ComprehensionExpr#, __comprehension__( // Variable z, // Target y^#19:*expr.Expr_IdentExpr#, // Accumulator - __result__, + @result, // Init false^#26:*expr.Constant_BoolValue#, // LoopCondition @not_strictly_false( !_( - __result__^#27:*expr.Expr_IdentExpr# + @result^#27:*expr.Expr_IdentExpr# )^#28:*expr.Expr_CallExpr# )^#29:*expr.Expr_CallExpr#, // LoopStep _||_( - __result__^#30:*expr.Expr_IdentExpr#, + @result^#30:*expr.Expr_IdentExpr#, z^#23:*expr.Expr_IdentExpr#.b~test-only~^#25:*expr.Expr_SelectExpr# )^#31:*expr.Expr_CallExpr#, // Result - __result__^#32:*expr.Expr_IdentExpr#)^#33:*expr.Expr_ComprehensionExpr# + @result^#32:*expr.Expr_IdentExpr#)^#33:*expr.Expr_ComprehensionExpr# )^#34:*expr.Expr_CallExpr#, _+_( - __result__^#37:*expr.Expr_IdentExpr#, + @result^#37:*expr.Expr_IdentExpr#, [ y^#3:*expr.Expr_IdentExpr# ]^#38:*expr.Expr_ListExpr# )^#39:*expr.Expr_CallExpr#, - __result__^#40:*expr.Expr_IdentExpr# + @result^#40:*expr.Expr_IdentExpr# )^#41:*expr.Expr_CallExpr#, // Result - __result__^#42:*expr.Expr_IdentExpr#)^#43:*expr.Expr_ComprehensionExpr#`, + @result^#42:*expr.Expr_IdentExpr#)^#43:*expr.Expr_ComprehensionExpr#`, M: `x^#1:*expr.Expr_IdentExpr#.filter( y^#3:*expr.Expr_IdentExpr#, _&&_( @@ -1522,22 +1522,22 @@ var testCases = []testInfo{ // Target a^#2:*expr.Expr_IdentExpr#.b~test-only~^#4:*expr.Expr_SelectExpr#.asList()^#5:*expr.Expr_CallExpr#, // Accumulator - __result__, + @result, // Init false^#9:*expr.Constant_BoolValue#, // LoopCondition @not_strictly_false( !_( - __result__^#10:*expr.Expr_IdentExpr# + @result^#10:*expr.Expr_IdentExpr# )^#11:*expr.Expr_CallExpr# )^#12:*expr.Expr_CallExpr#, // LoopStep _||_( - __result__^#13:*expr.Expr_IdentExpr#, + @result^#13:*expr.Expr_IdentExpr#, c^#8:*expr.Expr_IdentExpr# )^#14:*expr.Expr_CallExpr#, // Result - __result__^#15:*expr.Expr_IdentExpr#)^#16:*expr.Expr_ComprehensionExpr#`, + @result^#15:*expr.Expr_IdentExpr#)^#16:*expr.Expr_ComprehensionExpr#`, M: `^#4:has#.asList()^#5:*expr.Expr_CallExpr#.exists( c^#7:*expr.Expr_IdentExpr#, c^#8:*expr.Expr_IdentExpr# @@ -1557,22 +1557,22 @@ var testCases = []testInfo{ c^#7:*expr.Expr_IdentExpr#.d~test-only~^#9:*expr.Expr_SelectExpr# ]^#1:*expr.Expr_ListExpr#, // Accumulator - __result__, + @result, // Init false^#13:*expr.Constant_BoolValue#, // LoopCondition @not_strictly_false( !_( - __result__^#14:*expr.Expr_IdentExpr# + @result^#14:*expr.Expr_IdentExpr# )^#15:*expr.Expr_CallExpr# )^#16:*expr.Expr_CallExpr#, // LoopStep _||_( - __result__^#17:*expr.Expr_IdentExpr#, + @result^#17:*expr.Expr_IdentExpr#, e^#12:*expr.Expr_IdentExpr# )^#18:*expr.Expr_CallExpr#, // Result - __result__^#19:*expr.Expr_IdentExpr#)^#20:*expr.Expr_ComprehensionExpr#`, + @result^#19:*expr.Expr_IdentExpr#)^#20:*expr.Expr_ComprehensionExpr#`, M: `[ ^#5:has#, ^#9:has# @@ -1887,11 +1887,11 @@ var testCases = []testInfo{ | '\udead' == '\ufffd' | ^`, }, - // Macro tests with new accumulator name + // Macro tests for old accumulator name { I: `m.exists(v, f)`, Opts: []Option{ - EnableHiddenAccumulatorName(true), + EnableHiddenAccumulatorName(false), }, P: `__comprehension__( // Variable @@ -1899,22 +1899,22 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - @result, + __result__, // Init false^#5:*expr.Constant_BoolValue#, // LoopCondition @not_strictly_false( !_( - @result^#6:*expr.Expr_IdentExpr# + __result__^#6:*expr.Expr_IdentExpr# )^#7:*expr.Expr_CallExpr# )^#8:*expr.Expr_CallExpr#, // LoopStep _||_( - @result^#9:*expr.Expr_IdentExpr#, + __result__^#9:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# )^#10:*expr.Expr_CallExpr#, // Result - @result^#11:*expr.Expr_IdentExpr#)^#12:*expr.Expr_ComprehensionExpr#`, + __result__^#11:*expr.Expr_IdentExpr#)^#12:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.exists( v^#3:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# @@ -1923,7 +1923,7 @@ var testCases = []testInfo{ { I: `m.all(v, f)`, Opts: []Option{ - EnableHiddenAccumulatorName(true), + EnableHiddenAccumulatorName(false), }, P: `__comprehension__( // Variable @@ -1931,20 +1931,20 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - @result, + __result__, // Init true^#5:*expr.Constant_BoolValue#, // LoopCondition @not_strictly_false( - @result^#6:*expr.Expr_IdentExpr# + __result__^#6:*expr.Expr_IdentExpr# )^#7:*expr.Expr_CallExpr#, // LoopStep _&&_( - @result^#8:*expr.Expr_IdentExpr#, + __result__^#8:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# )^#9:*expr.Expr_CallExpr#, // Result - @result^#10:*expr.Expr_IdentExpr#)^#11:*expr.Expr_ComprehensionExpr#`, + __result__^#10:*expr.Expr_IdentExpr#)^#11:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.all( v^#3:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# @@ -1953,7 +1953,7 @@ var testCases = []testInfo{ { I: `m.existsOne(v, f)`, Opts: []Option{ - EnableHiddenAccumulatorName(true), + EnableHiddenAccumulatorName(false), }, P: `__comprehension__( // Variable @@ -1961,7 +1961,7 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - @result, + __result__, // Init 0^#5:*expr.Constant_Int64Value#, // LoopCondition @@ -1970,14 +1970,14 @@ var testCases = []testInfo{ _?_:_( f^#4:*expr.Expr_IdentExpr#, _+_( - @result^#7:*expr.Expr_IdentExpr#, + __result__^#7:*expr.Expr_IdentExpr#, 1^#8:*expr.Constant_Int64Value# )^#9:*expr.Expr_CallExpr#, - @result^#10:*expr.Expr_IdentExpr# + __result__^#10:*expr.Expr_IdentExpr# )^#11:*expr.Expr_CallExpr#, // Result _==_( - @result^#12:*expr.Expr_IdentExpr#, + __result__^#12:*expr.Expr_IdentExpr#, 1^#13:*expr.Constant_Int64Value# )^#14:*expr.Expr_CallExpr#)^#15:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.existsOne( @@ -1988,7 +1988,7 @@ var testCases = []testInfo{ { I: `m.map(v, f)`, Opts: []Option{ - EnableHiddenAccumulatorName(true), + EnableHiddenAccumulatorName(false), }, P: `__comprehension__( // Variable @@ -1996,20 +1996,20 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - @result, + __result__, // Init []^#5:*expr.Expr_ListExpr#, // LoopCondition true^#6:*expr.Constant_BoolValue#, // LoopStep _+_( - @result^#7:*expr.Expr_IdentExpr#, + __result__^#7:*expr.Expr_IdentExpr#, [ f^#4:*expr.Expr_IdentExpr# ]^#8:*expr.Expr_ListExpr# )^#9:*expr.Expr_CallExpr#, // Result - @result^#10:*expr.Expr_IdentExpr#)^#11:*expr.Expr_ComprehensionExpr#`, + __result__^#10:*expr.Expr_IdentExpr#)^#11:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.map( v^#3:*expr.Expr_IdentExpr#, f^#4:*expr.Expr_IdentExpr# @@ -2018,7 +2018,7 @@ var testCases = []testInfo{ { I: `m.map(v, p, f)`, Opts: []Option{ - EnableHiddenAccumulatorName(true), + EnableHiddenAccumulatorName(false), }, P: `__comprehension__( // Variable @@ -2026,7 +2026,7 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - @result, + __result__, // Init []^#6:*expr.Expr_ListExpr#, // LoopCondition @@ -2035,15 +2035,15 @@ var testCases = []testInfo{ _?_:_( p^#4:*expr.Expr_IdentExpr#, _+_( - @result^#8:*expr.Expr_IdentExpr#, + __result__^#8:*expr.Expr_IdentExpr#, [ f^#5:*expr.Expr_IdentExpr# ]^#9:*expr.Expr_ListExpr# )^#10:*expr.Expr_CallExpr#, - @result^#11:*expr.Expr_IdentExpr# + __result__^#11:*expr.Expr_IdentExpr# )^#12:*expr.Expr_CallExpr#, // Result - @result^#13:*expr.Expr_IdentExpr#)^#14:*expr.Expr_ComprehensionExpr#`, + __result__^#13:*expr.Expr_IdentExpr#)^#14:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.map( v^#3:*expr.Expr_IdentExpr#, p^#4:*expr.Expr_IdentExpr#, @@ -2054,7 +2054,7 @@ var testCases = []testInfo{ { I: `m.filter(v, p)`, Opts: []Option{ - EnableHiddenAccumulatorName(true), + EnableHiddenAccumulatorName(false), }, P: `__comprehension__( // Variable @@ -2062,7 +2062,7 @@ var testCases = []testInfo{ // Target m^#1:*expr.Expr_IdentExpr#, // Accumulator - @result, + __result__, // Init []^#5:*expr.Expr_ListExpr#, // LoopCondition @@ -2071,57 +2071,20 @@ var testCases = []testInfo{ _?_:_( p^#4:*expr.Expr_IdentExpr#, _+_( - @result^#7:*expr.Expr_IdentExpr#, + __result__^#7:*expr.Expr_IdentExpr#, [ v^#3:*expr.Expr_IdentExpr# ]^#8:*expr.Expr_ListExpr# )^#9:*expr.Expr_CallExpr#, - @result^#10:*expr.Expr_IdentExpr# + __result__^#10:*expr.Expr_IdentExpr# )^#11:*expr.Expr_CallExpr#, // Result - @result^#12:*expr.Expr_IdentExpr#)^#13:*expr.Expr_ComprehensionExpr#`, + __result__^#12:*expr.Expr_IdentExpr#)^#13:*expr.Expr_ComprehensionExpr#`, M: `m^#1:*expr.Expr_IdentExpr#.filter( v^#3:*expr.Expr_IdentExpr#, p^#4:*expr.Expr_IdentExpr# )^#13:filter#`, }, - // Preserve restriction on old accumulator var name for consistency until new name is defaulted. - { - I: `m.filter(__result__, false)`, - Opts: []Option{ - EnableHiddenAccumulatorName(true), - }, - E: `ERROR: :1:10: iteration variable overwrites accumulator variable - | m.filter(__result__, false) - | .........^`, - }, - { - I: `m.map(__result__, __result__)`, - Opts: []Option{ - EnableHiddenAccumulatorName(true), - }, - E: `ERROR: :1:7: iteration variable overwrites accumulator variable - | m.map(__result__, __result__) - | ......^`, - }, - { - I: `[].existsOne(__result__, __result__)`, - Opts: []Option{ - EnableHiddenAccumulatorName(true), - }, - E: `ERROR: :1:14: iteration variable overwrites accumulator variable - | [].existsOne(__result__, __result__) - | .............^`, - }, - { - I: `m.filter(a.b, false)`, - Opts: []Option{ - EnableHiddenAccumulatorName(true), - }, - E: `ERROR: :1:11: argument is not an identifier - | m.filter(a.b, false) - | ..........^`, - }, } type testInfo struct { From f533bc879fcb22f5c50273e03a2fd5dee9ae58b3 Mon Sep 17 00:00:00 2001 From: Jonathan Tatum Date: Wed, 15 Jan 2025 22:43:32 +0000 Subject: [PATCH 2/2] Formatting fixes. --- common/ast/factory.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/ast/factory.go b/common/ast/factory.go index 24548a9d5..d4dcde4d9 100644 --- a/common/ast/factory.go +++ b/common/ast/factory.go @@ -40,7 +40,7 @@ type ExprFactory interface { NewIdent(id int64, name string) Expr // NewAccuIdent creates an Expr value representing an accumulator identifier within a - //comprehension. + // comprehension. NewAccuIdent(id int64) Expr // AccuIdentName reports the name of the accumulator variable to be used within a comprehension. @@ -51,7 +51,7 @@ type ExprFactory interface { // NewList creates an Expr value representing a list literal expression with optional indices. // - // Optional indicies will typically be empty unless the CEL optional types are enabled. + // Optional indices will typically be empty unless the CEL optional types are enabled. NewList(id int64, elems []Expr, optIndices []int32) Expr // NewMap creates an Expr value representing a map literal expression