From 870c59444540cb67d4b047b4695d80f59ac5caef Mon Sep 17 00:00:00 2001 From: Sokwhan Huh Date: Wed, 10 Jan 2024 14:00:23 -0800 Subject: [PATCH] Fix standard function 'type' to accept a parameter type of TypeParamType instead of Dyn PiperOrigin-RevId: 597349307 --- .../main/java/dev/cel/checker/Standard.java | 2 +- .../java/dev/cel/checker/ExprCheckerTest.java | 2 ++ .../abstractTypeParameterLess.baseline | 3 +- .../abstractTypeParameterized.baseline | 3 +- .../test/resources/standardEnvDump.baseline | 2 +- checker/src/test/resources/types.baseline | 31 +++++++++++++++++-- 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/checker/src/main/java/dev/cel/checker/Standard.java b/checker/src/main/java/dev/cel/checker/Standard.java index 02bfefdf..4dcbcb1d 100644 --- a/checker/src/main/java/dev/cel/checker/Standard.java +++ b/checker/src/main/java/dev/cel/checker/Standard.java @@ -320,7 +320,7 @@ private static ImmutableList coreFunctionDeclarations() { CelFunctionDecl.newFunctionDeclaration( "type", CelOverloadDecl.newGlobalOverload( - "type", "returns type of value", TypeType.create(SimpleType.DYN), typeParamA))); + "type", "returns type of value", TypeType.create(typeParamA), typeParamA))); // Conversions to int celFunctionDeclBuilder.add( diff --git a/checker/src/test/java/dev/cel/checker/ExprCheckerTest.java b/checker/src/test/java/dev/cel/checker/ExprCheckerTest.java index 461eb357..9217942c 100644 --- a/checker/src/test/java/dev/cel/checker/ExprCheckerTest.java +++ b/checker/src/test/java/dev/cel/checker/ExprCheckerTest.java @@ -652,6 +652,8 @@ public void unexpectedAggregateMapError() throws Exception { public void types() throws Exception { source = "list == type([1]) && map == type({1:2u})"; runTest(); + source = "{}.map(c,[c,type(c)])"; + runTest(); } // Enum Values diff --git a/checker/src/test/resources/abstractTypeParameterLess.baseline b/checker/src/test/resources/abstractTypeParameterLess.baseline index 8f1e0ea0..10cfae31 100644 --- a/checker/src/test/resources/abstractTypeParameterLess.baseline +++ b/checker/src/test/resources/abstractTypeParameterLess.baseline @@ -13,9 +13,8 @@ _&&_( _==_( type( make_abs()~abs^make_abs - )~type(dyn)^type, + )~type(abs)^type, abs~type(abs)^abs )~bool^equals, make_abs()~abs^make_abs.as_bool()~bool^as_bool )~bool^logical_and - diff --git a/checker/src/test/resources/abstractTypeParameterized.baseline b/checker/src/test/resources/abstractTypeParameterized.baseline index c1e65941..948f61ec 100644 --- a/checker/src/test/resources/abstractTypeParameterized.baseline +++ b/checker/src/test/resources/abstractTypeParameterized.baseline @@ -15,7 +15,7 @@ _&&_( 1~int ]~list(int) )~vector(int)^vector - )~type(dyn)^type, + )~type(vector(int))^type, vector( dyn~type(dyn)^dyn )~type(vector(dyn))^vector @@ -31,4 +31,3 @@ _&&_( 1~int )~bool^equals )~bool^logical_and - diff --git a/checker/src/test/resources/standardEnvDump.baseline b/checker/src/test/resources/standardEnvDump.baseline index 028a9188..4ef2fa9c 100644 --- a/checker/src/test/resources/standardEnvDump.baseline +++ b/checker/src/test/resources/standardEnvDump.baseline @@ -261,7 +261,7 @@ declare timestamp { } declare type { value type(dyn) - function type (A) -> type(dyn) + function type (A) -> type(A) } declare uint { value type(uint) diff --git a/checker/src/test/resources/types.baseline b/checker/src/test/resources/types.baseline index b58cd143..61f3f442 100644 --- a/checker/src/test/resources/types.baseline +++ b/checker/src/test/resources/types.baseline @@ -7,7 +7,7 @@ _&&_( [ 1~int ]~list(int) - )~type(dyn)^type + )~type(list(int))^type )~bool^equals, _==_( map~type(map(dyn, dyn))^map, @@ -15,7 +15,34 @@ _&&_( { 1~int:2u~uint }~map(int, uint) - )~type(dyn)^type + )~type(map(int, uint))^type )~bool^equals )~bool^logical_and +Source: {}.map(c,[c,type(c)]) +=====> +__comprehension__( + // Variable + c, + // Target + {}~map(dyn, dyn), + // Accumulator + __result__, + // Init + []~list(list(dyn)), + // LoopCondition + true~bool, + // LoopStep + _+_( + __result__~list(list(dyn))^__result__, + [ + [ + c~dyn^c, + type( + c~dyn^c + )~type(dyn)^type + ]~list(dyn) + ]~list(list(dyn)) + )~list(list(dyn))^add_list, + // Result + __result__~list(list(dyn))^__result__)~list(list(dyn))