< prev index next >

src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/FoldConstants.java

Print this page




 214 
 215         @Override
 216         protected LiteralNode<?> eval() {
 217             final Node rhsNode = parent.getExpression();
 218 
 219             if (!(rhsNode instanceof LiteralNode)) {
 220                 return null;
 221             }
 222 
 223             if (rhsNode instanceof ArrayLiteralNode) {
 224                 return null;
 225             }
 226 
 227             final LiteralNode<?> rhs = (LiteralNode<?>)rhsNode;
 228             final Type rhsType = rhs.getType();
 229             final boolean rhsInteger = rhsType.isInteger() || rhsType.isBoolean();
 230 
 231             LiteralNode<?> literalNode;
 232 
 233             switch (parent.tokenType()) {
 234             case ADD:
 235                 if (rhsInteger) {
 236                     literalNode = LiteralNode.newInstance(token, finish, rhs.getInt32());
 237                 } else if (rhsType.isLong()) {
 238                     literalNode = LiteralNode.newInstance(token, finish, rhs.getLong());
 239                 } else {
 240                     literalNode = LiteralNode.newInstance(token, finish, rhs.getNumber());
 241                 }
 242                 break;
 243             case SUB:
 244                 if (rhsInteger && rhs.getInt32() != 0) { // @see test/script/basic/minuszero.js
 245                     literalNode = LiteralNode.newInstance(token, finish, -rhs.getInt32());
 246                 } else if (rhsType.isLong() && rhs.getLong() != 0L) {
 247                     literalNode = LiteralNode.newInstance(token, finish, -rhs.getLong());
 248                 } else {
 249                     literalNode = LiteralNode.newInstance(token, finish, -rhs.getNumber());
 250                 }
 251                 break;
 252             case NOT:
 253                 literalNode = LiteralNode.newInstance(token, finish, !rhs.getBoolean());
 254                 break;
 255             case BIT_NOT:
 256                 literalNode = LiteralNode.newInstance(token, finish, ~rhs.getInt32());
 257                 break;
 258             default:
 259                 return null;
 260             }
 261 
 262             return literalNode;
 263         }




 214 
 215         @Override
 216         protected LiteralNode<?> eval() {
 217             final Node rhsNode = parent.getExpression();
 218 
 219             if (!(rhsNode instanceof LiteralNode)) {
 220                 return null;
 221             }
 222 
 223             if (rhsNode instanceof ArrayLiteralNode) {
 224                 return null;
 225             }
 226 
 227             final LiteralNode<?> rhs = (LiteralNode<?>)rhsNode;
 228             final Type rhsType = rhs.getType();
 229             final boolean rhsInteger = rhsType.isInteger() || rhsType.isBoolean();
 230 
 231             LiteralNode<?> literalNode;
 232 
 233             switch (parent.tokenType()) {
 234             case POS:
 235                 if (rhsInteger) {
 236                     literalNode = LiteralNode.newInstance(token, finish, rhs.getInt32());
 237                 } else if (rhsType.isLong()) {
 238                     literalNode = LiteralNode.newInstance(token, finish, rhs.getLong());
 239                 } else {
 240                     literalNode = LiteralNode.newInstance(token, finish, rhs.getNumber());
 241                 }
 242                 break;
 243             case NEG:
 244                 if (rhsInteger && rhs.getInt32() != 0) { // @see test/script/basic/minuszero.js
 245                     literalNode = LiteralNode.newInstance(token, finish, -rhs.getInt32());
 246                 } else if (rhsType.isLong() && rhs.getLong() != 0L) {
 247                     literalNode = LiteralNode.newInstance(token, finish, -rhs.getLong());
 248                 } else {
 249                     literalNode = LiteralNode.newInstance(token, finish, -rhs.getNumber());
 250                 }
 251                 break;
 252             case NOT:
 253                 literalNode = LiteralNode.newInstance(token, finish, !rhs.getBoolean());
 254                 break;
 255             case BIT_NOT:
 256                 literalNode = LiteralNode.newInstance(token, finish, ~rhs.getInt32());
 257                 break;
 258             default:
 259                 return null;
 260             }
 261 
 262             return literalNode;
 263         }


< prev index next >