@Override public PStm caseAExplicitOperationDefinition( AExplicitOperationDefinition def, Integer lineno) throws AnalysisException { return af.createPStmAssistant().findStatement(def.getBody(), lineno); }
@Override public SDeclIR caseAThreadDefinition(AThreadDefinition node, IRInfo question) throws AnalysisException { PStm stm = node.getOperationDef().getBody(); SStmIR stmIR = stm.apply(question.getStmVisitor(), question); AThreadDeclIR threaddcl = new AThreadDeclIR(); threaddcl.setStm(stmIR); return threaddcl; }
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()); }
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_"); }
public boolean isSubclassResponsibility(PDefinition d) { while (d instanceof AInheritedDefinition) { AInheritedDefinition aid = (AInheritedDefinition) d; d = aid.getSuperdef(); } if (d instanceof AExplicitOperationDefinition) { AExplicitOperationDefinition op = (AExplicitOperationDefinition) d; return op.getBody() instanceof ASubclassResponsibilityStm; } else if (d instanceof AImplicitOperationDefinition) { AImplicitOperationDefinition op = (AImplicitOperationDefinition) d; return op.getBody() instanceof ASubclassResponsibilityStm; } else if (d instanceof AExplicitFunctionDefinition) { AExplicitFunctionDefinition fn = (AExplicitFunctionDefinition) d; return fn.getBody() instanceof ASubclassResponsibilityExp; } else if (d instanceof AImplicitFunctionDefinition) { AImplicitFunctionDefinition fn = (AImplicitFunctionDefinition) d; return fn.getBody() instanceof ASubclassResponsibilityExp; } return false; }
@Override public void caseAExplicitOperationDefinition( AExplicitOperationDefinition node) throws AnalysisException { if (!proceed(node)) { return; } DefinitionInfo defInfo = new DefinitionInfo(node.getParamDefinitions(), af); openScope(defInfo, node); node.getBody().apply(this); endScope(defInfo); }
@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 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); }
PType actualResult = node.getBody().apply(THIS, new TypeCheckInfo(question.assistantFactory, local, NameScope.NAMESANDSTATE, null, null, expectedResult)); node.setActualResult(actualResult); boolean compatible = question.assistantFactory.getTypeComparator().compatible(expectedResult, node.getActualResult()); && node.getBody() instanceof ASubclassResponsibilityStm) if (!(node.getBody() instanceof ANotYetSpecifiedStm) && !(node.getBody() instanceof ASubclassResponsibilityStm))