/** * 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); }
public StateInvariantObligation(AClassInvariantDefinition def, IPOContextStack ctxt, IPogAssistantFactory af) throws AnalysisException { super(def, POType.STATE_INV_INIT, ctxt, def.getLocation(), af); assistantFactory = af; // After instance variable initializers stitch = invDefs(def.getClassDefinition()); valuetree.setPredicate(ctxt.getPredWithContext(stitch)); }
@Override public List<PExp> caseAClassInvariantDefinition( AClassInvariantDefinition node) throws AnalysisException { List<PExp> r = new LinkedList<PExp>(); r.add(node.getExpression()); return r; } }
@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(); }
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 LexNameList caseAClassInvariantDefinition( AClassInvariantDefinition node) throws AnalysisException { return new LexNameList(node.getName()); }
protected List<PMultipleBind> stateInvBinds(AClassInvariantDefinition node) { List<PMultipleBind> binds = new LinkedList<PMultipleBind>(); for (PDefinition p : node.getClassDefinition().getDefinitions()) { if (p instanceof AInstanceVariableDefinition) { binds.add(getMultipleTypeBind(p.getType().clone(), p.getName().clone())); } } return binds; }
@Override public PType caseAClassInvariantDefinition(AClassInvariantDefinition node) throws AnalysisException { return AstFactory.newABooleanBasicType(node.getLocation()); }
/************************* Definitions ***************************/ @Override public LexNameSet caseAClassInvariantDefinition(AClassInvariantDefinition node, FreeVarInfo info) throws AnalysisException { return node.getExpression().apply(this, info); }
if (!node.getClassDefinition().getHasContructors()) for (PDefinition pdef : node.getClassDefinition().getDefinitions())
/** * 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); }
@Override public PExp caseAClassInvariantDefinition(AClassInvariantDefinition def, Integer lineno) throws AnalysisException { return af.createPExpAssistant().findExpression(def.getExpression(), lineno); }
/** * 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(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; }
mergeReturns(retVal,inAClassInvariantDefinition(node)); if(node.getName() != null ) mergeReturns(retVal,node.getName().apply(this)); if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) mergeReturns(retVal,node.getClassDefinition().apply(this)); if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) mergeReturns(retVal,node.getAccess().apply(this)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) mergeReturns(retVal,node.getType().apply(this)); if(node.getExpression() != null && !_visitedNodes.contains(node.getExpression())) mergeReturns(retVal,node.getExpression().apply(this));
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; } }
mergeReturns(retVal,inAClassInvariantDefinition(node, question)); if(node.getName() != null ) mergeReturns(retVal,node.getName().apply(this, question)); if(node.getClassDefinition() != null && !_visitedNodes.contains(node.getClassDefinition())) mergeReturns(retVal,node.getClassDefinition().apply(this, question)); if(node.getAccess() != null && !_visitedNodes.contains(node.getAccess())) mergeReturns(retVal,node.getAccess().apply(this, question)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) mergeReturns(retVal,node.getType().apply(this, question)); if(node.getExpression() != null && !_visitedNodes.contains(node.getExpression())) mergeReturns(retVal,node.getExpression().apply(this, question));
exps.add(invDef.getExpression());
@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); }
ValueList values = af.createPExpAssistant().getValues(inv.getExpression(), new ObjectContext(af, node.getLocation(), node.getName().getName() + " object context", initCtxt, object)); for (Value v : values)