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

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

Issue 2628943007: Fasta dill builders. (Closed)
Patch Set: 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#") {
Johnni Winther 2017/01/18 13:33:34 Add a comment about this workaround?/hack?.
ahe 2017/01/18 14:14:00 Done.
63 ListLiteral initializer = field.initializer;
64 for (StaticGet get in initializer.expressions) {
65 Procedure factory = get.target;
66 FunctionNode function = factory.function;
67 ExpressionStatement statement = function.body;
68 Let let = statement.expression;
69 StaticGet getTarget = let.variable.initializer;
70 function.body = new RedirectingFactoryBody(getTarget.target)
71 ..parent = function;
72 }
73 initializer.expressions.clear();
74 } else {
75 classBulder.addMember(field);
76 }
77 }
78 }
79
80 void addMember(Member member) {
81 String name = member.name.name;
82 if (name == "_exports#") {
Johnni Winther 2017/01/18 13:33:34 Ditto.
ahe 2017/01/18 14:14:00 Done.
83 print("$uri: _exports# not implemented yet.");
84 } else {
85 addBuilder(name, new DillMemberBuilder(member, this));
86 }
87 }
88
89 Builder addBuilder(String name, Builder builder) {
90 if (name == null || name.isEmpty) return null;
91 members[name] = builder;
92 if (!name.startsWith("_")) {
93 exports[name] = builder;
94 }
95 return builder;
96 }
97
98 bool addToExportScope(String name, Builder member) {
99 return internalError("Not implemented yet.");
100 }
101
102 void addToScope(String name, Builder member) {
103 internalError("Not implemented yet.");
104 }
105
106 KernelInvalidTypeBuilder buildAmbiguousBuilder(
107 String name, Builder builder, Builder other) {
108 return new KernelInvalidTypeBuilder(name, this);
109 }
110 }
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