public ANewExpIR consDefaultConsCall(AClassTypeIR classType) { ANewExpIR initAltNode = new ANewExpIR(); initAltNode.setType(classType.clone()); initAltNode.setName(consTypeNameForClass(classType.getName())); return initAltNode; }
protected ABlockStmIR consDecl(String classTypeName, String varName, SExpIR... args) { ATypeNameIR typeName = getTransAssist().consTypeNameForClass(classTypeName); AClassTypeIR classType = getTransAssist().consClassType(classTypeName); ANewExpIR newExp = new ANewExpIR(); newExp.setName(typeName); newExp.setType(classType); for (SExpIR arg : args) { newExp.getArgs().add(arg); } return getTransAssist().wrap(getTransAssist().consDecl(varName, classType.clone(), newExp)); }
classArg.setType(classType.clone());
@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); }
AVarDeclIR callStmDecl = getTransAssist().consDecl(callStmName, callStmType.clone(), callStmCreation); newStmTraceNodeExp.getArgs().add(getInfo().getExpAssistant().consIdVar(callStmName, callStmType.clone())); AVarDeclIR stmNodeDecl = getTransAssist().consDecl(stmNodeName, stmTraceNodeType.clone(), newStmTraceNodeExp); decls.getLocalDefs().add(stmNodeDecl); return new TraceNodeData(getInfo().getExpAssistant().consIdVar(stmNodeName, stmTraceNodeType.clone()), decls, decls);
@Override public AVarDeclIR getForLoopInit(AIdentifierVarExpIR setVar, List<SPatternIR> patterns, SPatternIR pattern) { iteratorName = transAssistant.getInfo().getTempVarNameGen().nextVarName(iteVarPrefixes.iterator()); String setName = setVar.getName(); AClassTypeIR iteratorType = transAssistant.consClassType(ITERATOR_TYPE); STypeIR setType = setVar.getType().clone(); SExpIR getIteratorCall = transAssistant.consInstanceCall(setType, setName, iteratorType.clone(), GET_ITERATOR); return transAssistant.getInfo().getDeclAssistant().consLocalVarDecl(iteratorType, transAssistant.getInfo().getPatternAssistant().consIdPattern(iteratorName), getIteratorCall); }
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 AMethodDeclIR consTraceMethod(ANamedTraceDeclIR node) throws AnalysisException { AClassTypeIR testAccType = transAssistant.consClassType(tracePrefixes.testAccumulatorClassName()); AMethodTypeIR methodType = new AMethodTypeIR(); methodType.setResult(new AVoidTypeIR()); methodType.getParams().add(testAccType); AFormalParamLocalParamIR instanceParam = new AFormalParamLocalParamIR(); instanceParam.setType(testAccType.clone()); instanceParam.setPattern(transAssistant.getInfo().getPatternAssistant().consIdPattern(tracePrefixes.traceMethodParamName())); AMethodDeclIR traceMethod = new AMethodDeclIR(); traceMethod.setTag(new TraceMethodTag()); traceMethod.getFormalParams().add(instanceParam); traceMethod.setImplicit(false); traceMethod.setAbstract(false); traceMethod.setAccess(IRConstants.PUBLIC); traceMethod.setBody(consTraceMethodBody(node)); traceMethod.setIsConstructor(false); traceMethod.setStatic(Settings.dialect == Dialect.VDM_SL); traceMethod.setMethodType(methodType); traceMethod.setName(getTraceName(node) + "_" + tracePrefixes.runTraceMethodName()); return traceMethod; }
firsthistcount.setSentinelType(innerclass.clone()); firsthistcount.setOpsname(mutex.getOpnames().getFirst().toString()); firsthistcount.setType(new AIntNumericBasicTypeIR()); histcountleft.setOpsname(nextOpName); histcountleft.setType(new AIntNumericBasicTypeIR()); histcountleft.setSentinelType(innerclass.clone()); lastHistoryExpIR.setHistype(concPrefixes.activeHistOpTypeName()); lastHistoryExpIR.setType(new AIntNumericBasicTypeIR()); lastHistoryExpIR.setSentinelType(innerclass.clone()); addition1.setRight(lastHistoryExpIR);
leaving.setClassType(sentinel.clone()); leaving.setType(new AVoidTypeIR()); leaving.getArgs().add(field.clone());
cast.setExp(getInfo().getExpAssistant().consIdVar(traceTrans.getTracePrefixes().callStmMethodParamName(), consClassType.clone()));
castedVarExp.setType(currentType.clone()); castedVarExp.setExp(objExp.clone());
return new TraceNodeData(getInfo().getExpAssistant().consIdVar(name, classType.clone()), outerBlock, outerBlock);