Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: pkg/fasta/lib/src/dill/dill_library_builder.dart

Issue 2628943007: Fasta dill builders. (Closed)
Patch Set: Add comments. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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.dill_library_builder;
6
7 import 'package:kernel/ast.dart' show
8 Class,
9 ExpressionStatement,
10 Field,
11 FunctionNode,
12 Let,
13 Library,
14 ListLiteral,
15 Member,
16 Procedure,
17 StaticGet;
18
19 import '../errors.dart' show
20 internalError;
21
22 import '../kernel/kernel_builder.dart' show
23 Builder,
24 KernelInvalidTypeBuilder,
25 KernelTypeBuilder,
26 LibraryBuilder;
27
28 import '../kernel/redirecting_factory_body.dart' show
29 RedirectingFactoryBody;
30
31 import 'dill_class_builder.dart' show
32 DillClassBuilder;
33
34 import 'dill_member_builder.dart' show
35 DillMemberBuilder;
36
37 import 'dill_loader.dart' show
38 DillLoader;
39
40 class DillLibraryBuilder extends LibraryBuilder<KernelTypeBuilder, Library> {
41 final Uri uri;
42
43 final Map<String, Builder> members = <String, Builder>{};
44
45 // TODO(ahe): Some export information needs to be serialized.
46 final Map<String, Builder> exports = <String, Builder>{};
47
48 final DillLoader loader;
49
50 Library library;
51
52 DillLibraryBuilder(this.uri, this.loader);
53
54 get scope => internalError("Scope not supported");
55
56 void addClass(Class cls) {
57 DillClassBuilder classBulder = new DillClassBuilder(cls, this);
58 addBuilder(cls.name, classBulder);
59 cls.procedures.forEach(classBulder.addMember);
60 cls.constructors.forEach(classBulder.addMember);
61 for (Field field in cls.fields) {
62 if (field.name.name == "_redirecting#") {
63 // This is a hack / work around for storing redirecting constructors in
64 // dill files. See `buildFactoryConstructor` in
65 // [package:kernel/analyzer/ast_from_analyzer.dart]
66 // (../../../../kernel/lib/analyzer/ast_from_analyzer.dart).
67 ListLiteral initializer = field.initializer;
68 for (StaticGet get in initializer.expressions) {
69 Procedure factory = get.target;
70 FunctionNode function = factory.function;
71 ExpressionStatement statement = function.body;
72 Let let = statement.expression;
73 StaticGet getTarget = let.variable.initializer;
74 function.body = new RedirectingFactoryBody(getTarget.target)
75 ..parent = function;
76 }
77 initializer.expressions.clear();
78 } else {
79 classBulder.addMember(field);
80 }
81 }
82 }
83
84 void addMember(Member member) {
85 String name = member.name.name;
86 if (name == "_exports#") {
87 // This is a hack / work around for storing exports in dill files. See
88 // [compile_platform.dart](../compile_platform.dart).
89 print("$uri: _exports# not implemented yet.");
90 } else {
91 addBuilder(name, new DillMemberBuilder(member, this));
92 }
93 }
94
95 Builder addBuilder(String name, Builder builder) {
96 if (name == null || name.isEmpty) return null;
97 members[name] = builder;
98 if (!name.startsWith("_")) {
99 exports[name] = builder;
100 }
101 return builder;
102 }
103
104 bool addToExportScope(String name, Builder member) {
105 return internalError("Not implemented yet.");
106 }
107
108 void addToScope(String name, Builder member) {
109 internalError("Not implemented yet.");
110 }
111
112 KernelInvalidTypeBuilder buildAmbiguousBuilder(
113 String name, Builder builder, Builder other) {
114 return new KernelInvalidTypeBuilder(name, this);
115 }
116 }
OLDNEW
« no previous file with comments | « pkg/fasta/lib/src/dill/dill_class_builder.dart ('k') | pkg/fasta/lib/src/dill/dill_member_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698