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.getBody() != null && !_visitedNodes.contains(node.getBody())) node.getBody().apply(this, question); if(node.getPrecondition() != null && !_visitedNodes.contains(node.getPrecondition())) node.getPrecondition().apply(this, question); if(node.getPostcondition() != null && !_visitedNodes.contains(node.getPostcondition())) node.getPostcondition().apply(this, question); if(node.getPredef() != null && !_visitedNodes.contains(node.getPredef()))
@Override public PDefinition caseAThreadDefinition(AThreadDefinition node, Newquestion question) throws AnalysisException { return node.getOperationDef().apply(this, question); // PDefinitionAssistantTC.findName(definition.getOperationDef(), // sought, scope); }
@Override public NameValuePairList caseAExplicitOperationDefinition( AExplicitOperationDefinition def, Context initialContext) throws AnalysisException { NameValuePairList nvl = new NameValuePairList(); FunctionValue prefunc = def.getPredef() == null ? null : new FunctionValue(def.getPredef(), null, null, null); FunctionValue postfunc = def.getPostdef() == null ? null : new FunctionValue(def.getPostdef(), null, null, null); OperationValue op = new OperationValue(def, prefunc, postfunc, def.getState(), af); op.isConstructor = def.getIsConstructor(); op.isStatic = af.createPAccessSpecifierAssistant().isStatic(def.getAccess()); nvl.add(new NameValuePair(def.getName(), op)); if (def.getPredef() != null) { prefunc.isStatic = af.createPAccessSpecifierAssistant().isStatic(def.getAccess()); nvl.add(new NameValuePair(def.getPredef().getName(), prefunc)); } if (def.getPostdef() != null) { postfunc.isStatic = af.createPAccessSpecifierAssistant().isStatic(def.getAccess()); nvl.add(new NameValuePair(def.getPostdef().getName(), postfunc)); } return nvl; }
public POOperationDefinitionContext( AExplicitOperationDefinition definition, boolean precond, PDefinition stateDefinition) { this.name = definition.getName(); this.deftype = (AOperationType) definition.getType(); this.addPrecond = precond; this.paramPatternList = cloneList(definition.getParameterPatterns()); this.precondition = definition.getPrecondition(); this.stateDefinition = stateDefinition; this.opDef = definition; }
public static String getExplicitOperationString( AExplicitOperationDefinition d) { return d.getName() + " " + d.getType() + "\n\t" + d.getName() + "(" + Utils.listToString(d.getParameterPatterns()) + ")" + (d.getBody() == null ? "" : " ==\n" + d.getBody()) + (d.getPrecondition() == null ? "" : "\n\tpre " + d.getPrecondition()) + (d.getPostcondition() == null ? "" : "\n\tpost " + d.getPostcondition()); }
protected List<AInstanceVariableDefinition> collectState( AExplicitOperationDefinition node) throws AnalysisException { List<AInstanceVariableDefinition> r = new LinkedList<AInstanceVariableDefinition>(); List<PDefinition> stateDefs; if (node.getClassDefinition() != null) { stateDefs = node.getClassDefinition().getDefinitions(); } else { if (node.getState() != null) { stateDefs = node.getState().getStateDefs(); } else { return r; } } for (PDefinition d : stateDefs) { if (d instanceof AInstanceVariableDefinition) { r.add((AInstanceVariableDefinition) d); } } return r; }
question.assistantFactory.getTypeComparator().checkComposeTypes(node.getType(), question.env, false); List<PType> ptypes = ((AOperationType) node.getType()).getParameters(); if (node.getParameterPatterns().size() > ptypes.size()) TypeCheckerErrors.report(3023, "Too many parameter patterns", node.getLocation(), node); TypeCheckerErrors.detail2("Type params", ptypes.size(), "Patterns", node.getParameterPatterns().size()); return null; } else if (node.getParameterPatterns().size() < ptypes.size()) TypeCheckerErrors.report(3024, "Too few parameter patterns", node.getLocation(), node); TypeCheckerErrors.detail2("Type params", ptypes.size(), "Patterns", node.getParameterPatterns().size()); return null; node.setParamDefinitions(question.assistantFactory.createAExplicitOperationDefinitionAssistant().getParamDefinitions(node)); question.assistantFactory.createPDefinitionListAssistant().typeCheck(node.getParamDefinitions(), THIS, new TypeCheckInfo(question.assistantFactory, question.env, NameScope.NAMESANDSTATE, question.qualifiers)); FlatCheckedEnvironment local = new FlatCheckedEnvironment(question.assistantFactory, node.getParamDefinitions(), question.env, NameScope.NAMESANDSTATE); local.setStatic(question.assistantFactory.createPAccessSpecifierAssistant().isStatic(node.getAccess())); local.setEnclosingDefinition(node); local.setFunctional(false); if (!question.assistantFactory.createPAccessSpecifierAssistant().isStatic(node.getAccess())) if (node.getIsConstructor()) if (question.assistantFactory.createPAccessSpecifierAssistant().isAsync(node.getAccess()) || question.assistantFactory.createPAccessSpecifierAssistant().isStatic(node.getAccess()) || node.getAccess().getPure())
@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); } }
plist.addAll((List<PPattern>) d.getParameterPatterns().clone()); if (!(((AOperationType) d.getType()).getResult() instanceof AVoidType)) LexNameToken result = new LexNameToken(d.getName().getModule(), "RESULT", d.getLocation()); plist.add(AstFactory.newAIdentifierPattern(result)); AStateDefinition state = d.getState(); plist.add(AstFactory.newAIdentifierPattern(d.getName().getSelfName().getOldName())); if (!af.createPAccessSpecifierAssistant().isStatic(d.getAccess())) plist.add(AstFactory.newAIdentifierPattern(d.getName().getSelfName())); APostOpExp postop = AstFactory.newAPostOpExp(d.getName().clone(), d.getPrecondition(), d.getPostcondition(), null, d.getState()); AExplicitFunctionDefinition def = AstFactory.newAExplicitFunctionDefinition(d.getName().getPostName(d.getPostcondition().getLocation()), NameScope.GLOBAL, null, af.createAOperationTypeAssistant().getPostType((AOperationType) d.getType(), state, d.getClassDefinition(), af.createPAccessSpecifierAssistant().isStatic(d.getAccess())), parameters, postop, null, null, false, null); def.setClassDefinition(d.getClassDefinition()); return def;
@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; }
if (node.getBody() instanceof ANotYetSpecifiedStm) if (node.getPrecondition() == null) AOperationType otype = (AOperationType) node.getType(); Iterator<PType> typeIter = otype.getParameters().iterator(); boolean alwaysMatches = true; PatternAlwaysMatchesVisitor amVisitor = new PatternAlwaysMatchesVisitor(); for (PPattern p : node.getParameterPatterns()) if (node.getPrecondition() != null) obligations.addAll(node.getPrecondition().apply(rootVisitor, question)); obligations.addAll(node.getBody().apply(rootVisitor, question)); if (node.getIsConstructor() && node.getClassDefinition() != null && node.getClassDefinition().getInvariant() != null) if (!node.getIsConstructor() && !assistantFactory.getTypeComparator().isSubType(node.getActualResult(), ((AOperationType) node.getType()).getResult())) TypeCompatibilityObligation sto = TypeCompatibilityObligation.newInstance(node, node.getActualResult(), question, assistantFactory); if (sto != null) if (node.getPostcondition() != null) obligations.addAll(node.getPostcondition().apply(rootVisitor, question));
private OperationValue(AExplicitOperationDefinition def, FunctionValue precondition, FunctionValue postcondition, AStateDefinition state, boolean async) { this.expldef = def; this.impldef = null; this.name = def.getName(); this.type = (AOperationType) def.getType(); this.paramPatterns = def.getParameterPatterns(); this.body = def.getBody(); this.precondition = precondition; this.postcondition = postcondition; this.state = state; this.classdef = def.getClassDefinition(); this.isAsync = async; traceRT = Settings.dialect == Dialect.VDM_RT && classdef != null && !(classdef instanceof ASystemClassDefinition) && !classdef.getName().getName().equals("CPU") && !classdef.getName().getName().equals("BUS") && !name.getName().equals("thread") && !name.getName().startsWith("inv_"); }
|| !ctor.getName().getModule().equals(instance.type.getName().getLocation().getModule()) && ctor.getParamDefinitions().isEmpty() || !ClassInterpreter.getInstance().getAssistantFactory().createPAccessSpecifierAssistant().isPublic(ctor.getAccess())) if (((AOperationType) ctor.getType()).getParameters().size() == 1)
@Override public LexNameSet caseAExplicitOperationDefinition(AExplicitOperationDefinition node, FreeVarInfo info) throws AnalysisException { List<PDefinition> defs = new Vector<PDefinition>(); if (node.getParamDefinitions() != null) { defs.addAll(node.getParamDefinitions()); } FreeVarInfo local = info.set(new FlatEnvironment(af, defs, info.env)); LexNameSet names = node.getBody().apply(this, local); if (node.getPredef() != null) { names.addAll(node.getPredef().apply(this, local)); } if (node.getPostdef() != null) { names.addAll(node.getPostdef().apply(this, local)); } return names; }
@Override public void caseAExplicitOperationDefinition( AExplicitOperationDefinition node, Environment question) throws AnalysisException { node.setState(findStateDefinition(question, node)); if (node.getPrecondition() != null) { node.setPredef(af.createAExplicitOperationDefinitionAssistant().getPreDefinition(node, question)); af.createPDefinitionAssistant().markUsed(node.getPredef()); // ORIGINAL CODE } if (node.getPostcondition() != null) { node.setPostdef(af.createAExplicitOperationDefinitionAssistant().getPostDefinition(node, question)); af.createPDefinitionAssistant().markUsed(node.getPostdef()); } }
public List<? extends PDefinition> getParamDefinitions( AExplicitOperationDefinition node) { List<PDefinition> defs = new Vector<PDefinition>(); Iterator<PType> titer = ((AOperationType) node.getType()).getParameters().iterator(); for (PPattern p : node.getParameterPatterns()) { defs.addAll(af.createPPatternAssistant().getDefinitions(p, titer.next(), NameScope.LOCAL)); } return af.createPDefinitionAssistant().checkDuplicatePatterns(node, defs); }
if (op.getName().getName().equals(IRConstants.TEST_CASE_RUN_FULL_SUITE) && op.getParameterPatterns().isEmpty())
@Override public PExp caseAExplicitOperationDefinition( AExplicitOperationDefinition def, Integer lineno) throws AnalysisException { if (def.getPredef() != null) { PExp found = def.getPredef().apply(THIS, lineno); if (found != null) { return found; } } if (def.getPostdef() != null) { PExp found = def.getPostdef().apply(THIS, lineno); if (found != null) { return found; } } return af.createPStmAssistant().findExpression(def.getBody(), lineno); }
private TypeCompatibilityObligation(AExplicitOperationDefinition def, PType actualResult, IPOContextStack ctxt, IPogAssistantFactory assistantFactory) throws AnalysisException { super(def, POType.TYPE_COMP, ctxt, def.getLocation(), assistantFactory); this.assistantFactory = assistantFactory; AVariableExp result = AstFactory.newAVariableExp(new LexNameToken(def.getName().getModule(), "RESULT", def.getLocation())); stitch = oneType(false, result, ((AOperationType) def.getType()).getResult().clone(), actualResult.clone()); valuetree.setPredicate(ctxt.getPredWithContext(stitch)); }