@Override public List<PExp> caseAClassInvariantDefinition( AClassInvariantDefinition node) throws AnalysisException { List<PExp> r = new LinkedList<PExp>(); r.add(node.getExpression()); return r; } }
/************************* Definitions ***************************/ @Override public LexNameSet caseAClassInvariantDefinition(AClassInvariantDefinition node, FreeVarInfo info) throws AnalysisException { return node.getExpression().apply(this, info); }
@Override public PExp caseAClassInvariantDefinition(AClassInvariantDefinition def, Integer lineno) throws AnalysisException { return af.createPExpAssistant().findExpression(def.getExpression(), lineno); }
private PExp invDefs(SClassDefinition def) { PExp root = null; for (PDefinition d : assistantFactory.createSClassDefinitionAssistant().getInvDefs(def.clone())) { AClassInvariantDefinition cid = (AClassInvariantDefinition) d; root = makeAnd(root, cid.getExpression().clone()); } return root; }
/** * Called by the {@link AClassInvariantDefinition} node from {@link AClassInvariantDefinition#apply(IAnalysis)}. * @param node the calling {@link AClassInvariantDefinition} node */ public void caseAClassInvariantDefinition(AClassInvariantDefinition node, Q question) throws AnalysisException { _visitedNodes.add(node); inAClassInvariantDefinition(node, question); if(node.getName() != null ) { node.getName().apply(this, question); } if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) { node.getClassDefinition().apply(this, question); } if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) { node.getAccess().apply(this, question); } if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this, question); } if(node.getExpression() != null && !_visitedNodes.contains(node.getExpression())) { node.getExpression().apply(this, question); } outAClassInvariantDefinition(node, question); }
/** * Called by the {@link AClassInvariantDefinition} node from {@link AClassInvariantDefinition#apply(IPOFAnalysis)}. * @param node the calling {@link AClassInvariantDefinition} node */ public void caseAClassInvariantDefinition(AClassInvariantDefinition node) throws AnalysisException { _visitedNodes.add(node); inAClassInvariantDefinition(node); if(node.getName() != null ) { node.getName().apply(this); } if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) { node.getClassDefinition().apply(this); } if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) { node.getAccess().apply(this); } if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getExpression() != null && !_visitedNodes.contains(node.getExpression())) { node.getExpression().apply(this); } outAClassInvariantDefinition(node); }
/** * Called by the {@link AClassInvariantDefinition} node from {@link AClassInvariantDefinition#apply(IAnalysis)}. * @param node the calling {@link AClassInvariantDefinition} node */ public void caseAClassInvariantDefinition(AClassInvariantDefinition node) throws AnalysisException { _visitedNodes.add(node); inAClassInvariantDefinition(node); if(node.getName() != null ) { node.getName().apply(this); } if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) { node.getClassDefinition().apply(this); } if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) { node.getAccess().apply(this); } if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getExpression() != null && !_visitedNodes.contains(node.getExpression())) { node.getExpression().apply(this); } outAClassInvariantDefinition(node); }
private PExp invDefs(PDefinition def) { if (def instanceof AStateDefinition) { return ((AStateDefinition) def).getInvdef().getBody(); } else { PExp root = null; for (PDefinition d : assistantFactory.createSClassDefinitionAssistant().getInvDefs((SClassDefinition) def)) { AClassInvariantDefinition cid = (AClassInvariantDefinition) d; root = makeAnd(root, cid.getExpression().clone()); } return root; } }
if(node.getExpression() != null && !_visitedNodes.contains(node.getExpression())) mergeReturns(retVal,node.getExpression().apply(this));
if(node.getExpression() != null && !_visitedNodes.contains(node.getExpression())) mergeReturns(retVal,node.getExpression().apply(this, question));
exps.add(invDef.getExpression());
public SatisfiabilityObligation(AClassInvariantDefinition node, IPOContextStack ctxt, IPogAssistantFactory af) throws AnalysisException { super(node, POType.STATE_INV_SAT, ctxt, node.getLocation(), af); AExistsExp exists_exp = new AExistsExp(); exists_exp.setType(new ABooleanBasicType()); List<PMultipleBind> binds = stateInvBinds(node); exists_exp.setBindList(binds); exists_exp.setPredicate(node.getExpression().clone()); stitch = exists_exp; valuetree.setPredicate(ctxt.getPredWithContext(exists_exp)); }
@Override public Value caseAClassInvariantStm(AClassInvariantStm node, Context ctxt) throws AnalysisException { for (PDefinition d : node.getInvDefs()) { AClassInvariantDefinition invdef = (AClassInvariantDefinition) d; try { if (!invdef.getExpression().apply(VdmRuntime.getStatementEvaluator(), ctxt).boolValue(ctxt)) { return new BooleanValue(false); } } catch (ValueException e) { VdmRuntimeError.abort(node.getLocation(), e); } } return new BooleanValue(true); }
@Override public PType caseAClassInvariantDefinition(AClassInvariantDefinition node, TypeCheckInfo question) throws AnalysisException { Environment newEnv = new FlatEnvironment(question.assistantFactory, question.env, true); newEnv.setEnclosingDefinition(node); TypeCheckInfo functional = question.newInfo(newEnv); functional.qualifiers = null; functional.scope = NameScope.NAMESANDSTATE; PType type = node.getExpression().apply(THIS, functional); if (!question.assistantFactory.createPTypeAssistant().isType(type, ABooleanBasicType.class)) { TypeCheckerErrors.report(3013, "Class invariant is not a boolean expression", node.getLocation(), node); } node.setType(type); return node.getType(); }
ValueList values = af.createPExpAssistant().getValues(inv.getExpression(), new ObjectContext(af, node.getLocation(), node.getName().getName() + " object context", initCtxt, object)); for (Value v : values)