@Override public ValueList caseAFieldNumberExp(AFieldNumberExp exp, ObjectContext ctxt) throws AnalysisException { return exp.getTuple().apply(THIS, ctxt); }
@Override public PExp caseAFieldNumberExp(AFieldNumberExp exp, Integer lineno) throws AnalysisException { PExp found = findExpressionBaseCase(exp, lineno); if (found != null) { return found; } return exp.getTuple().apply(THIS, lineno);// PExpAssistantInterpreter.findExpression(exp.getTuple(), lineno); }
public LexNameList caseAFieldNumberExp(AFieldNumberExp expression) throws org.overture.ast.analysis.AnalysisException { return af.createPExpAssistant().getOldNames(expression.getTuple()); }
/** * Called by the {@link AFieldNumberExp} node from {@link AFieldNumberExp#apply(IAnalysis)}. * @param node the calling {@link AFieldNumberExp} node */ public void caseAFieldNumberExp(AFieldNumberExp node) throws AnalysisException { _visitedNodes.add(node); inAFieldNumberExp(node); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getTuple() != null && !_visitedNodes.contains(node.getTuple())) { node.getTuple().apply(this); } if(node.getField() != null ) { node.getField().apply(this); } outAFieldNumberExp(node); }
/** * Called by the {@link AFieldNumberExp} node from {@link AFieldNumberExp#apply(IAnalysis)}. * @param node the calling {@link AFieldNumberExp} node */ public void caseAFieldNumberExp(AFieldNumberExp node, Q question) throws AnalysisException { _visitedNodes.add(node); inAFieldNumberExp(node, question); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this, question); } if(node.getTuple() != null && !_visitedNodes.contains(node.getTuple())) { node.getTuple().apply(this, question); } if(node.getField() != null ) { node.getField().apply(this, question); } outAFieldNumberExp(node, question); }
/** * Called by the {@link AFieldNumberExp} node from {@link AFieldNumberExp#apply(IPOFAnalysis)}. * @param node the calling {@link AFieldNumberExp} node */ public void caseAFieldNumberExp(AFieldNumberExp node) throws AnalysisException { _visitedNodes.add(node); inAFieldNumberExp(node); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getTuple() != null && !_visitedNodes.contains(node.getTuple())) { node.getTuple().apply(this); } if(node.getField() != null ) { node.getField().apply(this); } outAFieldNumberExp(node); }
@Override public IProofObligationList caseAFieldNumberExp(AFieldNumberExp node, IPOContextStack question) throws AnalysisException { IProofObligationList obligations = node.getTuple().apply(mainVisitor, question); PType puType = node.getTuple().getType(); if (aF.createPTypeAssistant().isUnion(puType)) { AUnionType utype = (AUnionType) aF.createPTypeAssistant().getUnion(puType); for (PType t : utype.getTypes()) { if (t instanceof AProductType) { AProductType aprodType = (AProductType) t; if (aprodType.getTypes().size() >= node.getField().getValue()) { // tuple selection is fine. do nothing and check the // next one continue; } } obligations.add(new TupleSelectObligation(node.getTuple(), t, question, aF)); } } return obligations; }
/** * Called by the {@link AFieldNumberExp} node from {@link AFieldNumberExp#apply(IAnalysis)}. * @param node the calling {@link AFieldNumberExp} node */ public A caseAFieldNumberExp(AFieldNumberExp node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inAFieldNumberExp(node)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { mergeReturns(retVal,node.getType().apply(this)); } if(node.getTuple() != null && !_visitedNodes.contains(node.getTuple())) { mergeReturns(retVal,node.getTuple().apply(this)); } if(node.getField() != null ) { mergeReturns(retVal,node.getField().apply(this)); } mergeReturns(retVal,outAFieldNumberExp(node)); return retVal; }
/** * Called by the {@link AFieldNumberExp} node from {@link AFieldNumberExp#apply(IAnalysis)}. * @param node the calling {@link AFieldNumberExp} node */ public A caseAFieldNumberExp(AFieldNumberExp node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inAFieldNumberExp(node, question)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { mergeReturns(retVal,node.getType().apply(this, question)); } if(node.getTuple() != null && !_visitedNodes.contains(node.getTuple())) { mergeReturns(retVal,node.getTuple().apply(this, question)); } if(node.getField() != null ) { mergeReturns(retVal,node.getField().apply(this, question)); } mergeReturns(retVal,outAFieldNumberExp(node, question)); return retVal; }
@Override public SExpIR caseAFieldNumberExp(AFieldNumberExp node, IRInfo question) throws AnalysisException { long fieldCg = node.getField().getValue(); PType type = node.getType(); PExp tuple = node.getTuple(); AFieldNumberExpIR fieldNoExp = new AFieldNumberExpIR(); SExpIR tupleCg = tuple.apply(question.getExpVisitor(), question); STypeIR typeCg = type.apply(question.getTypeVisitor(), question); fieldNoExp.setField(fieldCg); fieldNoExp.setType(typeCg); fieldNoExp.setTuple(tupleCg); return fieldNoExp; }
@Override public PType caseAFieldNumberExp(AFieldNumberExp node, TypeCheckInfo question) throws AnalysisException { PExp tuple = node.getTuple(); question.qualifiers = null; PType type = tuple.apply(THIS, question.newConstraint(null)); node.setType(type); if (!question.assistantFactory.createPTypeAssistant().isProduct(type)) { TypeCheckerErrors.report(3094, "Field '#" + node.getField() + "' applied to non-tuple type", tuple.getLocation(), tuple); node.setType(AstFactory.newAUnknownType(node.getLocation())); return node.getType(); } AProductType product = question.assistantFactory.createPTypeAssistant().getProduct(type); long fn = node.getField().getValue(); if (fn > product.getTypes().size() || fn < 1) { TypeCheckerErrors.report(3095, "Field number does not match tuple size", node.getField().getLocation(), node.getField()); node.setType(AstFactory.newAUnknownType(node.getLocation())); return node.getType(); } node.setType(product.getTypes().get((int) fn - 1)); return node.getType(); }
@Override public Value caseAFieldNumberExp(AFieldNumberExp node, Context ctxt) throws AnalysisException { BreakpointManager.getBreakpoint(node).check(node.getLocation(), ctxt); node.getField().getLocation().hit(); try { ValueList fields = node.getTuple().apply(VdmRuntime.getExpressionEvaluator(), ctxt).tupleValue(ctxt); Value r = fields.get((int) node.getField().getValue() - 1); if (r == null) { VdmRuntimeError.abort(node.getLocation(), 4007, "No such field in tuple: #" + node.getField(), ctxt); } return r; } catch (ValueException e) { return VdmRuntimeError.abort(node.getLocation(), e); } }