/// <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); } }
/// <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); } }
internal InteractiveUsingsBinder GetInteractiveUsingsBinder() { Debug.Assert(compilation.IsSubmission); BinderFactoryVisitor visitor = binderFactoryVisitorPool.Allocate(); visitor.Position = 0; Binder binder = visitor.VisitCompilationUnit(syntaxTree.GetCompilationUnitRoot(), inUsing: false, inScript: true); binderFactoryVisitorPool.Free(visitor); if (compilation.HostObjectType != null) { binder = binder.Next; Debug.Assert(binder is HostObjectModelBinder); } Debug.Assert(binder.Next is InContainerBinder); return((InteractiveUsingsBinder)binder.Next.Next); }