Skip to content

Commit 1caae7f

Browse files
author
mgricken
committed
Fixing bug 3116238: (int) (true) command pops error
DynamicJava doesn't perform static type checking for primitive casts. M dynamicjava/src/edu/rice/cs/dynamicjava/symbol/StandardTypeSystem.java M drjava/lib/dynamicjava-base.jar M drjava/src/edu/rice/cs/drjava/ui/MainFrame.java git-svn-id: file:///tmp/test-svn/trunk@5414 fe72c1cf-3628-48e9-8b72-1c46755d3cff
1 parent 5ac390c commit 1caae7f

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

drjava/lib/dynamicjava-base.jar

778 Bytes
Binary file not shown.

drjava/src/edu/rice/cs/drjava/ui/MainFrame.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7020,12 +7020,10 @@ public void optionChanged(OptionEvent<Integer> oce) {
70207020
case OptionConstants.INTERMEDIATE_LEVEL:
70217021
case OptionConstants.FUNCTIONAL_JAVA_LEVEL: {
70227022
rbFunctionalMenuItem.setSelected(true);
7023-
System.out.println("rbFunctionalMenuItem.setSelected(true);");
70247023
break;
70257024
}
70267025
default: {
70277026
rbFullJavaMenuItem.setSelected(true);
7028-
System.out.println("rbFullJavaMenuItem.setSelected(true);");
70297027
break;
70307028
}
70317029
}

dynamicjava/src/edu/rice/cs/dynamicjava/symbol/StandardTypeSystem.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -996,6 +996,29 @@ public Expression cast(final Type target, final Expression e) throws Unsupported
996996
try {
997997
Expression result = makePrimitive(e);
998998
Type source = NodeProperties.getType(result);
999+
1000+
// type check valid conversions, see ExpressionEvaluator.convert
1001+
if (target.equals(BOOLEAN)) {
1002+
if (!source.equals(BOOLEAN)) { throw new UnsupportedConversionException(); }
1003+
}
1004+
else if (target.equals(CHAR) ||
1005+
target.equals(BYTE) ||
1006+
target.equals(SHORT) ||
1007+
target.equals(INT) ||
1008+
target.equals(LONG) ||
1009+
target.equals(FLOAT) ||
1010+
target.equals(DOUBLE)) {
1011+
if ((!source.equals(CHAR)) &&
1012+
(!source.equals(BYTE)) &&
1013+
(!source.equals(DOUBLE)) &&
1014+
(!source.equals(FLOAT)) &&
1015+
(!source.equals(INT)) &&
1016+
(!source.equals(LONG)) &&
1017+
(!source.equals(SHORT))) { throw new UnsupportedConversionException(); }
1018+
}
1019+
else { throw new IllegalArgumentException(); }
1020+
// end type check valid conversions
1021+
9991022
if (!isEqual(target, source)) { NodeProperties.setConvertedType(result, erasedClass(target)); }
10001023
return result;
10011024
}

0 commit comments

Comments
 (0)