src/jdk/nashorn/internal/ir/ForNode.java
Print this page
*** 43,60 ****
private final JoinPredecessorExpression modify;
/** Iterator symbol. */
private Symbol iterator;
- /** Is this a normal for loop? */
- public static final int IS_FOR = 1 << 0;
-
/** Is this a normal for in loop? */
! public static final int IS_FOR_IN = 1 << 1;
/** Is this a normal for each in loop? */
! public static final int IS_FOR_EACH = 1 << 2;
private final int flags;
/**
* Constructor
--- 43,60 ----
private final JoinPredecessorExpression modify;
/** Iterator symbol. */
private Symbol iterator;
/** Is this a normal for in loop? */
! public static final int IS_FOR_IN = 1 << 0;
/** Is this a normal for each in loop? */
! public static final int IS_FOR_EACH = 1 << 1;
!
! /** Does this loop need a per-iteration scope because its init contain a LET declaration? */
! public static final int PER_ITERATION_SCOPE = 1 << 2;
private final int flags;
/**
* Constructor
*** 271,276 ****
--- 271,290 ----
@Override
JoinPredecessor setLocalVariableConversionChanged(final LexicalContext lc, final LocalVariableConversion conversion) {
return Node.replaceInLexicalContext(lc, this, new ForNode(this, init, test, body, modify, flags, controlFlowEscapes, conversion));
}
+
+ @Override
+ public boolean hasPerIterationScope() {
+ return (flags & PER_ITERATION_SCOPE) != 0;
+ }
+
+ /**
+ * Set the per-iteration-scope flag on this node.
+ * @param lc lexical context
+ * @return the node with flag set
+ */
+ public ForNode setPerIterationScope(final LexicalContext lc) {
+ return setFlags(lc, flags | PER_ITERATION_SCOPE);
+ }
}