/** * Called by the {@link ACaseAltStmStmIR} node from {@link ACaseAltStmStmIR#apply(IAnalysis)}. * @param node the calling {@link ACaseAltStmStmIR} node */ public void caseACaseAltStmStmIR(ACaseAltStmStmIR node, Q question) throws AnalysisException { _visitedNodes.add(node); inACaseAltStmStmIR(node, question); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { node.getPattern().apply(this, question); } if(node.getResult() != null && !_visitedNodes.contains(node.getResult())) { node.getResult().apply(this, question); } if(node.getPatternType() != null && !_visitedNodes.contains(node.getPatternType())) { node.getPatternType().apply(this, question); } outACaseAltStmStmIR(node, question); }
/** * Returns a deep clone of this {@link ACaseAltStmStmIR} node. * @return a deep clone of this {@link ACaseAltStmStmIR} node */ public ACaseAltStmStmIR clone() { return new ACaseAltStmStmIR( _sourceNode, _tag, _metaData, cloneNode(_pattern), cloneNode(_result), cloneNode(_patternType) ); }
/** * Creates a new complete constructor {@code ACaseAltStmStmIR} node with the given nodes as children. * @deprecated This method should not be used, use AstFactory instead. * The basic child nodes are removed from their previous parents. * @param pattern_ the {@link SPatternIR} node for the {@code pattern} child of this {@link ACaseAltStmStmIR} node * @param result_ the {@link SStmIR} node for the {@code result} child of this {@link ACaseAltStmStmIR} node * @param patternType_ the {@link STypeIR} node for the {@code patternType} child of this {@link ACaseAltStmStmIR} node */ public ACaseAltStmStmIR(SourceNode sourceNode_, Object tag_, List<? extends ClonableString> metaData_, SPatternIR pattern_, SStmIR result_, STypeIR patternType_) { super(sourceNode_,tag_,metaData_); this.setPattern(pattern_); this.setResult(result_); this.setPatternType(patternType_); }
public List<PatternInfo> extractFromCases(List<ACaseAltStmStmIR> cases, SExpIR exp) { List<PatternInfo> patternInfo = new LinkedList<PatternInfo>(); for (ACaseAltStmStmIR alt : cases) { patternInfo.add(new PatternInfo(alt.getPatternType(), alt.getPattern(), exp)); } return patternInfo; }
ACaseAltStmStmIR altStm = new ACaseAltStmStmIR(); altStm.setPattern(altExp.getPattern().clone()); altStm.setResult(assignToVar(resultVar, altExp.getResult())); altStm.setPatternType(altExp.getPatternType().clone());
@Override public SStmIR caseACaseAlternativeStm(ACaseAlternativeStm node, IRInfo question) throws AnalysisException { PPattern pattern = node.getPattern(); PStm result = node.getResult(); SPatternIR patternCg = pattern.apply(question.getPatternVisitor(), question); SStmIR resultCg = result.apply(question.getStmVisitor(), question); ACaseAltStmStmIR caseCg = new ACaseAltStmStmIR(); caseCg.setPattern(patternCg); caseCg.setResult(resultCg); return caseCg; }
SPatternIR firstOriginal = nodeCases.get(0).getPattern().clone(); ifStm.setElseStm(nodeCases.get(0).getResult().clone()); nextCase.setElseStm(currentCase.getResult().clone()); nextCase.setIfExp(patternData.getSuccessVar().clone()); nextCase.setThenStm(nodeCases.get(nodeCases.size() - 1).getResult().clone());
/** * Called by the {@link ACasesStmIR} node from {@link ACasesStmIR#apply(IIsaAnalysis)}. * @param node the calling {@link ACasesStmIR} node */ public void caseACasesStmIR(ACasesStmIR node) throws AnalysisException { _visitedNodes.add(node); inACasesStmIR(node); if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { node.getExp().apply(this); } { List<ACaseAltStmStmIR> copy = new ArrayList<ACaseAltStmStmIR>(node.getCases()); for( ACaseAltStmStmIR e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } if(node.getOthers() != null && !_visitedNodes.contains(node.getOthers())) { node.getOthers().apply(this); } outACasesStmIR(node); }
cgCase.setPatternType(patternTypeCg); altCg.setPatternType(expTypeCg.clone());
/** * Called by the {@link ACasesStmIR} node from {@link ACasesStmIR#apply(IAnalysis)}. * @param node the calling {@link ACasesStmIR} node */ public void caseACasesStmIR(ACasesStmIR node) throws AnalysisException { _visitedNodes.add(node); inACasesStmIR(node); if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { node.getExp().apply(this); } { List<ACaseAltStmStmIR> copy = new ArrayList<ACaseAltStmStmIR>(node.getCases()); for( ACaseAltStmStmIR e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } if(node.getOthers() != null && !_visitedNodes.contains(node.getOthers())) { node.getOthers().apply(this); } outACasesStmIR(node); }
/** * Called by the {@link ACaseAltStmStmIR} node from {@link ACaseAltStmStmIR#apply(IAnalysis)}. * @param node the calling {@link ACaseAltStmStmIR} node */ public void caseACaseAltStmStmIR(ACaseAltStmStmIR node) throws AnalysisException { _visitedNodes.add(node); inACaseAltStmStmIR(node); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { node.getPattern().apply(this); } if(node.getResult() != null && !_visitedNodes.contains(node.getResult())) { node.getResult().apply(this); } if(node.getPatternType() != null && !_visitedNodes.contains(node.getPatternType())) { node.getPatternType().apply(this); } outACaseAltStmStmIR(node); }
/** * Creates a new tree field only constructor {@code ACaseAltStmStmIR TAG=case} node with the given nodes as children. * @deprecated This method should not be used, use AstFactory instead. * The basic child nodes are removed from their previous parents. * @param pattern_ the {@link SPatternIR} node for the {@code pattern} child of this {@link ACaseAltStmStmIR} node * @param result_ the {@link SStmIR} node for the {@code result} child of this {@link ACaseAltStmStmIR} node * @param patternType_ the {@link STypeIR} node for the {@code patternType} child of this {@link ACaseAltStmStmIR} node */ public ACaseAltStmStmIR(SPatternIR pattern_, SStmIR result_, STypeIR patternType_) { super(null,null,null); this.setPattern(pattern_); this.setResult(result_); this.setPatternType(patternType_); }
/** * Called by the {@link ACasesStmIR} node from {@link ACasesStmIR#apply(IAnalysis)}. * @param node the calling {@link ACasesStmIR} node */ public void caseACasesStmIR(ACasesStmIR node, Q question) throws AnalysisException { _visitedNodes.add(node); inACasesStmIR(node, question); if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { node.getExp().apply(this, question); } { List<ACaseAltStmStmIR> copy = new ArrayList<ACaseAltStmStmIR>(node.getCases()); for( ACaseAltStmStmIR e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this, question); } } } if(node.getOthers() != null && !_visitedNodes.contains(node.getOthers())) { node.getOthers().apply(this, question); } outACasesStmIR(node, question); }
/** * Creates a deep clone of this {@link ACaseAltStmStmIR} node while putting all * old node-new node relations in the map {@code oldToNewMap}. * @param oldToNewMap the map filled with the old node-new node relation * @return a deep clone of this {@link ACaseAltStmStmIR} node */ public ACaseAltStmStmIR clone(Map<INode,INode> oldToNewMap) { ACaseAltStmStmIR node = new ACaseAltStmStmIR( _sourceNode, _tag, _metaData, cloneNode(_pattern, oldToNewMap), cloneNode(_result, oldToNewMap), cloneNode(_patternType, oldToNewMap) ); oldToNewMap.put(this, node); return node; }
/** * Called by the {@link ACaseAltStmStmIR} node from {@link ACaseAltStmStmIR#apply(IIsaAnalysis)}. * @param node the calling {@link ACaseAltStmStmIR} node */ public void caseACaseAltStmStmIR(ACaseAltStmStmIR node) throws AnalysisException { _visitedNodes.add(node); inACaseAltStmStmIR(node); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { node.getPattern().apply(this); } if(node.getResult() != null && !_visitedNodes.contains(node.getResult())) { node.getResult().apply(this); } if(node.getPatternType() != null && !_visitedNodes.contains(node.getPatternType())) { node.getPatternType().apply(this); } outACaseAltStmStmIR(node); }
/** * Called by the {@link ACasesStmIR} node from {@link ACasesStmIR#apply(IAnalysis)}. * @param node the calling {@link ACasesStmIR} node */ public A caseACasesStmIR(ACasesStmIR node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inACasesStmIR(node, question)); if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { mergeReturns(retVal,node.getExp().apply(this, question)); } { List<ACaseAltStmStmIR> copy = new ArrayList<ACaseAltStmStmIR>(node.getCases()); for( ACaseAltStmStmIR e : copy) { if(!_visitedNodes.contains(e)) { mergeReturns(retVal,e.apply(this, question)); } } } if(node.getOthers() != null && !_visitedNodes.contains(node.getOthers())) { mergeReturns(retVal,node.getOthers().apply(this, question)); } mergeReturns(retVal,outACasesStmIR(node, question)); return retVal; }
/** * Called by the {@link ACaseAltStmStmIR} node from {@link ACaseAltStmStmIR#apply(IAnalysis)}. * @param node the calling {@link ACaseAltStmStmIR} node */ public A caseACaseAltStmStmIR(ACaseAltStmStmIR node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inACaseAltStmStmIR(node, question)); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { mergeReturns(retVal,node.getPattern().apply(this, question)); } if(node.getResult() != null && !_visitedNodes.contains(node.getResult())) { mergeReturns(retVal,node.getResult().apply(this, question)); } if(node.getPatternType() != null && !_visitedNodes.contains(node.getPatternType())) { mergeReturns(retVal,node.getPatternType().apply(this, question)); } mergeReturns(retVal,outACaseAltStmStmIR(node, question)); return retVal; }
/** * Called by the {@link ACasesStmIR} node from {@link ACasesStmIR#apply(IAnalysis)}. * @param node the calling {@link ACasesStmIR} node */ public A caseACasesStmIR(ACasesStmIR node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inACasesStmIR(node)); if(node.getExp() != null && !_visitedNodes.contains(node.getExp())) { mergeReturns(retVal,node.getExp().apply(this)); } { List<ACaseAltStmStmIR> copy = new ArrayList<ACaseAltStmStmIR>(node.getCases()); for( ACaseAltStmStmIR e : copy) { if(!_visitedNodes.contains(e)) { mergeReturns(retVal,e.apply(this)); } } } if(node.getOthers() != null && !_visitedNodes.contains(node.getOthers())) { mergeReturns(retVal,node.getOthers().apply(this)); } mergeReturns(retVal,outACasesStmIR(node)); return retVal; }
/** * Called by the {@link ACaseAltStmStmIR} node from {@link ACaseAltStmStmIR#apply(IAnalysis)}. * @param node the calling {@link ACaseAltStmStmIR} node */ public A caseACaseAltStmStmIR(ACaseAltStmStmIR node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inACaseAltStmStmIR(node)); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { mergeReturns(retVal,node.getPattern().apply(this)); } if(node.getResult() != null && !_visitedNodes.contains(node.getResult())) { mergeReturns(retVal,node.getResult().apply(this)); } if(node.getPatternType() != null && !_visitedNodes.contains(node.getPatternType())) { mergeReturns(retVal,node.getPatternType().apply(this)); } mergeReturns(retVal,outACaseAltStmStmIR(node)); return retVal; }