src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/VarNode.java
Print this page
@@ -43,10 +43,17 @@
private final Expression init;
/** Is this a var statement (as opposed to a "var" in a for loop statement) */
private final int flags;
+ /**
+ * source order id to be used for this node. If this is -1, then we
+ * the default which is start position of this node. See also the
+ * method Node::getSourceOrder.
+ */
+ private final int sourceOrder;
+
/** Flag for ES6 LET declaration */
public static final int IS_LET = 1 << 0;
/** Flag for ES6 CONST declaration */
public static final int IS_CONST = 1 << 1;
@@ -69,10 +76,11 @@
this(lineNumber, token, finish, name, init, 0);
}
private VarNode(final VarNode varNode, final IdentNode name, final Expression init, final int flags) {
super(varNode);
+ this.sourceOrder = -1;
this.name = init == null ? name : name.setIsInitializedHere();
this.init = init;
this.flags = flags;
}
@@ -85,18 +93,38 @@
* @param name name of variable
* @param init init node or null if just a declaration
* @param flags flags
*/
public VarNode(final int lineNumber, final long token, final int finish, final IdentNode name, final Expression init, final int flags) {
- super(lineNumber, token, finish);
+ this(lineNumber, token, -1, finish, name, init, flags);
+ }
+ /**
+ * Constructor
+ *
+ * @param lineNumber line number
+ * @param token token
+ * @param sourceOrder source order
+ * @param finish finish
+ * @param name name of variable
+ * @param init init node or null if just a declaration
+ * @param flags flags
+ */
+ public VarNode(final int lineNumber, final long token, final int sourceOrder, final int finish, final IdentNode name, final Expression init, final int flags) {
+ super(lineNumber, token, finish);
+ this.sourceOrder = sourceOrder;
this.name = init == null ? name : name.setIsInitializedHere();
this.init = init;
this.flags = flags;
}
@Override
+ public int getSourceOrder() {
+ return sourceOrder == -1? super.getSourceOrder() : sourceOrder;
+ }
+
+ @Override
public boolean isAssignment() {
return hasInit();
}
@Override