< prev index next >
src/jdk/nashorn/internal/codegen/FoldConstants.java
Print this page
*** 305,317 ****
}
final Type widest = Type.widest(lhs.getType(), rhs.getType());
boolean isInteger = widest.isInteger();
! boolean isLong = widest.isLong();
!
! double value;
switch (parent.tokenType()) {
case DIV:
value = lhs.getNumber() / rhs.getNumber();
break;
--- 305,315 ----
}
final Type widest = Type.widest(lhs.getType(), rhs.getType());
boolean isInteger = widest.isInteger();
! final double value;
switch (parent.tokenType()) {
case DIV:
value = lhs.getNumber() / rhs.getNumber();
break;
*** 334,344 ****
break;
case SUB:
value = lhs.getNumber() - rhs.getNumber();
break;
case SHR:
! return LiteralNode.newInstance(token, finish, JSType.toUint32(lhs.getInt32() >>> rhs.getInt32()));
case SAR:
return LiteralNode.newInstance(token, finish, lhs.getInt32() >> rhs.getInt32());
case SHL:
return LiteralNode.newInstance(token, finish, lhs.getInt32() << rhs.getInt32());
case BIT_XOR:
--- 332,343 ----
break;
case SUB:
value = lhs.getNumber() - rhs.getNumber();
break;
case SHR:
! final long result = JSType.toUint32(lhs.getInt32() >>> rhs.getInt32());
! return LiteralNode.newInstance(token, finish, JSType.isRepresentableAsInt(result) ? (int) result : (double) result);
case SAR:
return LiteralNode.newInstance(token, finish, lhs.getInt32() >> rhs.getInt32());
case SHL:
return LiteralNode.newInstance(token, finish, lhs.getInt32() << rhs.getInt32());
case BIT_XOR:
*** 366,381 ****
default:
return null;
}
isInteger &= JSType.isStrictlyRepresentableAsInt(value);
- isLong &= JSType.isStrictlyRepresentableAsLong(value);
if (isInteger) {
return LiteralNode.newInstance(token, finish, (int)value);
- } else if (isLong) {
- return LiteralNode.newInstance(token, finish, (long)value);
}
return LiteralNode.newInstance(token, finish, value);
}
}
--- 365,377 ----
< prev index next >