Improvement primitive cast optimizations.
Change-Id: I023de40e620a80ae40ff757c504d13553529c342
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java
index 8c3de56..390b828 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java
@@ -51,7 +51,11 @@
@Override
public boolean hasSideEffects() {
- // Any live cast operations might throw a ClassCastException
+ if (castType.isPrimitiveType()) {
+ // Primitive casts do not throw and only have side effects if the expression has side effects.
+ return expr.hasSideEffects();
+ }
+ // Any live non-primitive cast operations might throw a ClassCastException
//
// TODO: revisit this when we support the concept of whether something
// can/must complete normally!
diff --git a/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java b/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java
index c4d14cc..5d27b57 100644
--- a/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java
+++ b/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java
@@ -62,6 +62,7 @@
}
private static Object field;
+ private static double doubleField = new Random().nextDouble();
private static int randomNumber = new Random().nextInt(42);
@@ -123,6 +124,10 @@
return ((NativeNumber) field);
}
+ public static void castInt() {
+ int num = ((int) doubleField);
+ }
+
private static native String getGeneratedCastFunctionDefinition() /*-{
return function() {
@CastOptimizationTest::castOp()();
@@ -134,6 +139,7 @@
@CastOptimizationTest::castNativeNumber()();
@CastOptimizationTest::castNativeArray()();
@CastOptimizationTest::castNativeObject()();
+ @CastOptimizationTest::castInt()();
}.toString();
}-*/;