@Override public void caseANonDeterministicBlockStmIR(ANonDeterministicBlockStmIR node) throws AnalysisException { super.caseANonDeterministicBlockStmIR(node); ABlockStmIR block = new ABlockStmIR(); block.setScoped(false); block.setTag(node.getTag()); block.setSourceNode(node.getSourceNode()); if(!node.getStatements().isEmpty()) { // Just use the first statement block.getStatements().add(node.getStatements().getFirst().clone()); } else { log.error("nondeterministic statement block did not contain any statements: " + node); } assist.replaceNodeWith(node, block); } }
SStmIR body = node.getBody().clone();
newBody.getStatements().add(body.clone());
callStmCreation.setType(callStmType); AMethodDeclIR typeCheckMethod = consTypeCheckMethod(node.getCallStm().clone()); AMethodDeclIR preCondMethod = condMeetsPreCondMethod(node.getCallStm().clone()); callStmCreation.getMethods().add(consExecuteMethod(node.getCallStm().clone())); callStmCreation.getMethods().add(traceTrans.getToStringBuilder().consToString(getInfo(), node.getCallStm(), storeAssistant.getIdConstNameMap(), storeAssistant, getTransAssist())); AVarDeclIR callStmDecl = getTransAssist().consDecl(callStmName, callStmType.clone(), callStmCreation);
@Override public void caseAForAllStmIR(AForAllStmIR node) throws AnalysisException { SPatternIR pattern = node.getPattern(); if (pattern instanceof AIdentifierPatternIR) { node.getExp().apply(this); node.getBody().apply(this); return; } if (pattern instanceof AIgnorePatternIR) { AIdentifierPatternIR idPattern = getIdPattern(config.getIgnorePatternPrefix()); transAssistant.replaceNodeWith(pattern, idPattern); } PatternBlockData patternData = new PatternBlockData(MismatchHandling.LOOP_CONTINUE); patternData.setPattern(pattern); ABlockStmIR declBlock = new ABlockStmIR(); patternData.setDeclBlock(declBlock); ABlockStmIR patternHandlingBlock = consPatternCheck(false, pattern, transAssistant.getInfo().getTypeAssistant().findElementType(node.getExp().getType().clone()), patternData, null); if (patternHandlingBlock != null) { declBlock.getStatements().addFirst(patternHandlingBlock); } declBlock.getStatements().add(node.getBody().clone()); transAssistant.replaceNodeWith(node.getBody(), declBlock); node.getExp().apply(this); node.getBody().apply(this); }