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>
        /// <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);
            }
        }
Ejemplo n.º 2
0
        internal Binder GetInRecordBodyBinder(RecordDeclarationSyntax typeDecl)
        {
            BinderFactoryVisitor visitor = _binderFactoryVisitorPool.Allocate();

            visitor.Initialize(position: typeDecl.SpanStart, memberDeclarationOpt: null, memberOpt: null);
            Binder resultBinder = visitor.VisitTypeDeclarationCore(typeDecl, NodeUsage.NamedTypeBodyOrTypeParameters);

            _binderFactoryVisitorPool.Free(visitor);

            return(resultBinder);
        }
Ejemplo n.º 3
0
        internal Binder GetBinder(SyntaxNode node, int position, CSharpSyntaxNode memberDeclarationOpt = null, Symbol memberOpt = null)
        {
            Debug.Assert(node != null);

            BinderFactoryVisitor visitor = _binderFactoryVisitorPool.Allocate();

            visitor.Initialize(position, memberDeclarationOpt, memberOpt);
            Binder result = visitor.Visit(node);

            _binderFactoryVisitorPool.Free(visitor);

            return(result);
        }