/** * Called by the {@link ASeqSeqTypeIR} node from {@link ASeqSeqTypeIR#apply(IAnalysis)}. * @param node the calling {@link ASeqSeqTypeIR} node */ public void caseASeqSeqTypeIR(ASeqSeqTypeIR node) throws AnalysisException { _visitedNodes.add(node); inASeqSeqTypeIR(node); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { node.getNamedInvType().apply(this); } if(node.getSeqOf() != null && !_visitedNodes.contains(node.getSeqOf())) { node.getSeqOf().apply(this); } outASeqSeqTypeIR(node); }
@Override public void caseAForAllStmIR(AForAllStmIR node) throws AnalysisException { if (node.getExp().getType() instanceof AStringTypeIR) { ASeqSeqTypeIR seqType = new ASeqSeqTypeIR(); seqType.setEmpty(false); seqType.setSeq1(false); seqType.setOptional(false); seqType.setSeqOf(new ACharBasicTypeIR()); correctExpToSeq(node.getExp(), seqType); } node.getBody().apply(this); }
/** * Returns a deep clone of this {@link ASeqSeqTypeIR} node. * @return a deep clone of this {@link ASeqSeqTypeIR} node */ public ASeqSeqTypeIR clone() { return new ASeqSeqTypeIR( _sourceNode, _tag, _metaData, _optional, cloneNode(_namedInvType), _empty, _seq1, cloneNode(_seqOf) ); }
public SSeqTypeIR getSeqType(AUnionTypeIR unionType) { AUnionTypeIR seqOf = new AUnionTypeIR(); seqOf.setTypes(findElementTypes(unionType, new CollectionTypeStrategy() { @Override public boolean isCollectionType(STypeIR type) { return type instanceof SSeqTypeIR; } @Override public STypeIR getElementType(STypeIR type) { return ((SSeqTypeIR) type).getSeqOf(); } })); ASeqSeqTypeIR seqType = new ASeqSeqTypeIR(); seqType.setEmpty(false); seqType.setSeqOf(seqOf); return seqType; }
@Override public Boolean caseASeqSeqTypeIR(ASeqSeqTypeIR node) throws AnalysisException { return node.getSeqOf().apply(new IsCharTypeVisitor()); } }
} else ASeqSeqTypeIR seqType = new ASeqSeqTypeIR(); seqType.setEmpty(false); seqType.setSeqOf(new ACharBasicTypeIR());
public STypeIR getElementType(STypeIR t) { STypeIR elementType; if (t instanceof ASetSetTypeIR) { elementType = ((ASetSetTypeIR) t).getSetOf().clone(); } else if (t instanceof ASeqSeqTypeIR) { elementType = ((ASeqSeqTypeIR) t).getSeqOf().clone(); } else { String vdmNodeInfo = info.getLocationAssistant().consVdmNodeInfoStr(t); log.error("Expected set or sequence type. Got: " + t.getClass().getName() + "." + vdmNodeInfo); elementType = new AUnknownTypeIR(); elementType.setSourceNode(t.getSourceNode()); } return elementType; }
/** * Called by the {@link ASeqSeqTypeIR} node from {@link ASeqSeqTypeIR#apply(IIsaAnalysis)}. * @param node the calling {@link ASeqSeqTypeIR} node */ public void caseASeqSeqTypeIR(ASeqSeqTypeIR node) throws AnalysisException { _visitedNodes.add(node); inASeqSeqTypeIR(node); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { node.getNamedInvType().apply(this); } if(node.getSeqOf() != null && !_visitedNodes.contains(node.getSeqOf())) { node.getSeqOf().apply(this); } outASeqSeqTypeIR(node); }
public STypeIR constructSeqType(SSeqTypeBase node, IRInfo question) throws AnalysisException { STypeIR seqOfCg = node.getSeqof().apply(question.getTypeVisitor(), question); boolean emptyCg = node.getEmpty(); boolean isSeq1 = node instanceof ASeq1SeqType; // This is a special case since sequence of characters are strings if (seqOfCg instanceof ACharBasicTypeIR && question.getSettings().getCharSeqAsString()) { AStringTypeIR stringTypeCg = new AStringTypeIR(); stringTypeCg.setSourceNode(new SourceNode(node)); return stringTypeCg; } ASeqSeqTypeIR seqType = new ASeqSeqTypeIR(); seqType.setSeqOf(seqOfCg); seqType.setEmpty(emptyCg); seqType.setSeq1(isSeq1); return seqType; }
} else ASeqSeqTypeIR seqTypeCg = new ASeqSeqTypeIR(); seqTypeCg.setEmpty(false); seqTypeCg.setSeqOf(new ACharBasicTypeIR()); strType = seqTypeCg;
if (seqType.getSeqOf() instanceof AUnknownTypeIR)
/** * Creates a deep clone of this {@link ASeqSeqTypeIR} node while putting all * old node-new node relations in the map {@code oldToNewMap}. * @param oldToNewMap the map filled with the old node-new node relation * @return a deep clone of this {@link ASeqSeqTypeIR} node */ public ASeqSeqTypeIR clone(Map<INode,INode> oldToNewMap) { ASeqSeqTypeIR node = new ASeqSeqTypeIR( _sourceNode, _tag, _metaData, _optional, cloneNode(_namedInvType, oldToNewMap), _empty, _seq1, cloneNode(_seqOf, oldToNewMap) ); oldToNewMap.put(this, node); return node; }
/** * Called by the {@link ASeqSeqTypeIR} node from {@link ASeqSeqTypeIR#apply(IAnalysis)}. * @param node the calling {@link ASeqSeqTypeIR} node */ public void caseASeqSeqTypeIR(ASeqSeqTypeIR node, Q question) throws AnalysisException { _visitedNodes.add(node); inASeqSeqTypeIR(node, question); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { node.getNamedInvType().apply(this, question); } if(node.getSeqOf() != null && !_visitedNodes.contains(node.getSeqOf())) { node.getSeqOf().apply(this, question); } outASeqSeqTypeIR(node, question); }
} else ASeqSeqTypeIR seqType = new ASeqSeqTypeIR(); seqType.setEmpty(false); seqType.setSeqOf(new ACharBasicTypeIR());
/** * Called by the {@link ASeqSeqTypeIR} node from {@link ASeqSeqTypeIR#apply(IAnalysis)}. * @param node the calling {@link ASeqSeqTypeIR} node */ public A caseASeqSeqTypeIR(ASeqSeqTypeIR node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inASeqSeqTypeIR(node)); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { mergeReturns(retVal,node.getNamedInvType().apply(this)); } if(node.getSeqOf() != null && !_visitedNodes.contains(node.getSeqOf())) { mergeReturns(retVal,node.getSeqOf().apply(this)); } mergeReturns(retVal,outASeqSeqTypeIR(node)); return retVal; }
/** * Called by the {@link ASeqSeqTypeIR} node from {@link ASeqSeqTypeIR#apply(IAnalysis)}. * @param node the calling {@link ASeqSeqTypeIR} node */ public A caseASeqSeqTypeIR(ASeqSeqTypeIR node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inASeqSeqTypeIR(node, question)); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { mergeReturns(retVal,node.getNamedInvType().apply(this, question)); } if(node.getSeqOf() != null && !_visitedNodes.contains(node.getSeqOf())) { mergeReturns(retVal,node.getSeqOf().apply(this, question)); } mergeReturns(retVal,outASeqSeqTypeIR(node, question)); return retVal; }