Ejemplo n.º 1
0
        /// <summary>
        /// Returns binder that binds usings and aliases
        /// </summary>
        /// <param name="unit">
        /// Specify <see cref="NamespaceDeclarationSyntax"/> imports in the corresponding namespace, or
        /// <see cref="CompilationUnitSyntax"/> for top-level imports.
        /// </param>
        internal InContainerBinder GetImportsBinder(CSharpSyntaxNode unit)
        {
            switch (unit.Kind)
            {
            case SyntaxKind.NamespaceDeclaration:
            {
                BinderFactoryVisitor visitor = binderFactoryVisitorPool.Allocate();
                visitor.Position = 0;
                var result = visitor.VisitNamespaceDeclaration((NamespaceDeclarationSyntax)unit, unit.SpanStart, inBody: true, inUsing: false);
                binderFactoryVisitorPool.Free(visitor);
                return(result);
            }

            case SyntaxKind.CompilationUnit:
                // imports are bound by the Script class binder:
            {
                BinderFactoryVisitor visitor = binderFactoryVisitorPool.Allocate();
                visitor.Position = 0;
                var result = visitor.VisitCompilationUnit((CompilationUnitSyntax)unit, inUsing: false, inScript: InScript);
                binderFactoryVisitorPool.Free(visitor);
                return(result);
            }

            default:
                return(null);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Returns binder that binds usings and aliases
        /// </summary>
        /// <param name="unit">
        /// Specify <see cref="NamespaceDeclarationSyntax"/> imports in the corresponding namespace, or
        /// <see cref="CompilationUnitSyntax"/> for top-level imports.
        /// </param>
        /// <param name="inUsing">True if the binder will be used to bind a using directive.</param>
        internal Binder GetImportsBinder(CSharpSyntaxNode unit, bool inUsing = false)
        {
            switch (unit.Kind())
            {
            case SyntaxKind.NamespaceDeclaration:
            {
                BinderFactoryVisitor visitor = _binderFactoryVisitorPool.Allocate();
                visitor.Initialize(0, null, null);
                Binder result = visitor.VisitNamespaceDeclaration((NamespaceDeclarationSyntax)unit, unit.SpanStart, inBody: true, inUsing: inUsing);
                _binderFactoryVisitorPool.Free(visitor);
                return(result);
            }

            case SyntaxKind.CompilationUnit:
                // imports are bound by the Script class binder:
            {
                BinderFactoryVisitor visitor = _binderFactoryVisitorPool.Allocate();
                visitor.Initialize(0, null, null);
                Binder result = visitor.VisitCompilationUnit((CompilationUnitSyntax)unit, inUsing: inUsing, inScript: InScript);
                _binderFactoryVisitorPool.Free(visitor);
                return(result);
            }

            default:
                return(null);
            }
        }