@Override public ExprStmt clone() { return new ExprStmt(expr.clone()); }
public RemoveReturnStatements(IAstNode node) { super(item -> item instanceof ReturnStmt, item -> ((ReturnStmt) item).hasExpr() ? Optional.of(new ExprStmt(((ReturnStmt) item).getExpr())) : Optional.empty(), node); }
private ExprStmt setHasReturned() { return new ExprStmt(new BinaryExpr(makeHasReturned(), BoolConstantExpr.TRUE, BinOp.ASSIGN)); } }.visit(fd);
private ExprStmt fuzzExprStmt() { return new ExprStmt(fuzzExpr(fuzzType(), false, false, 0)); }
@Override public Stmt visitExpression_statement(Expression_statementContext ctx) { if (ctx.expression() == null) { return NullStmt.INSTANCE; } return new ExprStmt(visitExpression(ctx.expression())); }
@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()); } }
private void addGlobalInitializers(FunctionDefinition mainFunction) { assert mainFunction.getPrototype().getName().equals("main"); for (int i = globalsToBeReInitialized.size() - 1; i >= 0; i--) { for (int j = globalsToBeReInitialized.get(i).getNumDecls() - 1; j >= 0; j--) { final VariableDeclInfo vdi = globalsToBeReInitialized.get(i).getDeclInfo(j); if (!(vdi.getInitializer() instanceof ScalarInitializer)) { throw new RuntimeException("Only know how to deal with scalar initializers at present."); } mainFunction.getBody().insertStmt(0, new ExprStmt(new BinaryExpr(new VariableIdentifierExpr(vdi.getName()), ((ScalarInitializer) vdi.getInitializer()).getExpr(), BinOp.ASSIGN))); vdi.setInitializer(null); } } }
@Override public void visitDeclarationStmt(DeclarationStmt declarationStmt) { List<String> existingKeys = new ArrayList<>(); existingKeys.addAll(currentScope.keys()); super.visitDeclarationStmt(declarationStmt); List<String> newKeys = currentScope.keys().stream().filter(key -> !existingKeys.contains(key)) .collect(Collectors.toList()); newKeys.sort(String::compareTo); for (String newKey : newKeys) { if (isCurrentComponentVariable(newKey)) { final ExprStmt insertedStmt = new ExprStmt( new BinaryExpr( new MemberLookupExpr( new VariableIdentifierExpr(mergeSet.getMergedName()), getSwizzle(newKey)), new VariableIdentifierExpr(newKey), BinOp.ASSIGN )); assert parentMap.getParent(declarationStmt) instanceof BlockStmt; ((BlockStmt) parentMap.getParent(declarationStmt)).insertAfter(declarationStmt, insertedStmt); } } } }
private IfStmt prepareFragColorWrite(IInjectionPoint injectionPoint, IRandom generator, ShadingLanguageVersion shadingLanguageVersion, GenerationParams generationParams) { final Pair<String, Type> outputVariableInfo = chooseOutputVariable(injectionPoint, generator, shadingLanguageVersion, generationParams); final String outputVariableName = outputVariableInfo.getLeft(); final Type outputVariableType = outputVariableInfo.getRight(); return AddJumpStmts.makeDeadConditional(injectionPoint, new BlockStmt(Arrays.asList( new ExprStmt(new BinaryExpr( new VariableIdentifierExpr(outputVariableName), new Fuzzer(new FuzzingContext(), shadingLanguageVersion, generator, generationParams) .fuzzExpr(outputVariableType, false, false, 0), BinOp.ASSIGN) )), true), generator, shadingLanguageVersion, generationParams); }
outputVariableType, new VariableDeclInfo(backupName, null, null)))); stmts.add(new ExprStmt(new BinaryExpr(new VariableIdentifierExpr(backupName), new VariableIdentifierExpr(outputVariableName), BinOp.ASSIGN))); final Fuzzer fuzzer = new Fuzzer(new FuzzingContext(), shadingLanguageVersion, generator, generationParams); stmts.add(new ExprStmt(new BinaryExpr( new VariableIdentifierExpr(outputVariableName), fuzzer BasicType.BOOL, false, 0, fuzzer), true), new BlockStmt( Arrays.asList(new ExprStmt(new BinaryExpr( new VariableIdentifierExpr(outputVariableName), new VariableIdentifierExpr(backupName), BinOp.ASSIGN))),
usedLabels, stmtFuzzer, generator)); switchBodyStmts.add(DefaultCaseLabel.INSTANCE); switchBodyStmts.add(new ExprStmt(new IntConstantExpr("1")));
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; }
new BlockStmt(Arrays.asList(BreakStmt.INSTANCE), true), null), new ExprStmt(new UnaryExpr( new VariableIdentifierExpr(limiterName), UnOp.POST_INC)));