Пример #1
0
 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>();
 }
Пример #2
0
            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());
            }
Пример #3
0
        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());
        }