@Override public IProofObligationList caseABlockSimpleBlockStm( ABlockSimpleBlockStm node, IPOContextStack question) throws AnalysisException { try { IProofObligationList obligations = aF.createPDefinitionAssistant().getProofObligations(node.getAssignmentDefs(), rootVisitor, question); question.push(new POScopeContext()); obligations.addAll(defaultSSimpleBlockStm(node, question)); question.pop(); return obligations; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
@Override public IProofObligationList caseADefExp(ADefExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = aF.createPDefinitionAssistant().getProofObligations(node.getLocalDefs(), rootVisitor, question); question.push(new PODefContext(node)); obligations.addAll(node.getExpression().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override // See [1] pg. 167 for the definition public IProofObligationList caseAModuleModules(AModuleModules node, IPOContextStack question) throws AnalysisException { IProofObligationList ipol = new ProofObligationList(); for (PDefinition p : node.getDefs()) { question.push(new PONameContext(assistantFactory.createPDefinitionAssistant().getVariableNames(p))); ipol.addAll(p.apply(this, question)); question.pop(); question.clearStateContexts(); } return ipol; }
@Override public IProofObligationList caseAClassClassDefinition( AClassClassDefinition node, IPOContextStack question) throws AnalysisException { try { IProofObligationList proofObligationList = new ProofObligationList(); question.setGenerator(new UniqueNameGenerator(node)); for (PDefinition def : node.getDefinitions()) { question.push(new PONameContext(assistantFactory.createPDefinitionAssistant().getVariableNames(def))); proofObligationList.addAll(def.apply(mainVisitor, question)); question.pop(); question.clearStateContexts(); } return proofObligationList; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
@Override public IProofObligationList caseALetStm(ALetStm node, IPOContextStack question) throws AnalysisException { try { IProofObligationList obligations = new ProofObligationList(); for (PDefinition localDef : node.getLocalDefs()) { // PDefinitionAssistantTC.get question.push(new PONameContext(aF.createPDefinitionAssistant().getVariableNames(localDef))); obligations.addAll(localDef.apply(rootVisitor, question)); question.pop(); } question.push(new POScopeContext()); obligations.addAll(node.getStatement().apply(mainVisitor, question)); question.pop(); return obligations; } catch (Exception e) { throw new POException(node, e.getMessage()); } }
@Override // RWL see [1] pg. public IProofObligationList caseALetDefExp(ALetDefExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); for (PDefinition def : node.getLocalDefs()) { question.push(new PONameContext(aF.createPDefinitionAssistant().getVariableNames(def))); obligations.addAll(def.apply(rootVisitor, question)); question.pop(); } question.push(new POLetDefContext(node)); obligations.addAll(node.getExpression().apply(mainVisitor, question)); question.pop(); return obligations; }
@Override public IProofObligationList caseANarrowExp(ANarrowExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = new ProofObligationList(); PType expected = node.getTypedef() == null ? node.getBasicType() : aF.createPDefinitionAssistant().getType(node.getTypedef()); question.noteType(node.getTest(), expected); if (!aF.getTypeComparator().isSubType(node.getTest().getType(), expected)) { TypeCompatibilityObligation sto = TypeCompatibilityObligation.newInstance(node.getTest(), expected, node.getTest().getType(), question, aF); if (sto != null) { obligations.add(sto); } } obligations.addAll(node.getTest().apply(rootVisitor, question)); return obligations; }