/************************* Binds ***************************/ @Override public LexNameSet caseASeqMultipleBind(ASeqMultipleBind node, FreeVarInfo info) throws AnalysisException { return node.getSeq().apply(this, info); }
@Override public PType caseASeqMultipleBind(ASeqMultipleBind mb) throws AnalysisException { return af.createPPatternListAssistant().getPossibleType(mb.getPlist(), mb.getLocation()); }
public static ASeqMultipleBind newASeqMultipleBind(List<PPattern> plist, PExp readExpression) { ASeqMultipleBind result = new ASeqMultipleBind(); result.setLocation(plist.get(0).getLocation()); result.setPlist(plist); result.setSeq(readExpression); return result; }
/** * Returns a deep clone of this {@link ASeqMultipleBind} node. * @return a deep clone of this {@link ASeqMultipleBind} node */ public ASeqMultipleBind clone() { return new ASeqMultipleBind( _location, cloneList(_plist), cloneNode(_seq) ); }
/** * Called by the {@link ASeqMultipleBind} node from {@link ASeqMultipleBind#apply(IAnalysis)}. * @param node the calling {@link ASeqMultipleBind} node */ public void caseASeqMultipleBind(ASeqMultipleBind node) throws AnalysisException { _visitedNodes.add(node); inASeqMultipleBind(node); { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } if(node.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { node.getSeq().apply(this); } outASeqMultipleBind(node); }
TypeCheckInfo question) throws AnalysisException question.assistantFactory.createPPatternListAssistant().typeResolve(node.getPlist(), THIS, question); question.qualifiers = null; PType type = node.getSeq().apply(THIS, question); PType result = AstFactory.newAUnknownType(node.getLocation()); TypeCheckerErrors.report(3197, "Expression matching seq bind is not a sequence", node.getSeq().getLocation(), node.getSeq()); TypeCheckerErrors.detail("Actual type", type); TypeCheckerErrors.report(3264, "At least one bind cannot match sequence", node.getSeq().getLocation(), node.getSeq()); TypeCheckerErrors.detail2("Binds", ptype, "Seq of", st); TypeCheckerErrors.warning(5009, "Empty squence used in bind", node.getSeq().getLocation(), node.getSeq());
@Override public ValueList caseASeqMultipleBind(ASeqMultipleBind node, BindState state) throws AnalysisException { try { return node.getSeq().apply(VdmRuntime.getExpressionEvaluator(), state.ctxt).seqValue(state.ctxt); } catch (AnalysisException e) { if (e instanceof ValueException) { VdmRuntimeError.abort(node.getLocation(), (ValueException) e); } return null; } }
/** * Called by the {@link ASeqMultipleBind} node from {@link ASeqMultipleBind#apply(IPOFAnalysis)}. * @param node the calling {@link ASeqMultipleBind} node */ public void caseASeqMultipleBind(ASeqMultipleBind node) throws AnalysisException { _visitedNodes.add(node); inASeqMultipleBind(node); { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } if(node.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { node.getSeq().apply(this); } outASeqMultipleBind(node); }
/** * Creates a deep clone of this {@link ASeqMultipleBind} 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 ASeqMultipleBind} node */ public ASeqMultipleBind clone(Map<INode,INode> oldToNewMap) { ASeqMultipleBind node = new ASeqMultipleBind( _location, cloneList(_plist, oldToNewMap), cloneNode(_seq, oldToNewMap) ); oldToNewMap.put(this, node); return node; }
/** * Called by the {@link ASeqMultipleBind} node from {@link ASeqMultipleBind#apply(IAnalysis)}. * @param node the calling {@link ASeqMultipleBind} node */ public void caseASeqMultipleBind(ASeqMultipleBind node, Q question) throws AnalysisException { _visitedNodes.add(node); inASeqMultipleBind(node, question); { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this, question); } } } if(node.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { node.getSeq().apply(this, question); } outASeqMultipleBind(node, question); }
@Override public IProofObligationList caseASeqMultipleBind(ASeqMultipleBind node, IPOContextStack question) throws AnalysisException { try { return node.getSeq().apply(this.pogExpVisitor, question); } catch (Exception e) { throw new POException(node, e.getMessage()); } }
/** * Called by the {@link ASeqMultipleBind} node from {@link ASeqMultipleBind#apply(IAnalysis)}. * @param node the calling {@link ASeqMultipleBind} node */ public A caseASeqMultipleBind(ASeqMultipleBind node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inASeqMultipleBind(node)); { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { mergeReturns(retVal,e.apply(this)); } } } if(node.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { mergeReturns(retVal,node.getSeq().apply(this)); } mergeReturns(retVal,outASeqMultipleBind(node)); return retVal; }
@Override public LexNameList caseASeqMultipleBind(ASeqMultipleBind mb) throws AnalysisException { return af.createPExpAssistant().getOldNames(mb.getSeq()); }
/** * Called by the {@link ASeqMultipleBind} node from {@link ASeqMultipleBind#apply(IAnalysis)}. * @param node the calling {@link ASeqMultipleBind} node */ public A caseASeqMultipleBind(ASeqMultipleBind node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inASeqMultipleBind(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.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { mergeReturns(retVal,node.getSeq().apply(this, question)); } mergeReturns(retVal,outASeqMultipleBind(node, question)); return retVal; }
@Override public ValueList caseASeqMultipleBind(ASeqMultipleBind node, ObjectContext ctxt) throws AnalysisException { return af.createPExpAssistant().getValues(node.getSeq(), ctxt); }