@Override public List<PMultipleBind> caseASeqBind(ASeqBind bind) throws AnalysisException { List<PPattern> plist = new ArrayList<PPattern>(); plist.add(bind.getPattern()); List<PMultipleBind> mblist = new Vector<PMultipleBind>(); mblist.add(AstFactory.newASeqMultipleBind(plist, bind.getSeq())); return mblist; }
/** * Called by the {@link ASeqBind} node from {@link ASeqBind#apply(IAnalysis)}. * @param node the calling {@link ASeqBind} node */ public void caseASeqBind(ASeqBind node, Q question) throws AnalysisException { _visitedNodes.add(node); inASeqBind(node, question); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { node.getPattern().apply(this, question); } if(node.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { node.getSeq().apply(this, question); } outASeqBind(node, question); }
/** * Called by the {@link ASeqBind} node from {@link ASeqBind#apply(IAnalysis)}. * @param node the calling {@link ASeqBind} node */ public void caseASeqBind(ASeqBind node) throws AnalysisException { _visitedNodes.add(node); inASeqBind(node); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { node.getPattern().apply(this); } if(node.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { node.getSeq().apply(this); } outASeqBind(node); }
/** * Called by the {@link ASeqBind} node from {@link ASeqBind#apply(IPOFAnalysis)}. * @param node the calling {@link ASeqBind} node */ public void caseASeqBind(ASeqBind node) throws AnalysisException { _visitedNodes.add(node); inASeqBind(node); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { node.getPattern().apply(this); } if(node.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { node.getSeq().apply(this); } outASeqBind(node); }
/** * Called by the {@link ASeqBind} node from {@link ASeqBind#apply(IAnalysis)}. * @param node the calling {@link ASeqBind} node */ public A caseASeqBind(ASeqBind node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inASeqBind(node)); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { mergeReturns(retVal,node.getPattern().apply(this)); } if(node.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { mergeReturns(retVal,node.getSeq().apply(this)); } mergeReturns(retVal,outASeqBind(node)); return retVal; }
/** * Called by the {@link ASeqBind} node from {@link ASeqBind#apply(IAnalysis)}. * @param node the calling {@link ASeqBind} node */ public A caseASeqBind(ASeqBind node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inASeqBind(node, question)); if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { mergeReturns(retVal,node.getPattern().apply(this, question)); } if(node.getSeq() != null && !_visitedNodes.contains(node.getSeq())) { mergeReturns(retVal,node.getSeq().apply(this, question)); } mergeReturns(retVal,outASeqBind(node, question)); return retVal; }
@Override public SBindIR caseASeqBind(ASeqBind node, IRInfo question) throws AnalysisException { PPattern pattern = node.getPattern(); SPatternIR patternCg = pattern.apply(question.getPatternVisitor(), question); PExp seq = node.getSeq(); SExpIR seqCg = seq.apply(question.getExpVisitor(), question); ASeqBindIR seqBind = new ASeqBindIR(); seqBind.setPattern(patternCg); seqBind.setSeq(seqCg); return seqBind; } }
obligations.add(new SeqMembershipObligation(bind.getPattern(), bind.getSeq(), question, aF));
private Value evalSeqBind(ASeqCompSeqExp node, Context ctxt) throws AnalysisException { ValueList allValues = ctxt.assistantFactory.createPBindAssistant().getBindValues(node.getSeqBind(), ctxt, false); ValueList seq = new ValueList(); // Bind variable values for (Value val: allValues) { try { Context evalContext = new Context(ctxt.assistantFactory, node.getLocation(), "seq comprehension", ctxt); NameValuePairList nvpl = ctxt.assistantFactory.createPPatternAssistant().getNamedValues(node.getSeqBind().getPattern(), val, ctxt); evalContext.putList(nvpl); if (node.getPredicate() == null || node.getPredicate().apply(VdmRuntime.getExpressionEvaluator(), evalContext).boolValue(ctxt)) { Value out = node.getFirst().apply(VdmRuntime.getExpressionEvaluator(), evalContext); seq.add(out); } } catch (ValueException e) { VdmRuntimeError.abort(node.getLocation(), e); } catch (PatternMatchException e) { // Ignore mismatches } } return new SeqValue(seq); }
list.add(new SeqMembershipObligation(bind.getPattern(), bind.getSeq(), question, aF));
list.add(new SeqMembershipObligation(bind.getPattern(), bind.getSeq(), question, aF)); question.pop();
list.add(new SeqMembershipObligation(bind.getPattern(), bind.getSeq(), question, assistantFactory));
evalContext.putList(ctxt.assistantFactory.createPPatternAssistant().getNamedValues(seqbind.getPattern(), exval, ctxt));
question.assistantFactory.createPPatternAssistant().typeResolve(node.getSeqbind().getPattern(), THIS, question); node.setDefs(question.assistantFactory.createPPatternAssistant().getDefinitions(node.getSeqbind().getPattern(), node.getDefType(), question.scope));
evalContext.putList(ctxt.assistantFactory.createPPatternAssistant().getNamedValues(seqbind.getPattern(), val, ctxt)); Value rv = node.getStatement().apply(VdmRuntime.getStatementEvaluator(), evalContext);
nvpl = af.createPPatternAssistant().getNamedValues(def.getSeqbind().getPattern(), v, initialContext);
evalContext.putList(ctxt.assistantFactory.createPPatternAssistant().getNamedValues(seqbind.getPattern(), exval, ctxt)); rv = node.getWith().apply(VdmRuntime.getStatementEvaluator(), evalContext);