Skip to content

Commit 02b8fd5

Browse files
Jesse-Goodcopybara-github
authored andcommitted
No public description
PiperOrigin-RevId: 762149697
1 parent af32e84 commit 02b8fd5

19 files changed

+162
-91
lines changed

java/src/com/google/template/soy/jbcsrc/ExpressionCompiler.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -520,11 +520,9 @@ protected SoyExpression visitBooleanNode(BooleanNode node) {
520520

521521
@Override
522522
protected SoyExpression visitAsOpNode(AsOpNode node) {
523-
boolean mustBeBoxed = SoyRuntimeType.getUnboxedType(node.getType()).isEmpty();
524-
SoyExpression value = visit(node.getChild(0));
525-
if (mustBeBoxed) {
526-
value = value.box();
527-
}
523+
// Casting requires boxing since the JVM can't just cast one primitive to another without
524+
// coercing (and thus changing the underlying value).
525+
SoyExpression value = visit(node.getChild(0)).box();
528526
return SoyExpression.forSoyValue(node.getType(), value.checkedSoyCast(node.getType()));
529527
}
530528

java/src/com/google/template/soy/types/AbstractIterableType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public SoyType getElementType() {
3535
public abstract boolean isEmpty();
3636

3737
@Override
38-
boolean doIsAssignableFromNonUnionType(SoyType srcType, UnknownAssignmentPolicy policy) {
38+
boolean doIsAssignableFromNonUnionType(SoyType srcType, AssignabilityPolicy policy) {
3939
// Handle the special empty types.
4040
if (this == srcType) {
4141
return true;

java/src/com/google/template/soy/types/FunctionType.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ public final Kind getKind() {
7171
}
7272

7373
@Override
74-
final boolean doIsAssignableFromNonUnionType(
75-
SoyType srcType, UnknownAssignmentPolicy unknownPolicy) {
74+
final boolean doIsAssignableFromNonUnionType(SoyType srcType, AssignabilityPolicy policy) {
7675
if (srcType.getKind() != Kind.FUNCTION) {
7776
return false;
7877
}
@@ -86,7 +85,7 @@ final boolean doIsAssignableFromNonUnionType(
8685
for (int i = 0; i < paramsInCommon; i++) {
8786
Parameter thisParam = getParameters().get(i);
8887
Parameter srcParam = srcFunction.getParameters().get(i);
89-
if (!srcParam.getType().isAssignableFromInternal(thisParam.getType(), unknownPolicy)) {
88+
if (!srcParam.getType().isAssignableFromInternal(thisParam.getType(), policy)) {
9089
return false;
9190
}
9291
}

java/src/com/google/template/soy/types/IndexedType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public boolean isOriginallyOptional() {
7878
}
7979

8080
@Override
81-
boolean doIsAssignableFromNonUnionType(SoyType srcType, UnknownAssignmentPolicy policy) {
81+
boolean doIsAssignableFromNonUnionType(SoyType srcType, AssignabilityPolicy policy) {
8282
return getEffectiveType().isAssignableFromInternal(srcType, policy);
8383
}
8484
}

java/src/com/google/template/soy/types/IntType.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818

1919
import com.google.template.soy.soytree.SoyTypeP;
2020

21-
/**
22-
* Soy integer type.
23-
*/
21+
/** Soy integer type. */
2422
public final class IntType extends PrimitiveType {
2523

2624
private static final IntType INSTANCE = new IntType();
@@ -34,11 +32,13 @@ public Kind getKind() {
3432
}
3533

3634
@Override
37-
boolean doIsAssignableFromNonUnionType(SoyType srcType) {
35+
boolean doIsAssignableFromNonUnionType(SoyType srcType, AssignabilityPolicy policy) {
3836
Kind kind = srcType.getKind();
3937
// enums are implicitly assignable to ints since that is the runtime representation in all
4038
// backends
41-
return kind == Kind.INT || kind == Kind.PROTO_ENUM || kind == Kind.NUMBER;
39+
return kind == Kind.INT
40+
|| kind == Kind.PROTO_ENUM
41+
|| (policy.isNumericCoercionsAllowed() && kind == Kind.NUMBER);
4242
}
4343

4444
@Override
@@ -50,6 +50,7 @@ public String toString() {
5050
void doToProto(SoyTypeP.Builder builder) {
5151
builder.setPrimitive(SoyTypeP.PrimitiveTypeP.INT);
5252
}
53+
5354
/** Return the single instance of this type. */
5455
public static IntType getInstance() {
5556
return INSTANCE;

java/src/com/google/template/soy/types/IntersectionType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@ public Kind getKind() {
7474
public abstract ImmutableSet<SoyType> getMembers();
7575

7676
@Override
77-
boolean doIsAssignableFromNonUnionType(SoyType srcType, UnknownAssignmentPolicy unknownPolicy) {
77+
boolean doIsAssignableFromNonUnionType(SoyType srcType, AssignabilityPolicy policy) {
7878
// A type can be assigned to a union iff it is assignable to at least one
7979
// member of the union.
8080
for (SoyType memberType : getMembers()) {
81-
if (!memberType.isAssignableFromInternal(srcType, unknownPolicy)) {
81+
if (!memberType.isAssignableFromInternal(srcType, policy)) {
8282
return false;
8383
}
8484
}

java/src/com/google/template/soy/types/LegacyObjectMapType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public SoyType getValueType() {
7575
}
7676

7777
@Override
78-
boolean doIsAssignableFromNonUnionType(SoyType srcType, UnknownAssignmentPolicy policy) {
78+
boolean doIsAssignableFromNonUnionType(SoyType srcType, AssignabilityPolicy policy) {
7979
if (srcType.getKind() == Kind.LEGACY_OBJECT_MAP) {
8080
LegacyObjectMapType srcMapType = (LegacyObjectMapType) srcType;
8181
if (srcMapType == EMPTY) {

java/src/com/google/template/soy/types/ListType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public Kind getKind() {
4949
}
5050

5151
@Override
52-
boolean doIsAssignableFromNonUnionType(SoyType srcType, UnknownAssignmentPolicy policy) {
52+
boolean doIsAssignableFromNonUnionType(SoyType srcType, AssignabilityPolicy policy) {
5353
return srcType.getKind() == Kind.LIST && super.doIsAssignableFromNonUnionType(srcType, policy);
5454
}
5555

java/src/com/google/template/soy/types/MapType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public SoyType getValueType() {
9797
}
9898

9999
@Override
100-
boolean doIsAssignableFromNonUnionType(SoyType srcType, UnknownAssignmentPolicy policy) {
100+
boolean doIsAssignableFromNonUnionType(SoyType srcType, AssignabilityPolicy policy) {
101101
if (srcType.getKind() == Kind.MAP) {
102102
MapType srcMapType = (MapType) srcType;
103103
if (srcMapType == EMPTY) {

java/src/com/google/template/soy/types/NamedType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public SoyType getEffectiveType() {
6868
}
6969

7070
@Override
71-
boolean doIsAssignableFromNonUnionType(SoyType srcType, UnknownAssignmentPolicy policy) {
71+
boolean doIsAssignableFromNonUnionType(SoyType srcType, AssignabilityPolicy policy) {
7272
return getEffectiveType().isAssignableFromInternal(srcType, policy);
7373
}
7474
}

0 commit comments

Comments
 (0)