OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library fasta.import; |
| 6 |
| 7 import 'builder/builder.dart' show |
| 8 Builder, |
| 9 LibraryBuilder, |
| 10 PrefixBuilder; |
| 11 |
| 12 import 'combinator.dart' show |
| 13 Combinator; |
| 14 |
| 15 typedef void AddToScope(String name, Builder member); |
| 16 |
| 17 class Import { |
| 18 /// The library being imported. |
| 19 final LibraryBuilder imported; |
| 20 |
| 21 final String prefix; |
| 22 |
| 23 final List<Combinator> combinators; |
| 24 |
| 25 Import(this.imported, this.prefix, this.combinators); |
| 26 |
| 27 void finalizeImports(LibraryBuilder importer) { |
| 28 AddToScope add; |
| 29 PrefixBuilder prefix; |
| 30 if (this.prefix == null) { |
| 31 add = importer.addToScope; |
| 32 } else { |
| 33 prefix = new PrefixBuilder(this.prefix, <String, Builder>{}, importer); |
| 34 add = (String name, Builder member) { |
| 35 prefix.exports[name] = member; |
| 36 }; |
| 37 } |
| 38 imported.exports.forEach((String name, Builder member) { |
| 39 if (combinators != null) { |
| 40 for (Combinator combinator in combinators) { |
| 41 if (combinator.isShow && !combinator.names.contains(name)) return; |
| 42 if (combinator.isHide && combinator.names.contains(name)) return; |
| 43 } |
| 44 } |
| 45 add(name, member); |
| 46 }); |
| 47 if (prefix != null) { |
| 48 Builder existing = importer.addBuilder(prefix.name, prefix); |
| 49 if (existing == prefix) { |
| 50 importer.addToScope(prefix.name, prefix); |
| 51 } |
| 52 } |
| 53 } |
| 54 } |
OLD | NEW |