public boolean alwaysMatches(PPattern pattern, PType type) { return af.getTypeComparator().isSubType(getPossibleType(pattern), type) && alwaysMatches(pattern); } }
public PType getPossibleType(LinkedList<PPattern> plist, ILexLocation location) { switch (plist.size()) { case 0: return AstFactory.newAUnknownType(location); case 1: return af.createPPatternAssistant().getPossibleType(plist.get(0)); default: PTypeSet list = new PTypeSet(af); for (PPattern p : plist) { list.add(af.createPPatternAssistant().getPossibleType(p)); } return list.getType(location); // NB. a union of types } }
public boolean matches(PPattern pattern, PType expType) { return af.getTypeComparator().compatible(af.createPPatternAssistant().getPossibleType(pattern), expType); }
private PExp addPossibleType(PExp exp, PPattern node) { PType possibleType = af.createPPatternAssistant().getPossibleType(node); if (possibleType != null) { exp.setType(possibleType.clone()); } else { exp.setType(new AUnknownType()); } return exp; } }
@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 PType caseAUnionPattern(AUnionPattern pattern) throws AnalysisException { PTypeSet set = new PTypeSet(af); set.add(af.createPPatternAssistant().getPossibleType(pattern.getLeft())); set.add(af.createPPatternAssistant().getPossibleType(pattern.getRight())); PType s = set.getType(pattern.getLocation()); return af.createPTypeAssistant().isUnknown(s) ? AstFactory.newASetSetType(pattern.getLocation(), AstFactory.newAUnknownType(pattern.getLocation())) : s; }
@Override public PType caseAConcatenationPattern(AConcatenationPattern pattern) throws AnalysisException { PTypeSet set = new PTypeSet(af); set.add(af.createPPatternAssistant().getPossibleType(pattern.getLeft())); set.add(af.createPPatternAssistant().getPossibleType(pattern.getRight())); PType s = set.getType(pattern.getLocation()); return af.createPTypeAssistant().isUnknown(s) ? AstFactory.newASeqSeqType(pattern.getLocation(), AstFactory.newAUnknownType(pattern.getLocation())) : s; }
PType patternType = question.getTcFactory().createPPatternAssistant().getPossibleType(pattern); TypeComparator comp = question.getTcFactory().getTypeComparator();
@Override public void caseAForAllStm(AForAllStm node) throws AnalysisException { if (!proceed(node)) { return; } if (node.getSet() != null) { node.getSet().apply(this); } PType possibleType = af.createPPatternAssistant().getPossibleType(node.getPattern()); List<PDefinition> defs = af.createPPatternAssistant().getDefinitions(node.getPattern(), possibleType, NameScope.LOCAL); for (PDefinition d : defs) { openLoop(d.getName(), node.getPattern(), node.getStatement()); } node.getStatement().apply(this); for (PDefinition def : defs) { removeLocalDefFromScope(def); } }
&& assistantFactory.createPTypeAssistant().isUnion(type)) PType patternType = assistantFactory.createPPatternAssistant().getPossibleType(pattern); AUnionType ut = assistantFactory.createPTypeAssistant().getUnion(type); PTypeSet set = new PTypeSet(assistantFactory);
&& node.getExpType() instanceof AUnionType) PType patternType = assistantFactory.createPPatternAssistant().getPossibleType(pattern); // With