@Override public List<AIdentifierPattern> caseATuplePattern(ATuplePattern pattern) throws AnalysisException { List<AIdentifierPattern> list = new Vector<AIdentifierPattern>(); for (PPattern p : pattern.getPlist()) { list.addAll(p.apply(THIS)); } return list; }
/** * Returns a deep clone of this {@link ATuplePattern} node. * @return a deep clone of this {@link ATuplePattern} node */ public ATuplePattern clone() { return new ATuplePattern( _location, cloneList(_definitions), _resolved, cloneList(_plist) ); }
public static ATuplePattern newATuplePattern(ILexLocation location, List<PPattern> list) { ATuplePattern result = new ATuplePattern(); initPattern(result, location); result.setPlist(list); return result; }
@Override public void caseATuplePattern(ATuplePattern pattern) throws AnalysisException { af.createPPatternListAssistant().unResolve(pattern.getPlist()); pattern.setResolved(false); }
/** * Called by the {@link ATuplePattern} node from {@link ATuplePattern#apply(IAnalysis)}. * @param node the calling {@link ATuplePattern} node */ public void caseATuplePattern(ATuplePattern node) throws AnalysisException { _visitedNodes.add(node); inATuplePattern(node); { List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } outATuplePattern(node); }
@Override public List<PDefinition> caseATuplePattern(ATuplePattern pattern, NewQuestion question) throws AnalysisException { List<PDefinition> defs = new Vector<PDefinition>(); if (!af.createPTypeAssistant().isProduct(question.ptype, pattern.getPlist().size())) { TypeCheckerErrors.report(3205, "Matching expression is not a product of cardinality " + pattern.getPlist().size(), pattern.getLocation(), pattern); TypeCheckerErrors.detail("Actual", question.ptype); return defs; } AProductType product = af.createPTypeAssistant().getProduct(question.ptype, pattern.getPlist().size()); Iterator<PType> ti = product.getTypes().iterator(); for (PPattern p : pattern.getPlist()) { defs.addAll(af.createPPatternAssistant().getDefinitions(p, ti.next(), question.scope)); } return defs; }
@Override public void caseATuplePattern(ATuplePattern pattern, NewQuestion question) throws AnalysisException { if (pattern.getResolved()) { return; } else { pattern.setResolved(true); } try { af.createPPatternListAssistant().typeResolve(pattern.getPlist(), question.rootVisitor, question.question); } catch (TypeCheckException e) { af.createPPatternAssistant().unResolve(pattern); throw e; } }
/** * Called by the {@link ATuplePattern} node from {@link ATuplePattern#apply(IAnalysis)}. * @param node the calling {@link ATuplePattern} node */ public void caseATuplePattern(ATuplePattern node, Q question) throws AnalysisException { _visitedNodes.add(node); inATuplePattern(node, question); { List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this, question); } } } { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this, question); } } } outATuplePattern(node, question); }
@Override public PType caseATuplePattern(ATuplePattern pattern) throws AnalysisException { PTypeList list = new PTypeList(); for (PPattern p : pattern.getPlist()) { list.add(af.createPPatternAssistant().getPossibleType(p)); } return list.getType(pattern.getLocation()); }
@Override public Boolean caseATuplePattern(ATuplePattern node) throws AnalysisException { return alwaysMatches(node.getPlist()); }
/** * Called by the {@link ATuplePattern} node from {@link ATuplePattern#apply(IPOFAnalysis)}. * @param node the calling {@link ATuplePattern} node */ public void caseATuplePattern(ATuplePattern node) throws AnalysisException { _visitedNodes.add(node); inATuplePattern(node); { List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } { List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } outATuplePattern(node); }
} catch (ValueException e) VdmRuntimeError.patternFail(e, pattern.getLocation()); if (values.size() != pattern.getPlist().size()) VdmRuntimeError.patternFail(4123, "Tuple expression does not match pattern", pattern.getLocation()); int psize = pattern.getPlist().size(); int[] counts = new int[psize]; int i = 0; for (PPattern p : pattern.getPlist()) VdmRuntimeError.patternFail(4124, "Values do not match tuple pattern", pattern.getLocation()); VdmRuntimeError.patternFail(4124, "Values do not match tuple pattern", pattern.getLocation());
/** * Creates a deep clone of this {@link ATuplePattern} 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 ATuplePattern} node */ public ATuplePattern clone(Map<INode,INode> oldToNewMap) { ATuplePattern node = new ATuplePattern( _location, cloneList(_definitions, oldToNewMap), _resolved, cloneList(_plist, oldToNewMap) ); oldToNewMap.put(this, node); return node; }
@Override public Boolean caseATuplePattern(ATuplePattern pattern) throws AnalysisException { return isConstrained(pattern.getPlist()); }
List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy)
@Override public Boolean caseATuplePattern(ATuplePattern pattern) throws AnalysisException { return af.createPPatternListAssistant().isSimple(pattern.getPlist()); }
List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) List<PPattern> copy = new ArrayList<PPattern>(node.getPlist()); for( PPattern e : copy)
@Override public Boolean caseATuplePattern(ATuplePattern pattern) throws AnalysisException { return af.createPPatternListAssistant().alwaysMatches(pattern.getPlist()); }
public PExp caseATuplePattern(ATuplePattern node) throws AnalysisException { ATupleExp tuple = new ATupleExp(); List<PExp> values = new Vector<PExp>(); for (PPattern p : node.getPlist()) { PExp e = p.apply(this); values.add(e.clone()); } addPossibleType(tuple, node); tuple.setArgs(values); return tuple; }
@Override public SPatternIR caseATuplePattern(ATuplePattern node, IRInfo question) throws AnalysisException { ATuplePatternIR tuplePatternCg = new ATuplePatternIR(); for (PPattern currentPattern : node.getPlist()) { SPatternIR patternCg = currentPattern.apply(question.getPatternVisitor(), question); if (patternCg != null) { tuplePatternCg.getPatterns().add(patternCg); } else { return null; } } return tuplePatternCg; }