@Override public boolean isVDMPP() { return outer == null ? false : outer.isVDMPP(); }
@Override public PType caseANamedTraceDefinition(ANamedTraceDefinition node, TypeCheckInfo question) throws AnalysisException { if (question.env.isVDMPP()) { question = new TypeCheckInfo(question.assistantFactory, new FlatEnvironment(question.assistantFactory, question.assistantFactory.createPDefinitionAssistant().getSelfDefinition(node), question.env), question.scope, question.qualifiers); } for (ATraceDefinitionTerm term : node.getTerms()) { typeCheck(term.getList(), THIS, new TypeCheckInfo(question.assistantFactory, question.env, NameScope.NAMESANDSTATE)); } // Mark node as used, as traces are not used anyway question.assistantFactory.createPDefinitionAssistant().markUsed(node); return null; }
@SuppressWarnings("unchecked") public AExplicitFunctionDefinition getPreDefinition( AExplicitOperationDefinition d, Environment base) { List<List<PPattern>> parameters = new Vector<List<PPattern>>(); List<PPattern> plist = new Vector<PPattern>(); plist.addAll((List<PPattern>) d.getParameterPatterns().clone()); if (d.getState() != null) { plist.add(AstFactory.newAIdentifierPattern(d.getState().getName().clone())); } else if (base.isVDMPP() && !af.createPAccessSpecifierAssistant().isStatic(d.getAccess())) { plist.add(AstFactory.newAIdentifierPattern(d.getName().getSelfName())); } parameters.add(plist); APreOpExp preop = AstFactory.newAPreOpExp(d.getName().clone(), d.getPrecondition(), null, d.getState()); AExplicitFunctionDefinition def = AstFactory.newAExplicitFunctionDefinition(d.getName().getPreName(d.getPrecondition().getLocation()), NameScope.GLOBAL, null, af.createAOperationTypeAssistant().getPreType((AOperationType) d.getType(), d.getState(), d.getClassDefinition(), af.createPAccessSpecifierAssistant().isStatic(d.getAccess())), parameters, preop, null, null, false, null); // Operation precondition functions are effectively not static as // their expression can directly refer to instance variables, even // though at runtime these are passed via a "self" parameter. def.setAccess(af.createPAccessSpecifierAssistant().getStatic(def, false)); def.setClassDefinition(d.getClassDefinition()); return def; }
@SuppressWarnings("unchecked") public AExplicitFunctionDefinition getPreDefinition( AImplicitOperationDefinition d, Environment base) { List<List<PPattern>> parameters = new Vector<List<PPattern>>(); List<PPattern> plist = new Vector<PPattern>(); for (APatternListTypePair pl : (LinkedList<APatternListTypePair>) d.getParameterPatterns()) { plist.addAll((Collection<PPattern>) pl.getPatterns().clone()); } AStateDefinition state = d.getState(); if (state != null) { plist.add(AstFactory.newAIdentifierPattern(state.getName().clone())); } else if (base.isVDMPP() && !af.createPAccessSpecifierAssistant().isStatic(d.getAccess())) { plist.add(AstFactory.newAIdentifierPattern(d.getName().getSelfName())); } parameters.add(plist); PExp preop = AstFactory.newAPreOpExp(d.getName().clone(), d.getPrecondition(), d.getErrors(), d.getState()); AExplicitFunctionDefinition def = AstFactory.newAExplicitFunctionDefinition(d.getName().getPreName(d.getPrecondition().getLocation()), NameScope.GLOBAL, null, af.createAOperationTypeAssistant().getPreType((AOperationType) d.getType(), state, d.getClassDefinition(), af.createPAccessSpecifierAssistant().isStatic(d.getAccess())), parameters, preop, null, null, false, null); // Operation precondition functions are effectively not static as // their expression can directly refer to instance variables, even // though at runtime these are passed via a "self" parameter. def.setAccess(af.createPAccessSpecifierAssistant().getStatic(d, false)); def.setClassDefinition(d.getClassDefinition()); return def; }
} else if (base.isVDMPP())
} else if (base.isVDMPP())
@Override public PType caseAFieldField(AFieldField f, Newquestion question) throws AnalysisException { // Recursion defence done by the type f.setType(af.createPTypeAssistant().typeResolve(f.getType(), question.root, question.rootVisitor, question.question)); if (question.question.env.isVDMPP()) { if (f.getType() instanceof AFunctionType) { f.getTagname().setTypeQualifier(((AFunctionType) f.getType()).getParameters()); } else if (f.getType() instanceof AOperationType) { f.getTagname().setTypeQualifier(((AOperationType) f.getType()).getParameters()); } } return f.getType(); }
@Override public void caseAExplicitOperationDefinition( AExplicitOperationDefinition node, NewQuestion question) throws AnalysisException { node.setType(af.createPTypeAssistant().typeResolve(node.getType(), null, question.rootVisitor, question.question)); if (question.question.env.isVDMPP()) { node.getName().setTypeQualifier(((AOperationType) node.getType()).getParameters()); if (node.getName().getName().equals(node.getClassDefinition().getName().getName())) { node.setIsConstructor(true); node.getClassDefinition().setHasContructors(true); } } if (node.getPrecondition() != null) { node.getPredef().apply(this, question); } if (node.getPostcondition() != null) { node.getPostdef().apply(this, question); } for (PPattern p : node.getParameterPatterns()) { af.createPPatternAssistant().typeResolve(p, question.rootVisitor, question.question); } }
if (question.question.env.isVDMPP())
if (question.question.env.isVDMPP())
if (question.question.env.isVDMPP())
if (question.env.isVDMPP())
if (question.env.isVDMPP())
if (question.env.isVDMPP())
if (base.isVDMPP() && type instanceof ANamedInvariantType)
ILexNameToken name = node.getName(); if (env.isVDMPP())
if (question.env.isVDMPP() && question.assistantFactory.createPTypeAssistant().isClass(root, question.env))