private Boolean alwaysMatches(List<PPattern> plist) throws AnalysisException { for (PPattern p : plist) { if (!p.apply(this)) { return Boolean.FALSE; } } return Boolean.TRUE; }
@Override public List<AIdentifierPattern> caseASeqPattern(ASeqPattern pattern) throws AnalysisException { List<AIdentifierPattern> list = new Vector<AIdentifierPattern>(); for (PPattern p : pattern.getPlist()) { list.addAll(p.apply(THIS)); } return list; }
@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; }
public List<AIdentifierPattern> findIdentifiers(PPattern pattern) { try { return pattern.apply(af.getIdentifierPatternFinder());// FIXME: should we handle exceptions like this } catch (AnalysisException e) { return new Vector<AIdentifierPattern>(); // Most have none } }
public boolean isSimple(PPattern pattern) { try { return pattern.apply(af.getSimplePatternChecker()); } catch (AnalysisException e) { return false; } }
@Override public Integer caseAMapUnionPattern(AMapUnionPattern pattern) throws AnalysisException { int llen = pattern.getLeft().apply(THIS);// PPatternAssistantInterpreter.getLength(pattern.getLeft()); int rlen = pattern.getRight().apply(THIS);// PPatternAssistantInterpreter.getLength(pattern.getRight()); return llen == PPatternAssistantInterpreter.ANY || rlen == PPatternAssistantInterpreter.ANY ? PPatternAssistantInterpreter.ANY : llen + rlen; }
@Override public Integer caseAUnionPattern(AUnionPattern pattern) throws AnalysisException { int llen = pattern.getLeft().apply(THIS); int rlen = pattern.getRight().apply(THIS); return llen == PPatternAssistantInterpreter.ANY || rlen == PPatternAssistantInterpreter.ANY ? PPatternAssistantInterpreter.ANY : llen + rlen; }
@Override public Integer caseAConcatenationPattern(AConcatenationPattern pattern) throws AnalysisException { int llen = pattern.getLeft().apply(THIS);// PPatternAssistantInterpreter.getLength(pattern.getLeft()); int rlen = pattern.getRight().apply(THIS);// PPatternAssistantInterpreter.getLength(pattern.getRight()); return llen == PPatternAssistantInterpreter.ANY || rlen == PPatternAssistantInterpreter.ANY ? PPatternAssistantInterpreter.ANY : llen + rlen; }
public void typeCheck(PPattern pattern, TypeCheckInfo question, IQuestionAnswer<TypeCheckInfo, PType> typeCheckVisitor) { try { pattern.apply(new TypeCheckerPatternVisitor(typeCheckVisitor), new TypeCheckInfo(question.assistantFactory, question.env, question.scope)); } catch (AnalysisException e) { } }
public void typeResolve(PPattern pattern, IQuestionAnswer<TypeCheckInfo, PType> rootVisitor, TypeCheckInfo question) throws AnalysisException { try { pattern.apply(af.getPatternResolver(), new PatternResolver.NewQuestion(rootVisitor, question)); } catch (AnalysisException e) { } }
public List<NameValuePairList> getAllNamedValues(PPattern pattern, Value expval, Context ctxt) throws AnalysisException { return pattern.apply(af.getAllNamedValuesLocator(), new AllNamedValuesLocator.Newquestion(expval, ctxt)); }
public PExp caseASetPattern(ASetPattern node) throws AnalysisException { ASetEnumSetExp set = new ASetEnumSetExp(); List<PExp> values = new Vector<PExp>(); for (PPattern p : node.getPlist()) { values.add(p.apply(this).clone()); } set.setMembers(values); return addPossibleType(set, node); }
private AVarDeclIR consLocalVarDecl(AValueDefinition valueDef, IRInfo question) throws AnalysisException { STypeIR type = valueDef.getType().apply(question.getTypeVisitor(), question); SPatternIR pattern = valueDef.getPattern().apply(question.getPatternVisitor(), question); SExpIR exp = valueDef.getExpression().apply(question.getExpVisitor(), question); return consLocalVarDecl(valueDef, type, pattern, exp); }