private void visitSequence(List<Statement> statements) { if (tryCatchFound) { return; } for (Statement statement : statements) { statement.acceptVisitor(this); if (tryCatchFound) { return; } } }
@Override public void visit(NewExpr expr) { target.add(Statement.assign(null, expr)); } }
public static Statement cond(Expr predicate, List<Statement> consequent) { return cond(predicate, consequent, Collections.emptyList()); }
@Override public void visit(ExitInstruction insn) { ReturnStatement stmt = Statement.exitFunction(insn.getValueToReturn() != null ? Expr.var(insn.getValueToReturn().getIndex()) : null); stmt.setLocation(currentLocation); statements.add(stmt); }
@Override public void visit(InitClassInstruction insn) { InitClassStatement stmt = Statement.initClass(insn.getClassName()); stmt.setLocation(currentLocation); stmt.setAsync(async); async = false; statements.add(stmt); }
@Override public void visit(ExitInstruction insn) { ReturnStatement stmt = Statement.exitFunction(insn.getValueToReturn() != null ? Expr.var(insn.getValueToReturn().getIndex()) : null); stmt.setLocation(currentLocation); statements.add(stmt); }
@Override public void visit(InitClassInstruction insn) { InitClassStatement stmt = Statement.initClass(insn.getClassName()); stmt.setLocation(currentLocation); stmt.setAsync(async); async = false; statements.add(stmt); }
public void visit(List<Statement> statements) { for (Statement part : statements) { part.acceptVisitor(this); } }
@Override public void visit(InvocationExpr expr) { target.add(Statement.assign(null, expr)); }
private void branch(Expr condition, BasicBlock consequentBlock, BasicBlock alternativeBlock) { Statement consequent = generateJumpStatement(consequentBlock); Statement alternative = generateJumpStatement(alternativeBlock); statements.add(Statement.cond(condition, consequent != null ? Arrays.asList(consequent) : Collections.emptyList(), alternative != null ? Arrays.asList(alternative) : Collections.emptyList())); }
private void visitMany(List<Statement> statements) { for (Statement statement : statements) { statement.acceptVisitor(this); } }
private void assign(Expr source, Variable target) { AssignmentStatement stmt = Statement.assign(Expr.var(target.getIndex()), source); stmt.setLocation(currentLocation); statements.add(stmt); }
public static Statement cond(Expr predicate, List<Statement> consequent) { return cond(predicate, consequent, Collections.emptyList()); }
private void accept(Statement statement) { statement.acceptVisitor(this); }
@Override public void visit(AssignInstruction insn) { AssignmentStatement stmt = Statement.assign(Expr.var(insn.getReceiver().getIndex()), Expr.var(insn.getAssignee().getIndex())); stmt.setLocation(currentLocation); statements.add(stmt); }
private void branch(Expr condition, BasicBlock consequentBlock, BasicBlock alternativeBlock) { Statement consequent = generateJumpStatement(consequentBlock); Statement alternative = generateJumpStatement(alternativeBlock); statements.add(Statement.cond(condition, consequent != null ? Arrays.asList(consequent) : Collections.emptyList(), alternative != null ? Arrays.asList(alternative) : Collections.emptyList())); }
private void processSequence(List<Statement> statements) { List<Statement> oldSequence = currentSequence; int oldIndex = currentIndex; currentSequence = statements; for (currentIndex = 0; currentIndex < currentSequence.size(); ++currentIndex) { statements.get(currentIndex).acceptVisitor(this); } currentIndex = oldIndex; currentSequence = oldSequence; }
@Override public void visit(GetFieldInstruction insn) { if (insn.getInstance() != null) { AssignmentStatement stmt = Statement.assign(Expr.var(insn.getReceiver().getIndex()), Expr.qualify(Expr.var(insn.getInstance().getIndex()), insn.getField())); stmt.setLocation(currentLocation); statements.add(stmt); } else { Expr fieldExpr = Expr.qualify(null, insn.getField()); AssignmentStatement stmt = Statement.assign(Expr.var(insn.getReceiver().getIndex()), fieldExpr); stmt.setLocation(currentLocation); statements.add(stmt); } }
private void writeSequence(List<Statement> sequence) throws IOException { output.writeShort(sequence.size()); for (Statement part : sequence) { part.acceptVisitor(this); } }
@Override public void visit(PutFieldInstruction insn) { Expr right = Expr.var(insn.getValue().getIndex()); Expr left; if (insn.getInstance() != null) { left = Expr.qualify(Expr.var(insn.getInstance().getIndex()), insn.getField()); } else { left = Expr.qualify(null, insn.getField()); } AssignmentStatement stmt = Statement.assign(left, right); stmt.setLocation(currentLocation); statements.add(stmt); }