public boolean hasExpr() { return getExpr() != null; }
public RemoveReturnStatements(IAstNode node) { super(item -> item instanceof ReturnStmt, item -> ((ReturnStmt) item).hasExpr() ? Optional.of(new ExprStmt(((ReturnStmt) item).getExpr())) : Optional.empty(), node); }
@Override public void visitReturnStmt(ReturnStmt returnStmt) { if (returnStmt.hasExpr()) { visitChildFromParent(returnStmt.getExpr(), returnStmt); } }
@Override public void visitReturnStmt(ReturnStmt returnStmt) { out.append(indent() + "return"); if (returnStmt.hasExpr()) { out.append(" "); visit(returnStmt.getExpr()); } out.append(";" + newLine()); }
@Override public void visitReturnStmt(ReturnStmt returnStmt) { if (returnStmt.hasExpr()) { parentMap.getParent(returnStmt).replaceChild(returnStmt, new BlockStmt(Arrays.asList( new ExprStmt(new BinaryExpr(makeReturnValue(), returnStmt.getExpr(), BinOp.ASSIGN)), setHasReturned()), true)); } else { parentMap.getParent(returnStmt).replaceChild(returnStmt, setHasReturned()); } }
@Override public void applyReductionImpl() { final BinaryExpr assignment = (BinaryExpr) stmt.getExpr(); final Expr expr = ((ReturnStmt) outlined.getBody().getStmt(0)).getExpr().clone(); Map<String, Expr> paramReplacement = new HashMap<>(); for (int i = 0; i < outlined.getPrototype().getNumParameters(); i++) { Expr actualParam = ((FunctionCallExpr) assignment.getRhs()).getArg(i); assert actualParam != null; paramReplacement.put(outlined.getPrototype().getParameter(i).getName(), actualParam); } assert assignment.getOp() == BinOp.ASSIGN; stmt.setExpr(new BinaryExpr(assignment.getLhs(), applySubstitutionDestructive(expr, paramReplacement), BinOp.ASSIGN)); }
private List<Stmt> getInlinedStmts(FunctionDefinition functionDefinition, Optional<String> returnVariableName) { final List<Stmt> inlinedStmts = new ArrayList<>(); for (int i = 0; i < functionDefinition.getPrototype().getNumParameters(); i++) { ParameterDecl pd = functionDefinition.getPrototype().getParameter(i); inlinedStmts.add(new DeclarationStmt( new VariablesDeclaration( pd.getType().getWithoutQualifiers(), new VariableDeclInfo(pd.getName(), null, new ScalarInitializer(call.getArg(i).clone()))))); } for (Stmt stmt : functionDefinition.getBody().getStmts()) { if (stmt instanceof ReturnStmt) { if (((ReturnStmt) stmt).hasExpr()) { inlinedStmts.add(new ExprStmt( new BinaryExpr( new VariableIdentifierExpr(returnVariableName.get()), (((ReturnStmt) stmt).getExpr()), BinOp.ASSIGN))); } } else { inlinedStmts.add(stmt); } } return inlinedStmts; }