aboutsummaryrefslogtreecommitdiff
path: root/src/jdk/nashorn/internal/ir/LiteralNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jdk/nashorn/internal/ir/LiteralNode.java')
-rw-r--r--src/jdk/nashorn/internal/ir/LiteralNode.java72
1 files changed, 13 insertions, 59 deletions
diff --git a/src/jdk/nashorn/internal/ir/LiteralNode.java b/src/jdk/nashorn/internal/ir/LiteralNode.java
index cc424b7a..ae80214c 100644
--- a/src/jdk/nashorn/internal/ir/LiteralNode.java
+++ b/src/jdk/nashorn/internal/ir/LiteralNode.java
@@ -30,6 +30,7 @@ import java.util.Collections;
import java.util.List;
import jdk.nashorn.internal.codegen.CompileUnit;
import jdk.nashorn.internal.codegen.types.Type;
+import jdk.nashorn.internal.ir.annotations.Immutable;
import jdk.nashorn.internal.ir.visitor.NodeVisitor;
import jdk.nashorn.internal.parser.Lexer.LexerToken;
import jdk.nashorn.internal.parser.Token;
@@ -44,6 +45,7 @@ import jdk.nashorn.internal.runtime.Undefined;
*
* @param <T> the literal type
*/
+@Immutable
public abstract class LiteralNode<T> extends Node implements PropertyKey {
/** Literal value */
protected final T value;
@@ -93,23 +95,6 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
return value == null;
}
- @Override
- public int hashCode() {
- return value == null ? 0 : value.hashCode();
- }
-
- @Override
- public boolean equals(final Object other) {
- if (!(other instanceof LiteralNode<?>)) {
- return false;
- }
- final LiteralNode<?> otherNode = (LiteralNode<?>)other;
- if (otherNode.isNull()) {
- return isNull();
- }
- return ((LiteralNode<?>)other).getValue().equals(value);
- }
-
/**
* Check if the literal value is boolean true
* @return true if literal value is boolean true
@@ -226,7 +211,7 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
*/
@Override
public Node accept(final NodeVisitor visitor) {
- if (visitor.enterLiteralNode(this) != null) {
+ if (visitor.enterLiteralNode(this)) {
return visitor.leaveLiteralNode(this);
}
@@ -274,7 +259,8 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
return new NodeLiteralNode(parent.getSource(), parent.getToken(), parent.getFinish());
}
- private static class BooleanLiteralNode extends LiteralNode<Boolean> {
+ @Immutable
+ private static final class BooleanLiteralNode extends LiteralNode<Boolean> {
private BooleanLiteralNode(final Source source, final long token, final int finish, final boolean value) {
super(source, Token.recast(token, value ? TokenType.TRUE : TokenType.FALSE), finish, value);
@@ -285,11 +271,6 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
}
@Override
- protected Node copy(final CopyState cs) {
- return new BooleanLiteralNode(this);
- }
-
- @Override
public boolean isTrue() {
return value;
}
@@ -331,7 +312,8 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
return new BooleanLiteralNode(parent.getSource(), parent.getToken(), parent.getFinish(), value);
}
- private static class NumberLiteralNode extends LiteralNode<Number> {
+ @Immutable
+ private static final class NumberLiteralNode extends LiteralNode<Number> {
private final Type type = numberGetType(value);
@@ -358,11 +340,6 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
}
@Override
- protected Node copy(final CopyState cs) {
- return new NumberLiteralNode(this);
- }
-
- @Override
public Type getType() {
return type;
}
@@ -407,11 +384,6 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
private UndefinedLiteralNode(final UndefinedLiteralNode literalNode) {
super(literalNode);
}
-
- @Override
- protected Node copy(final CopyState cs) {
- return new UndefinedLiteralNode(this);
- }
}
/**
@@ -440,6 +412,7 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
return new UndefinedLiteralNode(parent.getSource(), parent.getToken(), parent.getFinish());
}
+ @Immutable
private static class StringLiteralNode extends LiteralNode<String> {
private StringLiteralNode(final Source source, final long token, final int finish, final String value) {
super(source, Token.recast(token, TokenType.STRING), finish, value);
@@ -450,11 +423,6 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
}
@Override
- protected Node copy(final CopyState cs) {
- return new StringLiteralNode(this);
- }
-
- @Override
public void toString(final StringBuilder sb) {
sb.append('\"');
sb.append(value);
@@ -488,6 +456,7 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
return new StringLiteralNode(parent.getSource(), parent.getToken(), parent.getFinish(), value);
}
+ @Immutable
private static class LexerTokenLiteralNode extends LiteralNode<LexerToken> {
private LexerTokenLiteralNode(final Source source, final long token, final int finish, final LexerToken value) {
super(source, Token.recast(token, TokenType.STRING), finish, value); //TODO is string the correct token type here?
@@ -498,11 +467,6 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
}
@Override
- protected Node copy(final CopyState cs) {
- return new LexerTokenLiteralNode(this);
- }
-
- @Override
public Type getType() {
return Type.OBJECT;
}
@@ -539,7 +503,7 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
return new LexerTokenLiteralNode(parent.getSource(), parent.getToken(), parent.getFinish(), value);
}
- private static class NodeLiteralNode extends LiteralNode<Node> {
+ private static final class NodeLiteralNode extends LiteralNode<Node> {
private NodeLiteralNode(final Source source, final long token, final int finish) {
this(source, token, finish, null);
@@ -558,13 +522,8 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
}
@Override
- protected Node copy(final CopyState cs) {
- return new NodeLiteralNode(this);
- }
-
- @Override
public Node accept(final NodeVisitor visitor) {
- if (visitor.enterLiteralNode(this) != null) {
+ if (visitor.enterLiteralNode(this)) {
if (value != null) {
final Node newValue = value.accept(visitor);
if(value != newValue) {
@@ -617,7 +576,7 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
/**
* Array literal node class.
*/
- public static class ArrayLiteralNode extends LiteralNode<Node[]> {
+ public static final class ArrayLiteralNode extends LiteralNode<Node[]> {
private static class PostsetMarker {
//empty
}
@@ -705,11 +664,6 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
this.elementType = node.elementType;
}
- @Override
- protected Node copy(final CopyState cs) {
- return new ArrayLiteralNode(this);
- }
-
/**
* Compute things like widest element type needed. Internal use from compiler only
*/
@@ -894,7 +848,7 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
@Override
public Node accept(final NodeVisitor visitor) {
- if (visitor.enterLiteralNode(this) != null) {
+ if (visitor.enterLiteralNode(this)) {
for (int i = 0; i < value.length; i++) {
final Node element = value[i];
if (element != null) {