/** * Called by the {@link AFieldStateDesignator} node from {@link AFieldStateDesignator#apply(IAnalysis)}. * @param node the calling {@link AFieldStateDesignator} node */ public void caseAFieldStateDesignator(AFieldStateDesignator node) throws AnalysisException { _visitedNodes.add(node); inAFieldStateDesignator(node); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { node.getObject().apply(this); } if(node.getField() != null ) { node.getField().apply(this); } if(node.getObjectfield() != null ) { node.getObjectfield().apply(this); } outAFieldStateDesignator(node); }
/** * Creates a new complete constructor {@code AFieldStateDesignator} 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 PStateDesignator} node for the {@code object} child of this {@link AFieldStateDesignator} node * @param field_ the {@link ILexIdentifierToken} node for the {@code field} child of this {@link AFieldStateDesignator} node * @param objectfield_ the {@link ILexNameToken} <b>graph</a> node for the {@code objectfield} child of this {@link AFieldStateDesignator} node. * <i>The parent of this {@code objectfield } will not be changed by adding it to this node.</i> */ public AFieldStateDesignator(ILexLocation location_, PType type_, PStateDesignator object_, ILexIdentifierToken field_, ILexNameToken objectfield_) { super(location_,type_); this.setObject(object_); this.setField(field_); this.setObjectfield(objectfield_); }
PType type = node.getObject().apply(THIS, question); PTypeSet result = new PTypeSet(question.assistantFactory); boolean unique = !question.assistantFactory.createPTypeAssistant().isUnion(type); ILexIdentifierToken field = node.getField(); + field + "'", node.getLocation(), field); result.add(AstFactory.newAUnknownType(field.getLocation())); } else String cname = ctype.getName().getName(); node.setObjectfield(new LexNameToken(cname, field.getName(), node.getObject().getLocation())); PDefinition fdef = question.assistantFactory.createPDefinitionAssistant().findName(ctype.getClassdef(), node.getObjectfield(), NameScope.STATE); result.add(AstFactory.newAUnknownType(node.getLocation())); result.add(AstFactory.newAUnknownType(node.getLocation())); TypeCheckerErrors.report(3245, "Field assignment is not of a record or object type", node.getLocation(), node); TypeCheckerErrors.detail2("Expression", node.getObject(), "Type", type); node.setType(AstFactory.newAUnknownType(field.getLocation())); return node.getType(); node.setType(result.getType(node.getLocation())); return node.getType();
result = node.getObject().apply(VdmRuntime.getStatementEvaluator(), ctxt).deref(); if (result instanceof ObjectValue && node.getObjectfield() != null) Value rv = ov.get(node.getObjectfield(), false); VdmRuntimeError.abort(node.getLocation(), 4045, "Object does not contain value for field: " + node.getField(), ctxt); result = rec.fieldmap.get(node.getField().getName()); VdmRuntimeError.abort(node.getField().getLocation(), 4037, "No such field: " + node.getField(), ctxt); VdmRuntimeError.abort(node.getLocation(), e);
@Override public SStateDesignatorIR caseAFieldStateDesignator( AFieldStateDesignator node, IRInfo question) throws AnalysisException { PType type = node.getType(); PStateDesignator stateDesignator = node.getObject(); String fieldName = node.getField().getName(); STypeIR typeCg = type.apply(question.getTypeVisitor(), question); SStateDesignatorIR stateDesignatorCg = stateDesignator.apply(question.getStateDesignatorVisitor(), question); AFieldStateDesignatorIR field = new AFieldStateDesignatorIR(); field.setType(typeCg); field.setObject(stateDesignatorCg); field.setField(fieldName); return field; }
/** * Called by the {@link AFieldStateDesignator} node from {@link AFieldStateDesignator#apply(IAnalysis)}. * @param node the calling {@link AFieldStateDesignator} node */ public void caseAFieldStateDesignator(AFieldStateDesignator node, Q question) throws AnalysisException { _visitedNodes.add(node); inAFieldStateDesignator(node, question); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this, question); } if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { node.getObject().apply(this, question); } if(node.getField() != null ) { node.getField().apply(this, question); } if(node.getObjectfield() != null ) { node.getObjectfield().apply(this, question); } outAFieldStateDesignator(node, question); }
/** * Called by the {@link AFieldStateDesignator} node from {@link AFieldStateDesignator#apply(IPOFAnalysis)}. * @param node the calling {@link AFieldStateDesignator} node */ public void caseAFieldStateDesignator(AFieldStateDesignator node) throws AnalysisException { _visitedNodes.add(node); inAFieldStateDesignator(node); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { node.getObject().apply(this); } if(node.getField() != null ) { node.getField().apply(this); } if(node.getObjectfield() != null ) { node.getObjectfield().apply(this); } outAFieldStateDesignator(node); }
/** * Called by the {@link AFieldStateDesignator} node from {@link AFieldStateDesignator#apply(IAnalysis)}. * @param node the calling {@link AFieldStateDesignator} node */ public A caseAFieldStateDesignator(AFieldStateDesignator node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inAFieldStateDesignator(node, question)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { mergeReturns(retVal,node.getType().apply(this, question)); } if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { mergeReturns(retVal,node.getObject().apply(this, question)); } if(node.getField() != null ) { mergeReturns(retVal,node.getField().apply(this, question)); } if(node.getObjectfield() != null ) { mergeReturns(retVal,node.getObjectfield().apply(this, question)); } mergeReturns(retVal,outAFieldStateDesignator(node, question)); return retVal; }
/** * Called by the {@link AFieldStateDesignator} node from {@link AFieldStateDesignator#apply(IAnalysis)}. * @param node the calling {@link AFieldStateDesignator} node */ public A caseAFieldStateDesignator(AFieldStateDesignator node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inAFieldStateDesignator(node)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { mergeReturns(retVal,node.getType().apply(this)); } if(node.getObject() != null && !_visitedNodes.contains(node.getObject())) { mergeReturns(retVal,node.getObject().apply(this)); } if(node.getField() != null ) { mergeReturns(retVal,node.getField().apply(this)); } if(node.getObjectfield() != null ) { mergeReturns(retVal,node.getObjectfield().apply(this)); } mergeReturns(retVal,outAFieldStateDesignator(node)); return retVal; }
@Override public PExp caseAFieldStateDesignator(AFieldStateDesignator node) throws AnalysisException { // pack this with the output of the visitor recursive calls. PExp value = node.getObject().apply(this); AFieldExp fieldExp = new AFieldExp(); fieldExp.setObject(value.clone()); fieldExp.setField(node.getField().clone()); // Not 100% sure these 2 match fieldExp.setMemberName(node.getObjectfield().clone()); fieldExp.setType(node.getType().clone()); return fieldExp; }