@Override public void visit(SubscriptExpr expr) { expr.getArray().acceptVisitor(this); expr.getIndex().acceptVisitor(this); }
@Override public void visit(MonitorExitStatement statement) { statement.getObjectRef().acceptVisitor(this); } }
@Override public void visit(InvocationExpr expr) { for (Expr argument : expr.getArguments()) { argument.acceptVisitor(this); } }
@Override public void visit(NewMultiArrayExpr expr) { for (Expr dimension : expr.getDimensions()) { dimension.acceptVisitor(this); } }
@Override public void visit(AssignmentStatement statement) { if (statement.getLeftValue() != null) { statement.getLeftValue().acceptVisitor(this); } statement.getRightValue().acceptVisitor(this); }
@Override public void visit(ReturnStatement statement) { if (statement.getResult() != null) { statement.getResult().acceptVisitor(this); } }
@Override public void visit(ThrowStatement statement) { statement.getException().acceptVisitor(this); consumer.consumeFunction("$rt_throw"); }
@Override public void visit(QualificationExpr expr) { if (expr.getQualified() != null) { expr.getQualified().acceptVisitor(this); } }
@Override public void visit(AssignmentStatement statement) { if (statement.getLeftValue() != null) { statement.getLeftValue().acceptVisitor(this); writer.print(" = "); } statement.getRightValue().acceptVisitor(this); writer.println(";"); }
@Override public void visit(ConditionalExpr expr) { ConditionalStatement statement = new ConditionalStatement(); statement.setCondition(expr.getCondition()); expr.getCondition().acceptVisitor(new ExpressionSideEffectDecomposer(statement.getConsequent())); expr.getAlternative().acceptVisitor(new ExpressionSideEffectDecomposer(statement.getAlternative())); target.add(statement); } @Override
@Override public void visit(WhileStatement statement) { if (statement.getCondition() != null) { statement.getCondition().acceptVisitor(this); } visit(statement.getBody()); }
@Override public void visit(NewArrayExpr expr) { pushLocation(expr.getLocation()); try { expr.getLength().acceptVisitor(this); Expr length = resultExpr; expr.setLength(length); resultExpr = expr; } finally { popLocation(); } }
@Override public void visit(ReturnStatement statement) { writer.print("return"); if (statement.getResult() != null) { writer.print(" "); statement.getResult().acceptVisitor(this); } writer.println(";"); }
@Override public void visit(InstanceOfExpr expr) { pushLocation(expr.getLocation()); try { expr.getExpr().acceptVisitor(this); expr.setExpr(resultExpr); resultExpr = expr; } finally { popLocation(); } }
@Override public void visit(PrimitiveCastExpr expr) { pushLocation(expr.getLocation()); try { expr.getValue().acceptVisitor(this); expr.setValue(resultExpr); resultExpr = expr; } finally { popLocation(); } }
@Override public void visit(MonitorEnterStatement statement) { pushLocation(statement.getLocation()); try { statement.getObjectRef().acceptVisitor(this); statement.setObjectRef(resultExpr); resultStmt = statement; } finally { popLocation(); } }
@Override public void visit(SwitchStatement statement) { statement.getValue().acceptVisitor(this); for (SwitchClause clause : statement.getClauses()) { visit(clause.getBody()); } visit(statement.getDefaultClause()); }
@Override public void visit(InstanceOfExpr expr) { writer.print("instanceof("); expr.getExpr().acceptVisitor(this); writer.print(", ").print(names.forSupertypeFunction(expr.getType())).print(")"); }
@Override public void visit(NewArrayExpr expr) { writer.print(names.forMethod(ALLOC_ARRAY_METHOD)).print("(&") .print(names.forClassInstance(ValueType.arrayOf(expr.getType()))).print(", "); expr.getLength().acceptVisitor(this); writer.print(")"); }
@Override public void visit(QualificationExpr expr) { if (expr.getQualified() != null) { writer.print("FIELD("); expr.getQualified().acceptVisitor(this); writer.print(", ").print(names.forClass(expr.getField().getClassName()) + ", " + names.forMemberField(expr.getField()) + ")"); } else { writer.print(names.forStaticField(expr.getField())); } }