public POForAllContext(ALetBeStExp exp, IPogAssistantFactory assistantFactory) { this.bindings = cloneBinds(assistantFactory.createPMultipleBindAssistant().getMultipleBindList(exp.getBind())); }
private List<PDefinition> getMultipleBindDefs(List<PMultipleBind> bindings) { List<PDefinition> defs = new Vector<PDefinition>(); for (PMultipleBind mb : bindings) { for (PPattern pattern : mb.getPlist()) { defs.addAll(af.createPPatternAssistant().getDefinitions(pattern, af.createPMultipleBindAssistant().getPossibleType(mb), NameScope.LOCAL)); } } return defs; }
@Override public PMultipleBindAssistantTC createPMultipleBindAssistant() { return new PMultipleBindAssistantTC(this); }
@Override public PType caseAMultiBindListDefinition(AMultiBindListDefinition node, TypeCheckInfo question) throws AnalysisException { if (node.getType() != null) { question.assistantFactory.getTypeComparator().checkComposeTypes(node.getType(), question.env, false); } List<PDefinition> defs = new Vector<PDefinition>(); for (PMultipleBind mb : node.getBindings()) { PType type = mb.apply(THIS, question); defs.addAll(question.assistantFactory.createPMultipleBindAssistant().getDefinitions(mb, type, question)); } question.assistantFactory.createPDefinitionListAssistant().typeCheck(defs, THIS, question); node.setDefs(defs); return null; }
@Override public LexNameSet caseALetBeStStm(ALetBeStStm node, FreeVarInfo info) throws AnalysisException { PDefinition def = AstFactory.newAMultiBindListDefinition(node.getLocation(), af.createPMultipleBindAssistant().getMultipleBindList(node.getBind())); FreeVarInfo local = info.set(new FlatEnvironment(af, def, info.env)); LexNameSet names = node.getBind().apply(this, local); if (node.getSuchThat() != null) { names.addAll(node.getSuchThat().apply(this, local)); } names.addAll(node.getStatement().apply(this, local)); return names; }
PType ptype = question.assistantFactory.createPMultipleBindAssistant().getPossibleType(node);
@Override public LexNameSet caseALetBeStExp(ALetBeStExp node, FreeVarInfo info) throws AnalysisException { PDefinition def = AstFactory.newAMultiBindListDefinition(node.getLocation(), af.createPMultipleBindAssistant().getMultipleBindList(node.getBind())); FreeVarInfo local = info.set(new FlatEnvironment(af, def, info.env)); LexNameSet names = node.getBind().apply(this, local); if (node.getSuchThat() != null) { names.addAll(node.getSuchThat().apply(this, local)); } names.addAll(node.getValue().apply(this, local)); return names; }
PType ptype = question.assistantFactory.createPMultipleBindAssistant().getPossibleType(node);
throws AnalysisException final PDefinition def = AstFactory.newAMultiBindListDefinition(nodeLocation, question.assistantFactory.createPMultipleBindAssistant().getMultipleBindList((PMultipleBind) bind));