/** * Called by the {@link AFieldObjectDesignator} node from {@link AFieldObjectDesignator#apply(IPOFAnalysis)}. * @param node the calling {@link AFieldObjectDesignator} node */ public void caseAFieldObjectDesignator(AFieldObjectDesignator node) throws AnalysisException { _visitedNodes.add(node); inAFieldObjectDesignator(node); if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { node.getObject().apply(this); } if(node.getClassName() != null ) { node.getClassName().apply(this); } if(node.getFieldName() != null ) { node.getFieldName().apply(this); } if(node.getField() != null ) { node.getField().apply(this); } outAFieldObjectDesignator(node); }
/** * Creates a new complete constructor {@code AFieldObjectDesignator} node with the given nodes as children. * @deprecated This method should not be used, use AstFactory instead. * The basic child nodes are removed from their previous parents. * @param object_ the {@link PObjectDesignator} node for the {@code object} child of this {@link AFieldObjectDesignator} node * @param className_ the {@link ILexNameToken} node for the {@code className} child of this {@link AFieldObjectDesignator} node * @param fieldName_ the {@link ILexIdentifierToken} node for the {@code fieldName} child of this {@link AFieldObjectDesignator} node * @param field_ the {@link ILexNameToken} <b>graph</a> node for the {@code field} child of this {@link AFieldObjectDesignator} node. * <i>The parent of this {@code field } will not be changed by adding it to this node.</i> */ public AFieldObjectDesignator(ILexLocation location_, PObjectDesignator object_, ILexNameToken className_, ILexIdentifierToken fieldName_, ILexNameToken field_) { super(location_); this.setObject(object_); this.setClassName(className_); this.setFieldName(fieldName_); this.setField(field_); }
@Override public SObjectDesignatorIR caseAFieldObjectDesignator( AFieldObjectDesignator node, IRInfo question) throws AnalysisException { PObjectDesignator obj = node.getObject(); String fieldCg = null; String fieldModuleCg = null; if (node.getField() != null) { fieldCg = node.getField().getName(); fieldModuleCg = node.getField().getModule(); } else { fieldCg = node.getFieldName() != null ? node.getFieldName().getName() : null; } SObjectDesignatorIR objCg = obj.apply(question.getObjectDesignatorVisitor(), question); AFieldObjectDesignatorIR fieldObjDesignator = new AFieldObjectDesignatorIR(); fieldObjDesignator.setFieldName(fieldCg); fieldObjDesignator.setFieldModule(fieldModuleCg); fieldObjDesignator.setObject(objCg); return fieldObjDesignator; }
if (ofd.getClassName() != null) return AstFactory.newACallObjectStm(ofd.getObject(), ofd.getClassName(), args); } else return AstFactory.newACallObjectStm(ofd.getObject(), (LexIdentifierToken) ofd.getFieldName().clone(), args);
/** * Called by the {@link AFieldObjectDesignator} node from {@link AFieldObjectDesignator#apply(IAnalysis)}. * @param node the calling {@link AFieldObjectDesignator} node */ public void caseAFieldObjectDesignator(AFieldObjectDesignator node) throws AnalysisException { _visitedNodes.add(node); inAFieldObjectDesignator(node); if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { node.getObject().apply(this); } if(node.getClassName() != null ) { node.getClassName().apply(this); } if(node.getFieldName() != null ) { node.getFieldName().apply(this); } if(node.getField() != null ) { node.getField().apply(this); } outAFieldObjectDesignator(node); }
/** * Called by the {@link AFieldObjectDesignator} node from {@link AFieldObjectDesignator#apply(IAnalysis)}. * @param node the calling {@link AFieldObjectDesignator} node */ public void caseAFieldObjectDesignator(AFieldObjectDesignator node, Q question) throws AnalysisException { _visitedNodes.add(node); inAFieldObjectDesignator(node, question); if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { node.getObject().apply(this, question); } if(node.getClassName() != null ) { node.getClassName().apply(this, question); } if(node.getFieldName() != null ) { node.getFieldName().apply(this, question); } if(node.getField() != null ) { node.getField().apply(this, question); } outAFieldObjectDesignator(node, question); }
Value val = node.getObject().apply(VdmRuntime.getStatementEvaluator(), ctxt).deref(); if (val instanceof ObjectValue && node.getField() != null) Value rv = ov.get(node.getField(), node.getClassName() != null); VdmRuntimeError.abort(node.getLocation(), 4045, "Object does not contain value for field: " + node.getField(), ctxt); Value result = rec.fieldmap.get(node.getFieldName().getName()); VdmRuntimeError.abort(node.getLocation(), 4046, "No such field: " + node.getFieldName(), ctxt); } else return VdmRuntimeError.abort(node.getLocation(), 4020, "State value is neither a record nor an object", ctxt); return VdmRuntimeError.abort(node.getLocation(), e);
/** * Called by the {@link AFieldObjectDesignator} node from {@link AFieldObjectDesignator#apply(IAnalysis)}. * @param node the calling {@link AFieldObjectDesignator} node */ public A caseAFieldObjectDesignator(AFieldObjectDesignator node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inAFieldObjectDesignator(node, question)); if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { mergeReturns(retVal,node.getObject().apply(this, question)); } if(node.getClassName() != null ) { mergeReturns(retVal,node.getClassName().apply(this, question)); } if(node.getFieldName() != null ) { mergeReturns(retVal,node.getFieldName().apply(this, question)); } if(node.getField() != null ) { mergeReturns(retVal,node.getField().apply(this, question)); } mergeReturns(retVal,outAFieldObjectDesignator(node, question)); return retVal; }
/** * Called by the {@link AFieldObjectDesignator} node from {@link AFieldObjectDesignator#apply(IAnalysis)}. * @param node the calling {@link AFieldObjectDesignator} node */ public A caseAFieldObjectDesignator(AFieldObjectDesignator node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inAFieldObjectDesignator(node)); if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { mergeReturns(retVal,node.getObject().apply(this)); } if(node.getClassName() != null ) { mergeReturns(retVal,node.getClassName().apply(this)); } if(node.getFieldName() != null ) { mergeReturns(retVal,node.getFieldName().apply(this)); } if(node.getField() != null ) { mergeReturns(retVal,node.getField().apply(this)); } mergeReturns(retVal,outAFieldObjectDesignator(node)); return retVal; }
PType type = node.getObject().apply(THIS, new TypeCheckInfo(question.assistantFactory, question.env, null, question.qualifiers)); PTypeSet result = new PTypeSet(question.assistantFactory); boolean unique = !question.assistantFactory.createPTypeAssistant().isUnion(type); if (node.getClassName() == null) node.setField(new LexNameToken(ctype.getName().getName(), node.getFieldName().getName(), node.getFieldName().getLocation())); } else node.setField(node.getClassName()); ILexNameToken field = node.getField(); field.setTypeQualifier(question.qualifiers); PDefinition fdef = question.assistantFactory.createPDefinitionAssistant().findName(ctype.getClassdef(), field, NameScope.NAMESANDSTATE); + field + "'", node.getLocation(), node); result.add(AstFactory.newAUnknownType(node.getLocation())); + field + "'", node.getLocation(), node); result.add(AstFactory.newAUnknownType(node.getLocation())); String sname = node.getFieldName() != null ? node.getFieldName().getName() : node.getClassName().toString(); ARecordInvariantType rec = question.assistantFactory.createPTypeAssistant().getRecord(type); AFieldField rf = question.assistantFactory.createARecordInvariantTypeAssistant().findField(rec, sname); + sname + "'", node.getLocation(), node); result.add(AstFactory.newAUnknownType(node.getLocation())); } else