/** * 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); }
/** * 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 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 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 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; }