@Override public LexNameSet caseASetMultipleBind(ASetMultipleBind node, FreeVarInfo info) throws AnalysisException { return node.getSet().apply(this, info); }
@Override public PType caseASetMultipleBind(ASetMultipleBind mb) throws AnalysisException { return af.createPPatternListAssistant().getPossibleType(mb.getPlist(), mb.getLocation()); }
public static ASetMultipleBind newASetMultipleBind(List<PPattern> plist, PExp readExpression) { ASetMultipleBind result = new ASetMultipleBind(); result.setLocation(plist.get(0).getLocation()); result.setPlist(plist); result.setSet(readExpression); return result; }
/** * Returns a deep clone of this {@link ASetMultipleBind} node. * @return a deep clone of this {@link ASetMultipleBind} node */ public ASetMultipleBind clone() { return new ASetMultipleBind( _location, cloneList(_plist), cloneNode(_set) ); }
/** * Called by the {@link ASetMultipleBind} node from {@link ASetMultipleBind#apply(IAnalysis)}. * @param node the calling {@link ASetMultipleBind} node */ public void caseASetMultipleBind(ASetMultipleBind node) throws AnalysisException { _visitedNodes.add(node); inASetMultipleBind(node); { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { node.getSet().apply(this); } outASetMultipleBind(node); }
question.assistantFactory.createPPatternListAssistant().typeResolve(node.getPlist(), THIS, question); question.qualifiers = null; PType type = node.getSet().apply(THIS, question); PType result = AstFactory.newAUnknownType(node.getLocation()); TypeCheckerErrors.report(3197, "Expression matching set bind is not a set", node.getSet().getLocation(), node.getSet()); TypeCheckerErrors.detail("Actual type", type); } else TypeCheckerErrors.report(3264, "At least one bind cannot match set", node.getSet().getLocation(), node.getSet()); TypeCheckerErrors.detail2("Binds", ptype, "Set of", st); TypeCheckerErrors.warning(5009, "Empty set used in bind", node.getSet().getLocation(), node.getSet());
/** * Create a multiple set bind with a varargs list of pattern variables, like a,b,c in set S. This is used by several * obligations. */ protected PMultipleBind getMultipleSetBind(PExp setExp, ILexNameToken... patternNames) { ASetMultipleBind setBind = new ASetMultipleBind(); List<PPattern> patternList = new Vector<PPattern>(); for (ILexNameToken patternName : patternNames) { AIdentifierPattern pattern = new AIdentifierPattern(); pattern.setName(patternName.clone()); patternList.add(pattern); } setBind.setPlist(patternList); setBind.setSet(setExp.clone()); return setBind; }
ValueSet vs = node.getSet().apply(VdmRuntime.getExpressionEvaluator(), state.ctxt).setValue(state.ctxt); vs.sort(); VdmRuntimeError.abort(node.getLocation(), (ValueException) e);
/** * Creates a new complete constructor {@code ASetMultipleBind} 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 set_ the {@link PExp} node for the {@code set} child of this {@link ASetMultipleBind} node */ public ASetMultipleBind(ILexLocation location_, List<? extends PPattern> plist_, PExp set_) { super(location_,plist_); this.setSet(set_); }
/** * Called by the {@link ASetMultipleBind} node from {@link ASetMultipleBind#apply(IAnalysis)}. * @param node the calling {@link ASetMultipleBind} node */ public void caseASetMultipleBind(ASetMultipleBind node, Q question) throws AnalysisException { _visitedNodes.add(node); inASetMultipleBind(node, question); { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this, question); } } } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { node.getSet().apply(this, question); } outASetMultipleBind(node, question); }
PPattern p2 = makePattern(m2); ASetMultipleBind setBind = new ASetMultipleBind(); if (mapExp instanceof AMapCompMapExp) setBind.setSet(setExp); } else setBind.setSet(mapExp.clone()); setBind.setPlist(patternList);
/** * Creates a deep clone of this {@link ASetMultipleBind} 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 ASetMultipleBind} node */ public ASetMultipleBind clone(Map<INode,INode> oldToNewMap) { ASetMultipleBind node = new ASetMultipleBind( _location, cloneList(_plist, oldToNewMap), cloneNode(_set, oldToNewMap) ); oldToNewMap.put(this, node); return node; }
/** * Called by the {@link ASetMultipleBind} node from {@link ASetMultipleBind#apply(IPOFAnalysis)}. * @param node the calling {@link ASetMultipleBind} node */ public void caseASetMultipleBind(ASetMultipleBind node) throws AnalysisException { _visitedNodes.add(node); inASetMultipleBind(node); { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { node.getSet().apply(this); } outASetMultipleBind(node); }
@Override public IProofObligationList caseASetMultipleBind(ASetMultipleBind node, IPOContextStack question) throws AnalysisException { try { return node.getSet().apply(this.pogExpVisitor, question); } catch (Exception e) { throw new POException(node, e.getMessage()); } }
/** * Called by the {@link ASetMultipleBind} node from {@link ASetMultipleBind#apply(IAnalysis)}. * @param node the calling {@link ASetMultipleBind} node */ public A caseASetMultipleBind(ASetMultipleBind node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inASetMultipleBind(node)); { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { mergeReturns(retVal,e.apply(this)); } } } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { mergeReturns(retVal,node.getSet().apply(this)); } mergeReturns(retVal,outASetMultipleBind(node)); return retVal; }
@Override public LexNameList caseASetMultipleBind(ASetMultipleBind mb) throws AnalysisException { return af.createPExpAssistant().getOldNames(mb.getSet()); }
/** * Called by the {@link ASetMultipleBind} node from {@link ASetMultipleBind#apply(IAnalysis)}. * @param node the calling {@link ASetMultipleBind} node */ public A caseASetMultipleBind(ASetMultipleBind node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inASetMultipleBind(node, question)); { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { mergeReturns(retVal,e.apply(this, question)); } } } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { mergeReturns(retVal,node.getSet().apply(this, question)); } mergeReturns(retVal,outASetMultipleBind(node, question)); return retVal; }
@Override public ValueList caseASetMultipleBind(ASetMultipleBind node, ObjectContext ctxt) throws AnalysisException { return af.createPExpAssistant().getValues(node.getSet(), ctxt); }
@Override public SMultipleBindIR caseASetMultipleBind(ASetMultipleBind node, IRInfo question) throws AnalysisException { List<PPattern> patterns = node.getPlist(); PExp set = node.getSet(); LinkedList<SPatternIR> patternsCg = new LinkedList<SPatternIR>(); for (PPattern pattern : patterns) { SPatternIR patternTempCg = pattern.apply(question.getPatternVisitor(), question); if (patternTempCg != null) { patternsCg.add(patternTempCg); } else { return null; } } SExpIR setCg = set.apply(question.getExpVisitor(), question); ASetMultipleBindIR multipleSetBind = new ASetMultipleBindIR(); multipleSetBind.setPatterns(patternsCg); multipleSetBind.setSet(setCg); return multipleSetBind; }