public NameBindingVisitor(IReadOnlyDictionary <string, DeclaredSymbol> declarations, IDictionary <SyntaxBase, Symbol> bindings, ImmutableDictionary <string, NamespaceSymbol> namespaces, ImmutableArray <LocalScope> localScopes) { this.declarations = declarations; this.bindings = bindings; this.namespaces = namespaces; this.allLocalScopes = ScopeCollectorVisitor.Build(localScopes); this.activeScopes = new Stack <LocalScope>(); }
public static IReadOnlyDictionary <SyntaxBase, LocalScope> Build(ImmutableArray <LocalScope> outermostScopes) { var visitor = new ScopeCollectorVisitor(); foreach (LocalScope outermostScope in outermostScopes) { visitor.Visit(outermostScope); } return(visitor.ScopeMap.AsReadOnly()); }
public static ImmutableDictionary <SyntaxBase, Symbol> GetBindings( ProgramSyntax programSyntax, IReadOnlyDictionary <string, DeclaredSymbol> outermostDeclarations, NamespaceResolver namespaceResolver, ImmutableArray <LocalScope> childScopes) { // bind identifiers to declarations var bindings = new Dictionary <SyntaxBase, Symbol>(); var allLocalScopes = ScopeCollectorVisitor.Build(childScopes); var binder = new NameBindingVisitor(outermostDeclarations, bindings, namespaceResolver, allLocalScopes); binder.Visit(programSyntax); return(bindings.ToImmutableDictionary()); }