< prev index next >
src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/LocalVariableTypesCalculator.java
Print this page
@@ -129,11 +129,10 @@
}
private enum LvarType {
UNDEFINED(Type.UNDEFINED),
BOOLEAN(Type.BOOLEAN),
INT(Type.INT),
- LONG(Type.LONG),
DOUBLE(Type.NUMBER),
OBJECT(Type.OBJECT);
private final Type type;
private final TypeHolderExpression typeExpression;
@@ -270,51 +269,33 @@
symbol.setHasSlotFor(type.type);
}
}
private static class SymbolConversions {
- private static final byte I2L = 1 << 0;
- private static final byte I2D = 1 << 1;
- private static final byte I2O = 1 << 2;
- private static final byte L2D = 1 << 3;
- private static final byte L2O = 1 << 4;
- private static final byte D2O = 1 << 5;
+ private static final byte I2D = 1 << 0;
+ private static final byte I2O = 1 << 1;
+ private static final byte D2O = 1 << 2;
private byte conversions;
void recordConversion(final LvarType from, final LvarType to) {
switch (from) {
case UNDEFINED:
return;
case INT:
case BOOLEAN:
switch (to) {
- case LONG:
- recordConversion(I2L);
- return;
case DOUBLE:
recordConversion(I2D);
return;
case OBJECT:
recordConversion(I2O);
return;
default:
illegalConversion(from, to);
return;
}
- case LONG:
- switch (to) {
- case DOUBLE:
- recordConversion(L2D);
- return;
- case OBJECT:
- recordConversion(L2O);
- return;
- default:
- illegalConversion(from, to);
- return;
- }
case DOUBLE:
if(to == LvarType.OBJECT) {
recordConversion(D2O);
}
return;
@@ -338,30 +319,19 @@
void calculateTypeLiveness(final Symbol symbol) {
if(symbol.hasSlotFor(Type.OBJECT)) {
if(hasConversion(D2O)) {
symbol.setHasSlotFor(Type.NUMBER);
}
- if(hasConversion(L2O)) {
- symbol.setHasSlotFor(Type.LONG);
- }
if(hasConversion(I2O)) {
symbol.setHasSlotFor(Type.INT);
}
}
if(symbol.hasSlotFor(Type.NUMBER)) {
- if(hasConversion(L2D)) {
- symbol.setHasSlotFor(Type.LONG);
- }
if(hasConversion(I2D)) {
symbol.setHasSlotFor(Type.INT);
}
}
- if(symbol.hasSlotFor(Type.LONG)) {
- if(hasConversion(I2L)) {
- symbol.setHasSlotFor(Type.INT);
- }
- }
}
}
private void symbolIsConverted(final Symbol symbol, final LvarType from, final LvarType to) {
SymbolConversions conversions = symbolConversions.get(symbol);
@@ -376,11 +346,11 @@
assert type != null;
final LvarType lvarType = TO_LVAR_TYPE.get(type);
if(lvarType != null) {
return lvarType;
}
- assert type.isObject();
+ assert type.isObject() : "Unsupported primitive type: " + type;
return LvarType.OBJECT;
}
private static LvarType widestLvarType(final LvarType t1, final LvarType t2) {
if(t1 == t2) {
return t1;
< prev index next >