/** * Called by the {@link ABlockStmIR} node from {@link ABlockStmIR#apply(IIsaAnalysis)}. * @param node the calling {@link ABlockStmIR} node */ public void caseABlockStmIR(ABlockStmIR node) throws AnalysisException { _visitedNodes.add(node); inABlockStmIR(node); { List<AVarDeclIR> copy = new ArrayList<AVarDeclIR>(node.getLocalDefs()); for( AVarDeclIR e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } { List<SStmIR> copy = new ArrayList<SStmIR>(node.getStatements()); for( SStmIR e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } outABlockStmIR(node); }
/** * Called by the {@link ALetDefBindingTraceDeclIR} node from {@link ALetDefBindingTraceDeclIR#apply(IAnalysis)}. * @param node the calling {@link ALetDefBindingTraceDeclIR} node */ public void caseALetDefBindingTraceDeclIR(ALetDefBindingTraceDeclIR node, Q question) throws AnalysisException { _visitedNodes.add(node); inALetDefBindingTraceDeclIR(node, question); { List<AVarDeclIR> copy = new ArrayList<AVarDeclIR>(node.getLocalDefs()); for( AVarDeclIR e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this, question); } } } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { node.getBody().apply(this, question); } outALetDefBindingTraceDeclIR(node, question); }
/** * Called by the {@link ALetDefBindingTraceDeclIR} node from {@link ALetDefBindingTraceDeclIR#apply(IAnalysis)}. * @param node the calling {@link ALetDefBindingTraceDeclIR} node */ public void caseALetDefBindingTraceDeclIR(ALetDefBindingTraceDeclIR node) throws AnalysisException { _visitedNodes.add(node); inALetDefBindingTraceDeclIR(node); { List<AVarDeclIR> copy = new ArrayList<AVarDeclIR>(node.getLocalDefs()); for( AVarDeclIR e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { node.getBody().apply(this); } outALetDefBindingTraceDeclIR(node); }
/** * Called by the {@link ALetDefBindingTraceDeclIR} node from {@link ALetDefBindingTraceDeclIR#apply(IIsaAnalysis)}. * @param node the calling {@link ALetDefBindingTraceDeclIR} node */ public void caseALetDefBindingTraceDeclIR(ALetDefBindingTraceDeclIR node) throws AnalysisException { _visitedNodes.add(node); inALetDefBindingTraceDeclIR(node); { List<AVarDeclIR> copy = new ArrayList<AVarDeclIR>(node.getLocalDefs()); for( AVarDeclIR e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { node.getBody().apply(this); } outALetDefBindingTraceDeclIR(node); }
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); } } }
/** * Called by the {@link ALetDefExpIR} node from {@link ALetDefExpIR#apply(IAnalysis)}. * @param node the calling {@link ALetDefExpIR} node */ public void caseALetDefExpIR(ALetDefExpIR node) throws AnalysisException { _visitedNodes.add(node); inALetDefExpIR(node); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } { List<AVarDeclIR> copy = new ArrayList<AVarDeclIR>(node.getLocalDefs()); for( AVarDeclIR e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { node.getExp().apply(this); } outALetDefExpIR(node); }
/** * Called by the {@link ALetDefBindingTraceDeclIR} node from {@link ALetDefBindingTraceDeclIR#apply(IAnalysis)}. * @param node the calling {@link ALetDefBindingTraceDeclIR} node */ public A caseALetDefBindingTraceDeclIR(ALetDefBindingTraceDeclIR node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inALetDefBindingTraceDeclIR(node)); { List<AVarDeclIR> copy = new ArrayList<AVarDeclIR>(node.getLocalDefs()); for( AVarDeclIR e : copy) { if(!_visitedNodes.contains(e)) { mergeReturns(retVal,e.apply(this)); } } } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { mergeReturns(retVal,node.getBody().apply(this)); } mergeReturns(retVal,outALetDefBindingTraceDeclIR(node)); return retVal; }
/** * Called by the {@link ALocalPatternAssignmentStmIR} node from {@link ALocalPatternAssignmentStmIR#apply(IAnalysis)}. * @param node the calling {@link ALocalPatternAssignmentStmIR} node */ public void caseALocalPatternAssignmentStmIR(ALocalPatternAssignmentStmIR node) throws AnalysisException { _visitedNodes.add(node); inALocalPatternAssignmentStmIR(node); if(node.getTarget() != null && !_visitedNodes.contains(node.getTarget())) { node.getTarget().apply(this); } if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { node.getExp().apply(this); } if(node.getNextElementDecl() != null && !_visitedNodes.contains(node.getNextElementDecl())) { node.getNextElementDecl().apply(this); } outALocalPatternAssignmentStmIR(node); }
/** * Called by the {@link ALocalPatternAssignmentStmIR} node from {@link ALocalPatternAssignmentStmIR#apply(IAnalysis)}. * @param node the calling {@link ALocalPatternAssignmentStmIR} node */ public void caseALocalPatternAssignmentStmIR(ALocalPatternAssignmentStmIR node, Q question) throws AnalysisException { _visitedNodes.add(node); inALocalPatternAssignmentStmIR(node, question); if(node.getTarget() != null && !_visitedNodes.contains(node.getTarget())) { node.getTarget().apply(this, question); } if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { node.getExp().apply(this, question); } if(node.getNextElementDecl() != null && !_visitedNodes.contains(node.getNextElementDecl())) { node.getNextElementDecl().apply(this, question); } outALocalPatternAssignmentStmIR(node, question); }
/** * Called by the {@link ALetDefBindingTraceDeclIR} node from {@link ALetDefBindingTraceDeclIR#apply(IAnalysis)}. * @param node the calling {@link ALetDefBindingTraceDeclIR} node */ public A caseALetDefBindingTraceDeclIR(ALetDefBindingTraceDeclIR node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inALetDefBindingTraceDeclIR(node, question)); { List<AVarDeclIR> copy = new ArrayList<AVarDeclIR>(node.getLocalDefs()); for( AVarDeclIR e : copy) { if(!_visitedNodes.contains(e)) { mergeReturns(retVal,e.apply(this, question)); } } } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { mergeReturns(retVal,node.getBody().apply(this, question)); } mergeReturns(retVal,outALetDefBindingTraceDeclIR(node, question)); return retVal; }
/** * Called by the {@link ALocalPatternAssignmentStmIR} node from {@link ALocalPatternAssignmentStmIR#apply(IIsaAnalysis)}. * @param node the calling {@link ALocalPatternAssignmentStmIR} node */ public void caseALocalPatternAssignmentStmIR(ALocalPatternAssignmentStmIR node) throws AnalysisException { _visitedNodes.add(node); inALocalPatternAssignmentStmIR(node); if(node.getTarget() != null && !_visitedNodes.contains(node.getTarget())) { node.getTarget().apply(this); } if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { node.getExp().apply(this); } if(node.getNextElementDecl() != null && !_visitedNodes.contains(node.getNextElementDecl())) { node.getNextElementDecl().apply(this); } outALocalPatternAssignmentStmIR(node); }
/** * Called by the {@link AForLoopStmIR} node from {@link AForLoopStmIR#apply(IIsaAnalysis)}. * @param node the calling {@link AForLoopStmIR} node */ public void caseAForLoopStmIR(AForLoopStmIR node) throws AnalysisException { _visitedNodes.add(node); inAForLoopStmIR(node); if(node.getInit() != null && !_visitedNodes.contains(node.getInit())) { node.getInit().apply(this); } if(node.getCond() != null && !_visitedNodes.contains(node.getCond())) { node.getCond().apply(this); } if(node.getInc() != null && !_visitedNodes.contains(node.getInc())) { node.getInc().apply(this); } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { node.getBody().apply(this); } outAForLoopStmIR(node); }
/** * Called by the {@link AForLoopStmIR} node from {@link AForLoopStmIR#apply(IAnalysis)}. * @param node the calling {@link AForLoopStmIR} node */ public void caseAForLoopStmIR(AForLoopStmIR node) throws AnalysisException { _visitedNodes.add(node); inAForLoopStmIR(node); if(node.getInit() != null && !_visitedNodes.contains(node.getInit())) { node.getInit().apply(this); } if(node.getCond() != null && !_visitedNodes.contains(node.getCond())) { node.getCond().apply(this); } if(node.getInc() != null && !_visitedNodes.contains(node.getInc())) { node.getInc().apply(this); } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { node.getBody().apply(this); } outAForLoopStmIR(node); }
/** * Called by the {@link AForLoopStmIR} node from {@link AForLoopStmIR#apply(IAnalysis)}. * @param node the calling {@link AForLoopStmIR} node */ public void caseAForLoopStmIR(AForLoopStmIR node, Q question) throws AnalysisException { _visitedNodes.add(node); inAForLoopStmIR(node, question); if(node.getInit() != null && !_visitedNodes.contains(node.getInit())) { node.getInit().apply(this, question); } if(node.getCond() != null && !_visitedNodes.contains(node.getCond())) { node.getCond().apply(this, question); } if(node.getInc() != null && !_visitedNodes.contains(node.getInc())) { node.getInc().apply(this, question); } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { node.getBody().apply(this, question); } outAForLoopStmIR(node, question); }
/** * Called by the {@link ALetDefExpIR} node from {@link ALetDefExpIR#apply(IAnalysis)}. * @param node the calling {@link ALetDefExpIR} node */ public A caseALetDefExpIR(ALetDefExpIR node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inALetDefExpIR(node)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { mergeReturns(retVal,node.getType().apply(this)); } { List<AVarDeclIR> copy = new ArrayList<AVarDeclIR>(node.getLocalDefs()); for( AVarDeclIR e : copy) { if(!_visitedNodes.contains(e)) { mergeReturns(retVal,e.apply(this)); } } } if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { mergeReturns(retVal,node.getExp().apply(this)); } mergeReturns(retVal,outALetDefExpIR(node)); return retVal; }
/** * Called by the {@link ALocalPatternAssignmentStmIR} node from {@link ALocalPatternAssignmentStmIR#apply(IAnalysis)}. * @param node the calling {@link ALocalPatternAssignmentStmIR} node */ public A caseALocalPatternAssignmentStmIR(ALocalPatternAssignmentStmIR node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inALocalPatternAssignmentStmIR(node, question)); if(node.getTarget() != null && !_visitedNodes.contains(node.getTarget())) { mergeReturns(retVal,node.getTarget().apply(this, question)); } if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { mergeReturns(retVal,node.getExp().apply(this, question)); } if(node.getNextElementDecl() != null && !_visitedNodes.contains(node.getNextElementDecl())) { mergeReturns(retVal,node.getNextElementDecl().apply(this, question)); } mergeReturns(retVal,outALocalPatternAssignmentStmIR(node, question)); return retVal; }
/** * Called by the {@link ALocalPatternAssignmentStmIR} node from {@link ALocalPatternAssignmentStmIR#apply(IAnalysis)}. * @param node the calling {@link ALocalPatternAssignmentStmIR} node */ public A caseALocalPatternAssignmentStmIR(ALocalPatternAssignmentStmIR node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inALocalPatternAssignmentStmIR(node)); if(node.getTarget() != null && !_visitedNodes.contains(node.getTarget())) { mergeReturns(retVal,node.getTarget().apply(this)); } if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { mergeReturns(retVal,node.getExp().apply(this)); } if(node.getNextElementDecl() != null && !_visitedNodes.contains(node.getNextElementDecl())) { mergeReturns(retVal,node.getNextElementDecl().apply(this)); } mergeReturns(retVal,outALocalPatternAssignmentStmIR(node)); return retVal; }
/** * Called by the {@link AForLoopStmIR} node from {@link AForLoopStmIR#apply(IAnalysis)}. * @param node the calling {@link AForLoopStmIR} node */ public A caseAForLoopStmIR(AForLoopStmIR node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inAForLoopStmIR(node, question)); if(node.getInit() != null && !_visitedNodes.contains(node.getInit())) { mergeReturns(retVal,node.getInit().apply(this, question)); } if(node.getCond() != null && !_visitedNodes.contains(node.getCond())) { mergeReturns(retVal,node.getCond().apply(this, question)); } if(node.getInc() != null && !_visitedNodes.contains(node.getInc())) { mergeReturns(retVal,node.getInc().apply(this, question)); } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { mergeReturns(retVal,node.getBody().apply(this, question)); } mergeReturns(retVal,outAForLoopStmIR(node, question)); return retVal; }
/** * Called by the {@link AForLoopStmIR} node from {@link AForLoopStmIR#apply(IAnalysis)}. * @param node the calling {@link AForLoopStmIR} node */ public A caseAForLoopStmIR(AForLoopStmIR node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inAForLoopStmIR(node)); if(node.getInit() != null && !_visitedNodes.contains(node.getInit())) { mergeReturns(retVal,node.getInit().apply(this)); } if(node.getCond() != null && !_visitedNodes.contains(node.getCond())) { mergeReturns(retVal,node.getCond().apply(this)); } if(node.getInc() != null && !_visitedNodes.contains(node.getInc())) { mergeReturns(retVal,node.getInc().apply(this)); } if(node.getBody() != null && !_visitedNodes.contains(node.getBody())) { mergeReturns(retVal,node.getBody().apply(this)); } mergeReturns(retVal,outAForLoopStmIR(node)); return retVal; }
public void handleReturn(AReturnStmIR node) throws AnalysisException { /** * The idea is to extract the return value to variable and return that variable. Then it becomes the * responsibility of the variable declaration case to assert if the named invariant type is violated. */ SExpIR exp = node.getExp(); AMethodDeclIR encMethod = decorator.getJmlGen().getUtil().getEnclosingMethod(node); if (encMethod == null) { return; } STypeIR returnType = encMethod.getMethodType().getResult(); AbstractTypeInfo typeInfo = util.findTypeInfo(returnType); if (!proceed(typeInfo)) { return; } String name = getInfo().getTempVarNameGen().nextVarName(RET_VAR_NAME_PREFIX); AIdentifierPatternIR id = getInfo().getPatternAssistant().consIdPattern(name); AIdentifierVarExpIR varExp = getInfo().getExpAssistant().consIdVar(name, returnType.clone()); getTransAssist().replaceNodeWith(exp, varExp); AVarDeclIR varDecl = getInfo().getDeclAssistant().consLocalVarDecl(returnType.clone(), id, exp.clone()); ABlockStmIR replBlock = new ABlockStmIR(); replBlock.getLocalDefs().add(varDecl); getTransAssist().replaceNodeWith(node, replBlock); replBlock.getStatements().add(node); varDecl.apply(decorator); }