| Index: pkg/front_end/lib/src/fasta/builder/library_builder.dart
 | 
| diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
 | 
| index 2010800716e5cdfd9685084464300f6db8da4f6a..efd77e5ed09bd5163be43e75e380fbb7566bfff5 100644
 | 
| --- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
 | 
| +++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
 | 
| @@ -22,35 +22,40 @@ import 'builder.dart'
 | 
|          DynamicTypeBuilder,
 | 
|          ClassBuilder,
 | 
|          Scope,
 | 
| +        ScopeBuilder,
 | 
|          TypeBuilder,
 | 
|          VoidTypeBuilder;
 | 
|  
 | 
|  abstract class LibraryBuilder<T extends TypeBuilder, R> extends Builder {
 | 
| -  final List<Export> exporters = <Export>[];
 | 
| +  final Scope scope;
 | 
|  
 | 
| -  final List<InputError> compileTimeErrors = <InputError>[];
 | 
| +  final Scope exports;
 | 
|  
 | 
| -  LibraryBuilder partOfLibrary;
 | 
| +  final ScopeBuilder scopeBuilder;
 | 
|  
 | 
| -  Loader get loader;
 | 
| +  final ScopeBuilder exportScopeBuilder;
 | 
|  
 | 
| -  Uri get uri;
 | 
| +  final List<Export> exporters = <Export>[];
 | 
|  
 | 
| -  final Uri fileUri;
 | 
| -  final String relativeFileUri;
 | 
| +  final List<InputError> compileTimeErrors = <InputError>[];
 | 
|  
 | 
| -  Map<String, Builder> get members;
 | 
| +  final Uri fileUri;
 | 
|  
 | 
| -  // TODO(ahe): Move this to SourceLibraryBuilder.
 | 
| -  Scope get scope;
 | 
| +  final String relativeFileUri;
 | 
|  
 | 
| -  Map<String, Builder> get exports;
 | 
| +  LibraryBuilder partOfLibrary;
 | 
|  
 | 
| -  LibraryBuilder(Uri fileUri)
 | 
| +  LibraryBuilder(Uri fileUri, this.scope, this.exports)
 | 
|        : fileUri = fileUri,
 | 
|          relativeFileUri = relativizeUri(fileUri),
 | 
| +        scopeBuilder = new ScopeBuilder(scope),
 | 
| +        exportScopeBuilder = new ScopeBuilder(exports),
 | 
|          super(null, -1, fileUri);
 | 
|  
 | 
| +  Loader get loader;
 | 
| +
 | 
| +  Uri get uri;
 | 
| +
 | 
|    Builder addBuilder(String name, Builder builder, int charOffset);
 | 
|  
 | 
|    void addExporter(
 | 
| @@ -104,7 +109,7 @@ abstract class LibraryBuilder<T extends TypeBuilder, R> extends Builder {
 | 
|    Builder getConstructor(String className,
 | 
|        {String constructorName, bool isPrivate: false}) {
 | 
|      constructorName ??= "";
 | 
| -    Builder cls = (isPrivate ? members : exports)[className];
 | 
| +    Builder cls = (isPrivate ? scope : exports).lookup(className, -1, null);
 | 
|      if (cls is ClassBuilder) {
 | 
|        // TODO(ahe): This code is similar to code in `endNewExpression` in
 | 
|        // `body_builder.dart`, try to share it.
 | 
| @@ -133,16 +138,16 @@ abstract class LibraryBuilder<T extends TypeBuilder, R> extends Builder {
 | 
|    }
 | 
|  
 | 
|    void forEach(void f(String name, Builder builder)) {
 | 
| -    members.forEach(f);
 | 
| +    scope.forEach(f);
 | 
|    }
 | 
|  
 | 
|    /// Don't use for scope lookup. Only use when an element is known to exist
 | 
|    /// (and not a setter).
 | 
|    Builder operator [](String name) {
 | 
| -    return members[name] ?? internalError("Not found: '$name'.");
 | 
| +    return scope.local[name] ?? internalError("Not found: '$name'.");
 | 
|    }
 | 
|  
 | 
|    Builder lookup(String name, int charOffset, Uri fileUri) {
 | 
| -    return members[name];
 | 
| +    return scope.lookup(name, charOffset, fileUri);
 | 
|    }
 | 
|  }
 | 
| 
 |