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.prefix_builder; | |
6 | |
7 import 'builder.dart' show | |
8 Builder, | |
9 LibraryBuilder, | |
10 MemberBuilder; | |
11 | |
12 import 'package:kernel/ast.dart' show | |
13 Member; | |
14 | |
15 import '../dill/dill_member_builder.dart' show | |
16 DillMemberBuilder; | |
17 | |
18 class PrefixBuilder extends Builder { | |
19 final String name; | |
20 | |
21 final Map<String, Builder> exports; | |
22 | |
23 final LibraryBuilder parent; | |
24 | |
25 PrefixBuilder(this.name, this.exports, this.parent); | |
26 | |
27 Member findTopLevelMember(String name) { | |
28 // TODO(ahe): Move this to KernelPrefixBuilder. | |
29 Builder builder = exports[name]; | |
30 if (builder == null) { | |
31 // TODO(ahe): Report error? | |
32 print("${this.name} has no member named $name"); | |
33 } | |
34 if (builder is DillMemberBuilder) { | |
35 return builder.member.isInstanceMember ? null : builder.member; | |
Johnni Winther
2017/01/16 13:01:19
How can an instance be returned from `exports[name
ahe
2017/01/16 15:26:33
That shouldn't happen. I've turned it into an inte
| |
36 } else if (builder is MemberBuilder) { | |
37 return builder.target; | |
38 } else { | |
39 return null; | |
40 } | |
41 } | |
42 | |
43 Builder combineAmbiguousImport(String name, Builder other, | |
44 LibraryBuilder library) { | |
45 if (other is PrefixBuilder) { | |
46 other.exports.forEach((String name, Builder member) { | |
47 Builder existing = exports[name]; | |
Johnni Winther
2017/01/16 13:01:19
Why are we doing this for all names? Don't we risk
ahe
2017/01/16 15:26:33
This deals with the case where the same prefix is
| |
48 if (existing != null) { | |
49 member = existing.combineAmbiguousImport(name, member, library); | |
50 } | |
51 exports[name] = member; | |
52 }); | |
53 return this; | |
54 } | |
55 return super.combineAmbiguousImport(name, other, library); | |
56 } | |
57 } | |
OLD | NEW |