OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library fasta.dill_library_builder; | 5 library fasta.dill_library_builder; |
6 | 6 |
7 import 'package:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' |
8 show | 8 show |
9 Class, | 9 Class, |
10 ExpressionStatement, | 10 ExpressionStatement, |
11 Field, | 11 Field, |
12 FunctionNode, | 12 FunctionNode, |
13 Let, | 13 Let, |
14 Library, | 14 Library, |
15 ListLiteral, | 15 ListLiteral, |
16 Member, | 16 Member, |
17 Procedure, | 17 Procedure, |
18 StaticGet; | 18 StaticGet; |
19 | 19 |
20 import '../errors.dart' show internalError; | 20 import '../errors.dart' show internalError; |
21 | 21 |
22 import '../kernel/kernel_builder.dart' | 22 import '../kernel/kernel_builder.dart' |
23 show Builder, KernelInvalidTypeBuilder, KernelTypeBuilder, LibraryBuilder; | 23 show |
| 24 Builder, |
| 25 KernelInvalidTypeBuilder, |
| 26 KernelTypeBuilder, |
| 27 LibraryBuilder, |
| 28 Scope; |
24 | 29 |
25 import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody; | 30 import '../kernel/redirecting_factory_body.dart' show RedirectingFactoryBody; |
26 | 31 |
27 import 'dill_class_builder.dart' show DillClassBuilder; | 32 import 'dill_class_builder.dart' show DillClassBuilder; |
28 | 33 |
29 import 'dill_member_builder.dart' show DillMemberBuilder; | 34 import 'dill_member_builder.dart' show DillMemberBuilder; |
30 | 35 |
31 import 'dill_loader.dart' show DillLoader; | 36 import 'dill_loader.dart' show DillLoader; |
32 | 37 |
33 class DillLibraryBuilder extends LibraryBuilder<KernelTypeBuilder, Library> { | 38 class DillLibraryBuilder extends LibraryBuilder<KernelTypeBuilder, Library> { |
34 final Uri uri; | 39 final Uri uri; |
35 | 40 |
36 final Map<String, Builder> members = <String, Builder>{}; | |
37 | |
38 // TODO(ahe): Some export information needs to be serialized. | |
39 final Map<String, Builder> exports = <String, Builder>{}; | |
40 | |
41 final DillLoader loader; | 41 final DillLoader loader; |
42 | 42 |
43 Library library; | 43 Library library; |
44 | 44 |
45 DillLibraryBuilder(Uri uri, this.loader) | 45 DillLibraryBuilder(this.uri, this.loader) |
46 : uri = uri, | 46 : super(uri, new Scope.top(), new Scope.top()); |
47 super(uri); | |
48 | |
49 get scope => internalError("Scope not supported"); | |
50 | 47 |
51 Uri get fileUri => uri; | 48 Uri get fileUri => uri; |
52 | 49 |
53 void addClass(Class cls) { | 50 void addClass(Class cls) { |
54 DillClassBuilder classBulder = new DillClassBuilder(cls, this); | 51 DillClassBuilder classBulder = new DillClassBuilder(cls, this); |
55 addBuilder(cls.name, classBulder, cls.fileOffset); | 52 addBuilder(cls.name, classBulder, cls.fileOffset); |
56 cls.procedures.forEach(classBulder.addMember); | 53 cls.procedures.forEach(classBulder.addMember); |
57 cls.constructors.forEach(classBulder.addMember); | 54 cls.constructors.forEach(classBulder.addMember); |
58 for (Field field in cls.fields) { | 55 for (Field field in cls.fields) { |
59 if (field.name.name == "_redirecting#") { | 56 if (field.name.name == "_redirecting#") { |
(...skipping 14 matching lines...) Expand all Loading... |
74 initializer.expressions.clear(); | 71 initializer.expressions.clear(); |
75 } else { | 72 } else { |
76 classBulder.addMember(field); | 73 classBulder.addMember(field); |
77 } | 74 } |
78 } | 75 } |
79 } | 76 } |
80 | 77 |
81 void addMember(Member member) { | 78 void addMember(Member member) { |
82 String name = member.name.name; | 79 String name = member.name.name; |
83 if (name == "_exports#") { | 80 if (name == "_exports#") { |
| 81 // TODO(ahe): Add this to exportScope. |
84 // This is a hack / work around for storing exports in dill files. See | 82 // This is a hack / work around for storing exports in dill files. See |
85 // [compile_platform.dart](../compile_platform.dart). | 83 // [compile_platform_dartk.dart](../analyzer/compile_platform_dartk.dart). |
86 } else { | 84 } else { |
87 addBuilder(name, new DillMemberBuilder(member, this), member.fileOffset); | 85 addBuilder(name, new DillMemberBuilder(member, this), member.fileOffset); |
88 } | 86 } |
89 } | 87 } |
90 | 88 |
91 Builder addBuilder(String name, Builder builder, int charOffset) { | 89 Builder addBuilder(String name, Builder builder, int charOffset) { |
92 if (name == null || name.isEmpty) return null; | 90 if (name == null || name.isEmpty) return null; |
93 members[name] = builder; | 91 bool isSetter = builder.isSetter; |
| 92 if (isSetter) { |
| 93 scopeBuilder.addSetter(name, builder); |
| 94 } else { |
| 95 scopeBuilder.addMember(name, builder); |
| 96 } |
94 if (!name.startsWith("_")) { | 97 if (!name.startsWith("_")) { |
95 exports[name] = builder; | 98 if (isSetter) { |
| 99 exportScopeBuilder.addSetter(name, builder); |
| 100 } else { |
| 101 exportScopeBuilder.addMember(name, builder); |
| 102 } |
96 } | 103 } |
97 return builder; | 104 return builder; |
98 } | 105 } |
99 | 106 |
100 bool addToExportScope(String name, Builder member) { | 107 bool addToExportScope(String name, Builder member) { |
101 return internalError("Not implemented yet."); | 108 return internalError("Not implemented yet."); |
102 } | 109 } |
103 | 110 |
104 @override | 111 @override |
105 void addToScope(String name, Builder member, int charOffset, bool isImport) { | 112 void addToScope(String name, Builder member, int charOffset, bool isImport) { |
106 internalError("Not implemented yet."); | 113 internalError("Not implemented yet."); |
107 } | 114 } |
108 | 115 |
109 @override | 116 @override |
110 Builder buildAmbiguousBuilder( | 117 Builder buildAmbiguousBuilder( |
111 String name, Builder builder, Builder other, int charOffset, | 118 String name, Builder builder, Builder other, int charOffset, |
112 {bool isExport: false, bool isImport: false}) { | 119 {bool isExport: false, bool isImport: false}) { |
113 return new KernelInvalidTypeBuilder(name, charOffset, fileUri); | 120 return new KernelInvalidTypeBuilder(name, charOffset, fileUri); |
114 } | 121 } |
115 | 122 |
116 @override | 123 @override |
117 String get fullNameForErrors { | 124 String get fullNameForErrors { |
118 return library.name ?? "<library '${library.fileUri}'>"; | 125 return library.name ?? "<library '${library.fileUri}'>"; |
119 } | 126 } |
120 } | 127 } |
OLD | NEW |