@Override public ReturnStmt clone() { if (expr == null) { return new ReturnStmt(); } return new ReturnStmt(expr.clone()); }
public boolean hasExpr() { return getExpr() != null; }
@Override public void visitReturnStmt(ReturnStmt returnStmt) { if (returnStmt.hasExpr()) { predicateHolds(); } } }.test(stmt);
@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 Stmt fuzzReturnStmt() { return new ReturnStmt( fuzzExpr(fuzzingContext.getEnclosingFunction().getReturnType(), false, false, 0)); }
private IfStmt prepareReturnStmt(IInjectionPoint injectionPoint, IRandom generator, ShadingLanguageVersion shadingLanguageVersion, GenerationParams generationParams) { Type returnType = injectionPoint.getEnclosingFunction().getPrototype().getReturnType(); Stmt stmtToInject; if (returnType.hasCanonicalConstant()) { stmtToInject = new ReturnStmt(returnType.getCanonicalConstant()); } else if (returnType.getWithoutQualifiers() == VoidType.VOID) { stmtToInject = new ReturnStmt(); } else { stmtToInject = new BlockStmt(new ArrayList<>(), true); } return makeDeadConditional(injectionPoint, stmtToInject, generator, shadingLanguageVersion, generationParams); }
@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 Stmt visitJump_statement(Jump_statementContext ctx) { if (ctx.CONTINUE() != null) { return ContinueStmt.INSTANCE; } if (ctx.BREAK() != null) { return BreakStmt.INSTANCE; } if (ctx.RETURN() != null) { if (ctx.expression() == null) { return new ReturnStmt(); } return new ReturnStmt(visitExpression(ctx.expression())); } assert ctx.DISCARD() != null; return DiscardStmt.INSTANCE; }
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; }
params), new BlockStmt(Arrays.asList( new ReturnStmt(be.getRhs().clone())), false)), enclosingFunction);
private void addSpecialDeclarations() { if (fd.getPrototype().getReturnType().getWithoutQualifiers() != VoidType.VOID) { fd.getBody().insertStmt(0, new DeclarationStmt( new VariablesDeclaration(fd.getPrototype().getReturnType().getWithoutQualifiers(), new VariableDeclInfo(makeReturnValueName(), null, null)))); fd.getBody().addStmt(new ReturnStmt(makeReturnValue())); } fd.getBody().insertStmt(0, new DeclarationStmt( new VariablesDeclaration(BasicType.BOOL, new VariableDeclInfo(makeHasReturnedName(), null, new ScalarInitializer(BoolConstantExpr.FALSE))))); }