public ABlockStmIR wrap(AVarDeclIR decl) { ABlockStmIR block = new ABlockStmIR(); block.getLocalDefs().add(decl); return block; }
public static String getBlockSimpleBlockString(ABlockStmIR node) { StringBuilder sb = new StringBuilder(); sb.append("{\n"); for (AVarDeclIR d : node.getLocalDefs()) { sb.append(d); sb.append("\n"); } sb.append("\n"); sb.append(getSimpleBlockString(node)); sb.append("}"); return sb.toString(); } }
public void injectDeclAsStm(ABlockStmIR block, AVarDeclIR decl) { ABlockStmIR wrappingBlock = new ABlockStmIR(); wrappingBlock.getLocalDefs().add(decl); block.getStatements().add(wrappingBlock); }
private boolean singleBlockWrapsBlock(ABlockStmIR node) { return node.getLocalDefs().isEmpty() && node.getStatements().size() == 1 && node.getStatements().get(0) instanceof ABlockStmIR; }
public void handleBlock(ABlockStmIR node) throws AnalysisException { if (node.getLocalDefs().size() > 1) { LinkedList<AVarDeclIR> origDecls = new LinkedList<AVarDeclIR>(node.getLocalDefs()); for (int i = origDecls.size() - 1; i >= 0; i--) { AVarDeclIR nextDecl = origDecls.get(i); ABlockStmIR block = new ABlockStmIR(); block.getLocalDefs().add(nextDecl); node.getStatements().addFirst(block); } for (SStmIR stm : node.getStatements()) { stm.apply(decorator); } } else { if (!node.getLocalDefs().isEmpty()) { node.getLocalDefs().getFirst().apply(decorator); } for (SStmIR stm : node.getStatements()) { stm.apply(decorator); } } }
if (!block.getLocalDefs().isEmpty())
protected void handleLogicExp(SBoolBinaryExpIR node, SStmIR enclosingStm, SStmIR checkBlock, String resultName) throws AnalysisException { AVarDeclIR andResultDecl = transAssistant.consBoolVarDecl(resultName, false); ABlockStmIR declBlock = new ABlockStmIR(); declBlock.getLocalDefs().add(andResultDecl); ABlockStmIR replacementBlock = new ABlockStmIR(); transAssistant.replaceNodeWith(enclosingStm, replacementBlock); transAssistant.replaceNodeWith(node, transAssistant.consBoolCheck(resultName, false)); replacementBlock.getStatements().add(declBlock); replacementBlock.getStatements().add(checkBlock); replacementBlock.getStatements().add(enclosingStm); replacementBlock.apply(this); }
List<AVarDeclIR> copy = new ArrayList<AVarDeclIR>(node.getLocalDefs()); for( AVarDeclIR e : copy)
private void normaliseTarget(SStmIR node, SExpIR target) { List<AVarDeclIR> varDecls = new LinkedList<AVarDeclIR>(); List<AIdentifierVarExpIR> vars = new LinkedList<AIdentifierVarExpIR>(); SExpIR newTarget = splitTarget(target, varDecls, vars); markAsCloneFree(varDecls); markAsCloneFree(vars); stateDesInfo.addStateDesVars(node, vars); stateDesInfo.addStateDesDecl(node, varDecls); if (varDecls.isEmpty()) { return; } ABlockStmIR replBlock = new ABlockStmIR(); jmlGen.getJavaGen().getTransAssistant().replaceNodeWith(node, replBlock); for (AVarDeclIR var : varDecls) { replBlock.getLocalDefs().add(var); } replBlock.getStatements().add(node); jmlGen.getJavaGen().getTransAssistant().replaceNodeWith(target, newTarget); }
private ABlockStmIR initPattern(boolean declare, SPatternIR pattern, STypeIR type, SExpIR actualValue, AIdentifierPatternIR idPattern) { ABlockStmIR patternBlock = new ABlockStmIR(); if (declare) { AVarDeclIR patternDecl = transAssistant.getInfo().getDeclAssistant().consLocalVarDecl(type.clone(), idPattern.clone(), actualValue.clone()); patternBlock.getLocalDefs().add(patternDecl); } else { transAssistant.replaceNodeWith(pattern, idPattern); } return patternBlock; }
private SStmIR consTraceMethodBody(ANamedTraceDeclIR node) throws AnalysisException { StoreAssistant storeAssist = new StoreAssistant(tracePrefixes, transAssistant); String traceEnclosingClass = getClassName(node); TraceStmBuilder stmBuilder = consStmBuilder(storeAssist, traceEnclosingClass); SStmIR regModules = registerOtherModules(traceEnclosingClass, storeAssist); TraceNodeData nodeData = stmBuilder.buildFromDeclTerms(node.getTerms()); ABlockStmIR stms = new ABlockStmIR(); stms.getLocalDefs().add(transAssistant.consClassVarDeclDefaultCtor(tracePrefixes.storeClassName(), tracePrefixes.storeVarName())); stms.getLocalDefs().add(transAssistant.consClassVarDeclDefaultCtor(tracePrefixes.idGeneratorClassName(), tracePrefixes.idGeneratorVarName())); if (regModules != null) { stms.getStatements().add(regModules); } stms.getStatements().add(nodeData.getStms()); stms.getStatements().add(buildTestExecutionStms(nodeData.getNodeVar(), getClassName(node))); return stms; }
private ABlockStmIR consIdVarDeclaration(PatternInfo currentInfo, SPatternIR currentPattern) { AIdentifierPatternIR idPattern = (AIdentifierPatternIR) currentPattern; AVarDeclIR idPatternDecl = transAssistant.getInfo().getDeclAssistant().consLocalVarDecl(currentInfo.getType().clone(), idPattern.clone(), currentInfo.getActualValue().clone()); ABlockStmIR wrappingStatement = new ABlockStmIR(); wrappingStatement.getLocalDefs().add(idPatternDecl); return wrappingStatement; }
@Override public SStmIR caseALetStm(ALetStm node, IRInfo question) throws AnalysisException { ABlockStmIR block = new ABlockStmIR(); block.setScoped(question.getStmAssistant().isScoped(node)); question.getDeclAssistant().setFinalLocalDefs(node.getLocalDefs(), block.getLocalDefs(), question); SStmIR stm = node.getStatement().apply(question.getStmVisitor(), question); if (stm != null) { block.getStatements().add(stm); } return block; }
public void caseALetDefExpIR(ALetDefExpIR node) throws AnalysisException { SStmIR enclosingStm = transAssistant.getEnclosingStm(node, "let def expression"); SExpIR exp = node.getExp(); transAssistant.replaceNodeWith(node, exp); ABlockStmIR topBlock = new ABlockStmIR(); ABlockStmIR current = topBlock; for (AVarDeclIR local : node.getLocalDefs()) { ABlockStmIR tmp = new ABlockStmIR(); tmp.getLocalDefs().add(local.clone()); current.getStatements().add(tmp); current = tmp; } transAssistant.replaceNodeWith(enclosingStm, topBlock); topBlock.getStatements().add(enclosingStm); exp.apply(this); topBlock.apply(this); topBlock.setScoped(transAssistant.getInfo().getStmAssistant().isScoped(topBlock)); }
@Override public TraceNodeData caseATraceDeclTermIR(ATraceDeclTermIR node) throws AnalysisException { String name = getInfo().getTempVarNameGen().nextVarName(traceTrans.getTracePrefixes().altTraceNodeNamePrefix()); AClassTypeIR classType = getTransAssist().consClassType(traceTrans.getTracePrefixes().altTraceNodeNodeClassName()); if (node.getTraceDecls().size() == 1) { return node.getTraceDecls().getFirst().apply(this); } { AVarDeclIR altTests = getTransAssist().consDecl(name, classType, getTransAssist().consDefaultConsCall(classType)); ABlockStmIR stms = new ABlockStmIR(); stms.getLocalDefs().add(altTests); List<SStmIR> addStms = new LinkedList<SStmIR>(); for (STraceDeclIR traceDecl : node.getTraceDecls()) { TraceNodeData nodeData = traceDecl.apply(this); stms.getStatements().add(nodeData.getStms()); addStms.add(getTransAssist().consInstanceCallStm(classType, name, traceTrans.getTracePrefixes().addMethodName(), nodeData.getNodeVar())); } stms.getStatements().addAll(addStms); return new TraceNodeData(getInfo().getExpAssistant().consIdVar(name, classType.clone()), stms, stms); } }
@Override public TraceNodeData caseAConcurrentExpTraceCoreDeclIR( AConcurrentExpTraceCoreDeclIR node) throws AnalysisException { String name = getInfo().getTempVarNameGen().nextVarName(traceTrans.getTracePrefixes().concTraceNodeNamePrefix()); AClassTypeIR classType = getTransAssist().consClassType(traceTrans.getTracePrefixes().concTraceNodeNodeClassName()); AVarDeclIR concNodeDecl = getTransAssist().consDecl(name, classType, getTransAssist().consDefaultConsCall(classType)); ABlockStmIR stms = new ABlockStmIR(); stms.getLocalDefs().add(concNodeDecl); List<SStmIR> addStms = new LinkedList<SStmIR>(); // The number of declarations is > 1 for (STraceDeclIR term : node.getDecls()) { TraceNodeData nodeData = term.apply(this); AIdentifierVarExpIR var = nodeData.getNodeVar(); nodeData.getNodeVarScope().getStatements().add(getTransAssist().consInstanceCallStm(classType, name, traceTrans.getTracePrefixes().addMethodName(), var)); stms.getStatements().add(nodeData.getStms()); } stms.getStatements().addAll(addStms); return new TraceNodeData(getInfo().getExpAssistant().consIdVar(name, classType.clone()), stms, stms); }
private AAssignToExpStmIR declareAndAssignIdVarAssignment( ABlockStmIR declBlock, SPatternIR currentPattern, STypeIR currentType, SExpIR valueToMatch) { AIdentifierPatternIR currentId = (AIdentifierPatternIR) currentPattern; AVarDeclIR idVarDecl = transAssistant.getInfo().getDeclAssistant().consLocalVarDecl(currentType.clone(), currentPattern.clone(), new AUndefinedExpIR()); declBlock.getLocalDefs().add(idVarDecl); AIdentifierVarExpIR var = new AIdentifierVarExpIR(); var.setType(currentType.clone()); var.setName(currentId.getName()); var.setIsLocal(true); var.setIsLambda(false); AAssignToExpStmIR localAssignment = new AAssignToExpStmIR(); localAssignment.setTarget(var); localAssignment.setExp(valueToMatch); return localAssignment; }
public ABlockStmIR consVarFromCastedExp(ARecordDeclIR record, String formalParamName, String varName) throws AnalysisException { // Construct a local var in a statement: RecordType varName = ((RecordType) formalParamName); ARecordTypeIR recordType = new ARecordTypeIR(); recordType.setName(consTypeName(record)); AIdentifierPatternIR idPattern = new AIdentifierPatternIR(); idPattern.setName(varName); ACastUnaryExpIR cast = new ACastUnaryExpIR(); cast.setType(recordType.clone()); AIdentifierVarExpIR varExp = new AIdentifierVarExpIR(); varExp.setType(new AObjectTypeIR()); varExp.setName(formalParamName); varExp.setIsLocal(true); cast.setExp(varExp); AVarDeclIR localVar = info.getDeclAssistant().consLocalVarDecl(recordType, idPattern, cast); ABlockStmIR stm = new ABlockStmIR(); stm.getLocalDefs().add(localVar); return stm; }
public TraceNodeData buildFromDeclTerms(List<ATraceDeclTermIR> terms) throws AnalysisException { String name = getInfo().getTempVarNameGen().nextVarName(traceTrans.getTracePrefixes().seqTraceNodeNamePrefix()); AClassTypeIR classType = getTransAssist().consClassType(traceTrans.getTracePrefixes().seqClassTypeName()); AVarDeclIR seqNodeDecl = getTransAssist().consDecl(name, classType, getTransAssist().consDefaultConsCall(classType)); ABlockStmIR stms = new ABlockStmIR(); stms.getLocalDefs().add(seqNodeDecl); for (ATraceDeclTermIR term : terms) { TraceNodeData nodeData = term.apply(this); stms.getStatements().add(nodeData.getStms()); AIdentifierVarExpIR var = nodeData.getNodeVar(); nodeData.getNodeVarScope().getStatements().add(getTransAssist().consInstanceCallStm(classType, name, traceTrans.getTracePrefixes().addMethodName(), var)); } return new TraceNodeData(getInfo().getExpAssistant().consIdVar(name, classType.clone()), stms, stms); }
private void consSuccessVarCheck(SPatternIR pattern, PatternBlockData patternData) { String successVarName = this.transAssistant.getInfo().getTempVarNameGen().nextVarName(iteVarPrefixes.success()); SExpIR init = null; if (!patternData.IsRootPattern(pattern)) { init = transAssistant.getInfo().getExpAssistant().consBoolLiteral(pattern instanceof ATuplePatternIR ? false : true); init.setType(new ABoolBasicTypeIR()); } else { init = new AUndefinedExpIR(); init.setType(new AUnknownTypeIR()); } AVarDeclIR successVarDecl = transAssistant.consDecl(successVarName, new ABoolBasicTypeIR(), init); patternData.setSuccessVarDecl(successVarDecl); AIdentifierVarExpIR successVar = transAssistant.consSuccessVar(successVarName); patternData.setSuccessVar(successVar); patternData.getDeclBlock().getLocalDefs().add(successVarDecl); }