@Override public PTypeSet caseAForAllStm(AForAllStm statement) throws AnalysisException { return statement.getStatement().apply(THIS); }
@Override public PStm caseAForAllStm(AForAllStm stm, Integer lineno) throws AnalysisException { PStm found = findStatementBaseCase(stm, lineno); if (found != null) { return found; } return stm.getStatement().apply(THIS, lineno);// PStmAssistantInterpreter.findStatement(stm.getStatement(), // lineno); }
@Override public IProofObligationList caseAForAllStm(AForAllStm node, IPOContextStack question) throws AnalysisException { try { IProofObligationList obligations = node.getSet().apply(rootVisitor, question); obligations.addAll(node.getStatement().apply(mainVisitor, question)); return obligations; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
@Override public PExp caseAForAllStm(AForAllStm stm, Integer lineno) throws AnalysisException { PExp found = af.createPExpAssistant().findExpression(stm.getSet(), lineno); if (found != null) { return found; } return stm.getStatement().apply(THIS, lineno); }
/** * Called by the {@link AForAllStm} node from {@link AForAllStm#apply(IAnalysis)}. * @param node the calling {@link AForAllStm} node */ public void caseAForAllStm(AForAllStm node, Q question) throws AnalysisException { _visitedNodes.add(node); inAForAllStm(node, question); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this, question); } if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { node.getPattern().apply(this, question); } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { node.getSet().apply(this, question); } if(node.getStatement() != null && !_visitedNodes.contains(node.getStatement())) { node.getStatement().apply(this, question); } outAForAllStm(node, question); }
/** * Called by the {@link AForAllStm} node from {@link AForAllStm#apply(IAnalysis)}. * @param node the calling {@link AForAllStm} node */ public void caseAForAllStm(AForAllStm node) throws AnalysisException { _visitedNodes.add(node); inAForAllStm(node); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { node.getPattern().apply(this); } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { node.getSet().apply(this); } if(node.getStatement() != null && !_visitedNodes.contains(node.getStatement())) { node.getStatement().apply(this); } outAForAllStm(node); }
/** * Called by the {@link AForAllStm} node from {@link AForAllStm#apply(IPOFAnalysis)}. * @param node the calling {@link AForAllStm} node */ public void caseAForAllStm(AForAllStm node) throws AnalysisException { _visitedNodes.add(node); inAForAllStm(node); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { node.getPattern().apply(this); } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { node.getSet().apply(this); } if(node.getStatement() != null && !_visitedNodes.contains(node.getStatement())) { node.getStatement().apply(this); } outAForAllStm(node); }
/** * Called by the {@link AForAllStm} node from {@link AForAllStm#apply(IAnalysis)}. * @param node the calling {@link AForAllStm} node */ public A caseAForAllStm(AForAllStm node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inAForAllStm(node, question)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { mergeReturns(retVal,node.getType().apply(this, question)); } if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { mergeReturns(retVal,node.getPattern().apply(this, question)); } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { mergeReturns(retVal,node.getSet().apply(this, question)); } if(node.getStatement() != null && !_visitedNodes.contains(node.getStatement())) { mergeReturns(retVal,node.getStatement().apply(this, question)); } mergeReturns(retVal,outAForAllStm(node, question)); return retVal; }
/** * Called by the {@link AForAllStm} node from {@link AForAllStm#apply(IAnalysis)}. * @param node the calling {@link AForAllStm} node */ public A caseAForAllStm(AForAllStm node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inAForAllStm(node)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { mergeReturns(retVal,node.getType().apply(this)); } if(node.getPattern() != null && !_visitedNodes.contains(node.getPattern())) { mergeReturns(retVal,node.getPattern().apply(this)); } if(node.getSet() != null && !_visitedNodes.contains(node.getSet())) { mergeReturns(retVal,node.getSet().apply(this)); } if(node.getStatement() != null && !_visitedNodes.contains(node.getStatement())) { mergeReturns(retVal,node.getStatement().apply(this)); } mergeReturns(retVal,outAForAllStm(node)); return retVal; }
@Override public void caseAForAllStm(AForAllStm node) throws AnalysisException { if (!proceed(node)) { return; } if (node.getSet() != null) { node.getSet().apply(this); } PType possibleType = af.createPPatternAssistant().getPossibleType(node.getPattern()); List<PDefinition> defs = af.createPPatternAssistant().getDefinitions(node.getPattern(), possibleType, NameScope.LOCAL); for (PDefinition d : defs) { openLoop(d.getName(), node.getPattern(), node.getStatement()); } node.getStatement().apply(this); for (PDefinition def : defs) { removeLocalDefFromScope(def); } }
@Override public SStmIR caseAForAllStm(AForAllStm node, IRInfo question) throws AnalysisException { // Example: for all x in set {1,2,3} do skip; PPattern pattern = node.getPattern(); PExp set = node.getSet(); PStm body = node.getStatement(); SPatternIR patternCg = pattern.apply(question.getPatternVisitor(), question); SExpIR setExpCg = set.apply(question.getExpVisitor(), question); SStmIR bodyCg = body.apply(question.getStmVisitor(), question); AForAllStmIR forAll = new AForAllStmIR(); forAll.setPattern(patternCg); forAll.setExp(setExpCg); forAll.setBody(bodyCg); return forAll; }
@Override public Value caseAForAllStm(AForAllStm node, Context ctxt) throws AnalysisException { BreakpointManager.getBreakpoint(node).check(node.getLocation(), ctxt); try { ValueSet values = node.getSet().apply(VdmRuntime.getStatementEvaluator(), ctxt).setValue(ctxt); for (Value val : values) { try { Context evalContext = new Context(ctxt.assistantFactory, node.getLocation(), "for all", ctxt); evalContext.putList(ctxt.assistantFactory.createPPatternAssistant().getNamedValues(node.getPattern(), val, ctxt)); Value rv = node.getStatement().apply(VdmRuntime.getStatementEvaluator(), evalContext); if (!rv.isVoid()) { return rv; } } catch (PatternMatchException e) { // Ignore and try others } } } catch (ValueException e) { VdmRuntimeError.abort(node.getLocation(), e); } return new VoidValue(); }
@Override public PType caseAForAllStm(AForAllStm node, TypeCheckInfo question) throws AnalysisException { node.setType(node.getSet().apply(THIS, question)); question.assistantFactory.createPPatternAssistant().typeResolve(node.getPattern(), THIS, question); if (question.assistantFactory.createPTypeAssistant().isSet(node.getType())) { SSetType st = question.assistantFactory.createPTypeAssistant().getSet(node.getType()); List<PDefinition> defs = question.assistantFactory.createPPatternAssistant().getDefinitions(node.getPattern(), st.getSetof(), NameScope.LOCAL); Environment local = new FlatCheckedEnvironment(question.assistantFactory, defs, question.env, question.scope); PType rt = node.getStatement().apply(THIS, new TypeCheckInfo(question.assistantFactory, local, question.scope)); local.unusedCheck(); node.setType(rt); return rt; } else { TypeCheckerErrors.report(3219, "For all statement does not contain a set type", node.getLocation(), node); node.setType(AstFactory.newAUnknownType(node.getLocation())); return node.getType(); } }