@Override public void caseAMapPattern(AMapPattern pattern, NewQuestion question) throws AnalysisException { if (pattern.getResolved()) { return; } else { pattern.setResolved(true); } try { for (AMapletPatternMaplet mp : pattern.getMaplets()) { // af.createAMapletPatternMapletAssistant().typeResolve(mp, question.rootVisitor, question.question); mp.apply(THIS, question); } } catch (TypeCheckException e) { // af.createAMapPatternAssistant().unResolve(pattern); pattern.apply(af.getPatternUnresolver()); throw e; } }
@Override public PType caseAMapPattern(AMapPattern pattern) throws AnalysisException { return AstFactory.newAMapMapType(pattern.getLocation(), AstFactory.newAUnknownType(pattern.getLocation()), AstFactory.newAUnknownType(pattern.getLocation())); }
/** * Returns a deep clone of this {@link AMapPattern} node. * @return a deep clone of this {@link AMapPattern} node */ public AMapPattern clone() { return new AMapPattern( _location, cloneList(_definitions), _resolved, cloneList(_maplets) ); }
public static AMapPattern newAMapPattern(ILexLocation location, List<AMapletPatternMaplet> maplets) { AMapPattern result = new AMapPattern(); initPattern(result, location); result.setMaplets(maplets); return result; }
@Override public void caseAMapPattern(AMapPattern pattern) throws AnalysisException { for (AMapletPatternMaplet mp : pattern.getMaplets()) { // af.createAMapletPatternMapletAssistant().unResolve(mp); mp.apply(THIS); } pattern.setResolved(false); }
/** * Called by the {@link AMapPattern} node from {@link AMapPattern#apply(IAnalysis)}. * @param node the calling {@link AMapPattern} node */ public void caseAMapPattern(AMapPattern node) throws AnalysisException { _visitedNodes.add(node); inAMapPattern(node); { List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } { List<AMapletPatternMaplet> copy = new ArrayList<AMapletPatternMaplet>(node.getMaplets()); for( AMapletPatternMaplet e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } outAMapPattern(node); }
} catch (ValueException e) VdmRuntimeError.patternFail(e, pattern.getLocation()); if (values.size() != pattern.getMaplets().size()) VdmRuntimeError.patternFail(4152, "Wrong number of elements for map pattern", pattern.getLocation()); if (pattern.apply(af.getConstrainedPatternChecker())) int psize = pattern.getMaplets().size(); if (pattern.getMaplets().isEmpty()) for (AMapletPatternMaplet p : pattern.getMaplets()) VdmRuntimeError.patternFail(4153, "Values do not match map pattern", pattern.getLocation()); VdmRuntimeError.patternFail(4154, "Cannot match map pattern", pattern.getLocation());
@Override public Integer caseAMapPattern(AMapPattern pattern) throws AnalysisException { return pattern.getMaplets().size(); }
@Override public List<PDefinition> caseAMapPattern(AMapPattern pattern, NewQuestion question) throws AnalysisException { List<PDefinition> defs = new Vector<PDefinition>(); if (!af.createPTypeAssistant().isMap(question.ptype)) { TypeCheckerErrors.report(3314, "Map pattern is not matched against map type", pattern.getLocation(), pattern); TypeCheckerErrors.detail("Actual type", question.ptype); } else { SMapType map = af.createPTypeAssistant().getMap(question.ptype); if (!map.getEmpty()) { for (AMapletPatternMaplet p : pattern.getMaplets()) { defs.addAll(getDefinitions(p, map, question.scope)); // defs.addAll(p.apply(THIS, question)); } } } return defs; }
/** * Called by the {@link AMapPattern} node from {@link AMapPattern#apply(IPOFAnalysis)}. * @param node the calling {@link AMapPattern} node */ public void caseAMapPattern(AMapPattern node) throws AnalysisException { _visitedNodes.add(node); inAMapPattern(node); { List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } { List<AMapletPatternMaplet> copy = new ArrayList<AMapletPatternMaplet>(node.getMaplets()); for( AMapletPatternMaplet e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this); } } } outAMapPattern(node); }
@Override public Boolean caseAMapPattern(AMapPattern pattern) throws AnalysisException { for (AMapletPatternMaplet p : pattern.getMaplets()) { if (p.apply(THIS)) { return true; } } return false; }
/** * Called by the {@link AMapPattern} node from {@link AMapPattern#apply(IAnalysis)}. * @param node the calling {@link AMapPattern} node */ public void caseAMapPattern(AMapPattern node, Q question) throws AnalysisException { _visitedNodes.add(node); inAMapPattern(node, question); { List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this, question); } } } { List<AMapletPatternMaplet> copy = new ArrayList<AMapletPatternMaplet>(node.getMaplets()); for( AMapletPatternMaplet e : copy) { if(!_visitedNodes.contains(e)) { e.apply(this, question); } } } outAMapPattern(node, question); }
@Override public Boolean caseAMapPattern(AMapPattern pattern) throws AnalysisException { for (AMapletPatternMaplet mp : pattern.getMaplets()) { // if (!AMapletPatternMapletAssistantTC.isSimple(mp)) // Original code. if (!mp.apply(THIS)) { return false; } } return true; }
/** * Creates a deep clone of this {@link AMapPattern} 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 AMapPattern} node */ public AMapPattern clone(Map<INode,INode> oldToNewMap) { AMapPattern node = new AMapPattern( _location, cloneList(_definitions, oldToNewMap), _resolved, cloneList(_maplets, oldToNewMap) ); oldToNewMap.put(this, node); return node; }
List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) List<AMapletPatternMaplet> copy = new ArrayList<AMapletPatternMaplet>(node.getMaplets()); for( AMapletPatternMaplet e : copy)
@Override public List<AIdentifierPattern> caseAMapPattern(AMapPattern pattern) throws AnalysisException { List<AIdentifierPattern> list = new Vector<AIdentifierPattern>(); for (AMapletPatternMaplet p : pattern.getMaplets()) { list.addAll(af.createAMapPatternMapletAssistant().findIdentifiers(p)); } return list; }
List<PDefinition> copy = new ArrayList<PDefinition>(node.getDefinitions()); for( PDefinition e : copy) List<AMapletPatternMaplet> copy = new ArrayList<AMapletPatternMaplet>(node.getMaplets()); for( AMapletPatternMaplet e : copy)
public PExp caseAMapPattern(AMapPattern node) throws AnalysisException { AMapEnumMapExp map = new AMapEnumMapExp(); List<AMapletExp> values = new Vector<AMapletExp>(); for (AMapletPatternMaplet p : node.getMaplets()) { values.add((AMapletExp) p.apply(this).clone()); } map.setMembers(values); return addPossibleType(map, node); }