257 return Node.replaceInLexicalContext(lc, this, new ForNode(this, init, test, body, modify, flags, controlFlowEscapes, conversion, iterator)); 258 } 259 260 @Override 261 public ForNode setControlFlowEscapes(final LexicalContext lc, final boolean controlFlowEscapes) { 262 if (this.controlFlowEscapes == controlFlowEscapes) { 263 return this; 264 } 265 return Node.replaceInLexicalContext(lc, this, new ForNode(this, init, test, body, modify, flags, controlFlowEscapes, conversion, iterator)); 266 } 267 268 @Override 269 JoinPredecessor setLocalVariableConversionChanged(final LexicalContext lc, final LocalVariableConversion conversion) { 270 return Node.replaceInLexicalContext(lc, this, new ForNode(this, init, test, body, modify, flags, controlFlowEscapes, conversion, iterator)); 271 } 272 273 @Override 274 public boolean hasPerIterationScope() { 275 return (flags & PER_ITERATION_SCOPE) != 0; 276 } 277 } | 257 return Node.replaceInLexicalContext(lc, this, new ForNode(this, init, test, body, modify, flags, controlFlowEscapes, conversion, iterator)); 258 } 259 260 @Override 261 public ForNode setControlFlowEscapes(final LexicalContext lc, final boolean controlFlowEscapes) { 262 if (this.controlFlowEscapes == controlFlowEscapes) { 263 return this; 264 } 265 return Node.replaceInLexicalContext(lc, this, new ForNode(this, init, test, body, modify, flags, controlFlowEscapes, conversion, iterator)); 266 } 267 268 @Override 269 JoinPredecessor setLocalVariableConversionChanged(final LexicalContext lc, final LocalVariableConversion conversion) { 270 return Node.replaceInLexicalContext(lc, this, new ForNode(this, init, test, body, modify, flags, controlFlowEscapes, conversion, iterator)); 271 } 272 273 @Override 274 public boolean hasPerIterationScope() { 275 return (flags & PER_ITERATION_SCOPE) != 0; 276 } 277 278 /** 279 * Returns true if this for-node needs the scope creator of its containing block to create 280 * per-iteration scope. This is only true for for-in loops with lexical declarations. 281 * 282 * @return true if the containing block's scope object creator is required in codegen 283 */ 284 public boolean needsScopeCreator() { 285 return isForIn() && hasPerIterationScope(); 286 } 287 } |