private void print(ForInLoop node) throws IOException { writer.append("for"); if (node.isForEach()) { writer.append(" each"); } writer.ws().append("("); print(node.getIterator()); writer.append(" in "); print(node.getIteratedObject()); writer.append(')').ws(); print(node.getBody()); }
ForInLoop fis = new ForInLoop(forPos); if (init instanceof VariableDeclaration) { fis.setIterator(init); fis.setIteratedObject(cond); fis.setInPosition(inPos); fis.setIsForEach(isForEach); fis.setEachPosition(eachPos); pn = fis; } else {
offset = loop.getAbsolutePosition() + loop.getLength(); if (canProcessNode(loop)) { AstNode iteratedObject = loop.getIteratedObject(); AstNode iterator = loop.getIterator(); if (iterator != null) { if (iterator.getType() == Token.VAR) // expected if (loop.isForEach()) { extractVariableForForEach(vi, block, offset, iteratedObject); addCodeBlock(loop.getBody(), set, entered, block, offset);
@Override public String toSource(int depth) { StringBuilder sb = new StringBuilder(); sb.append(makeIndent(depth)); sb.append("for "); if (isForEach()) { sb.append("each "); } sb.append("("); sb.append(iterator.toSource(0)); sb.append(" in "); sb.append(iteratedObject.toSource(0)); sb.append(") "); if (body.getType() == Token.BLOCK) { sb.append(body.toSource(depth).trim()).append("\n"); } else { sb.append("\n").append(body.toSource(depth+1)); } return sb.toString(); }
CAstNode object = visit(node.getIteratedObject(), arg); String tempName = "for in loop temp"; CAstNode[] loopHeader = new CAstNode[]{ AstNode var = node.getIterator(); assert var instanceof Name || var instanceof VariableDeclaration || var instanceof LetNode : var.getClass() + " " + var; if (var instanceof Name) { CAstNode body = Ast.makeNode(CAstNode.BLOCK_STMT, visit(node.getBody(), loopContext), garbageLabel); arg.cfg().map(node, loop); } else { CAstNode object = visit(node.getIteratedObject(), arg); String tempName = "for in loop temp"; CAstNode[] loopHeader = new CAstNode[]{ AstNode var = node.getIterator(); assert var instanceof Name || var instanceof VariableDeclaration || var instanceof LetNode : var.getClass() + " " + var; if (var instanceof Name) { CAstNode body = Ast.makeNode(CAstNode.BLOCK_STMT, initNode, visit(node.getBody(), loopContext), garbageLabel);
/** * Sets object being iterated over, and sets its parent to this node. * @throws IllegalArgumentException if {@code object} is {@code null} */ public void setIteratedObject(AstNode object) { assertNotNull(object); this.iteratedObject = object; object.setParent(this); }
public boolean isForEach() { return node.isForEach(); } }
ForInLoop fis = new ForInLoop(forPos); if (init instanceof VariableDeclaration) { fis.setIterator(init); fis.setIteratedObject(cond); fis.setInPosition(inPos); fis.setIsForEach(isForEach); fis.setEachPosition(eachPos); pn = fis; } else {
@Override public String toSource(int depth) { StringBuilder sb = new StringBuilder(); sb.append(makeIndent(depth)); sb.append("for "); if (isForEach()) { sb.append("each "); } sb.append("("); sb.append(iterator.toSource(0)); sb.append(" in "); sb.append(iteratedObject.toSource(0)); sb.append(") "); if (body.getType() == Token.BLOCK) { sb.append(body.toSource(depth).trim()).append("\n"); } else { sb.append("\n").append(body.toSource(depth+1)); } return sb.toString(); }
/** * Sets object being iterated over, and sets its parent to this node. * @throws IllegalArgumentException if {@code object} is {@code null} */ public void setIteratedObject(AstNode object) { assertNotNull(object); this.iteratedObject = object; object.setParent(this); }
private void print(ForInLoop node) throws IOException { writer.append("for"); if (node.isForEach()) { writer.append(" each"); } writer.ws().append("("); print(node.getIterator()); writer.append(" in "); print(node.getIteratedObject()); writer.append(')').ws(); print(node.getBody()); }
ForInLoop fis = new ForInLoop(forPos); if (init instanceof VariableDeclaration) { fis.setIterator(init); fis.setIteratedObject(cond); fis.setInPosition(inPos); fis.setIsForEach(isForEach); fis.setEachPosition(eachPos); pn = fis; } else {
@Override public String toSource(int depth) { StringBuilder sb = new StringBuilder(); sb.append(makeIndent(depth)); sb.append("for "); if (isForEach()) { sb.append("each "); } sb.append("("); sb.append(iterator.toSource(0)); sb.append(" in "); sb.append(iteratedObject.toSource(0)); sb.append(") "); if (body.getType() == Token.BLOCK) { sb.append(body.toSource(depth).trim()).append("\n"); } else { sb.append("\n").append(body.toSource(depth+1)); } return sb.toString(); }
/** * Sets loop iterator expression: the part before the "in" keyword. * Also sets its parent to this node. * @throws IllegalArgumentException if {@code iterator} is {@code null} */ public void setIterator(AstNode iterator) { assertNotNull(iterator); this.iterator = iterator; iterator.setParent(this); }
private Node transformForInLoop(ForInLoop loop) { decompiler.addToken(Token.FOR); if (loop.isForEach()) decompiler.addName("each "); decompiler.addToken(Token.LP); loop.setType(Token.LOOP); pushScope(loop); try { int declType = -1; AstNode iter = loop.getIterator(); if (iter instanceof VariableDeclaration) { declType = ((VariableDeclaration)iter).getType(); } Node lhs = transform(iter); decompiler.addToken(Token.IN); Node obj = transform(loop.getIteratedObject()); decompiler.addToken(Token.RP); decompiler.addEOL(Token.LC); Node body = transform(loop.getBody()); decompiler.addEOL(Token.RC); return createForIn(declType, loop, lhs, obj, body, loop.isForEach()); } finally { popScope(); } }
ForInLoop fis = new ForInLoop(forPos); if (init instanceof VariableDeclaration) { fis.setIterator(init); fis.setIteratedObject(cond); fis.setInPosition(inPos); fis.setIsForEach(isForEach); fis.setEachPosition(eachPos); pn = fis; } else {
@Override public String toSource(int depth) { StringBuilder sb = new StringBuilder(); sb.append(makeIndent(depth)); sb.append("for "); if (isForEach()) { sb.append("each "); } sb.append("("); sb.append(iterator.toSource(0)); sb.append(" in "); sb.append(iteratedObject.toSource(0)); sb.append(") "); if (body.getType() == Token.BLOCK) { sb.append(body.toSource(depth).trim()).append("\n"); } else { sb.append("\n").append(body.toSource(depth+1)); } return sb.toString(); }
/** * Sets loop iterator expression: the part before the "in" keyword. * Also sets its parent to this node. * @throws IllegalArgumentException if {@code iterator} is {@code null} */ public void setIterator(AstNode iterator) { assertNotNull(iterator); this.iterator = iterator; iterator.setParent(this); }
private Node transformForInLoop(ForInLoop loop) { decompiler.addToken(Token.FOR); if (loop.isForEach()) decompiler.addName("each "); decompiler.addToken(Token.LP); loop.setType(Token.LOOP); pushScope(loop); try { int declType = -1; AstNode iter = loop.getIterator(); if (iter instanceof VariableDeclaration) { declType = ((VariableDeclaration)iter).getType(); } Node lhs = transform(iter); decompiler.addToken(Token.IN); Node obj = transform(loop.getIteratedObject()); decompiler.addToken(Token.RP); decompiler.addEOL(Token.LC); Node body = transform(loop.getBody()); decompiler.addEOL(Token.RC); return createForIn(declType, loop, lhs, obj, body, loop.isForEach()); } finally { popScope(); } }
/** * Sets object being iterated over, and sets its parent to this node. * @throws IllegalArgumentException if {@code object} is {@code null} */ public void setIteratedObject(AstNode object) { assertNotNull(object); this.iteratedObject = object; object.setParent(this); }