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

Unified 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/fasta/lib/src/dill/dill_library_builder.dart
diff --git a/pkg/fasta/lib/src/dill/dill_library_builder.dart b/pkg/fasta/lib/src/dill/dill_library_builder.dart
new file mode 100644
index 0000000000000000000000000000000000000000..bc7fa09f237cd6bfc2929e2bb9b9156f6fd516e5
--- /dev/null
+++ b/pkg/fasta/lib/src/dill/dill_library_builder.dart
@@ -0,0 +1,116 @@
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library fasta.dill_library_builder;
+
+import 'package:kernel/ast.dart' show
+ Class,
+ ExpressionStatement,
+ Field,
+ FunctionNode,
+ Let,
+ Library,
+ ListLiteral,
+ Member,
+ Procedure,
+ StaticGet;
+
+import '../errors.dart' show
+ internalError;
+
+import '../kernel/kernel_builder.dart' show
+ Builder,
+ KernelInvalidTypeBuilder,
+ KernelTypeBuilder,
+ LibraryBuilder;
+
+import '../kernel/redirecting_factory_body.dart' show
+ RedirectingFactoryBody;
+
+import 'dill_class_builder.dart' show
+ DillClassBuilder;
+
+import 'dill_member_builder.dart' show
+ DillMemberBuilder;
+
+import 'dill_loader.dart' show
+ DillLoader;
+
+class DillLibraryBuilder extends LibraryBuilder<KernelTypeBuilder, Library> {
+ final Uri uri;
+
+ final Map<String, Builder> members = <String, Builder>{};
+
+ // TODO(ahe): Some export information needs to be serialized.
+ final Map<String, Builder> exports = <String, Builder>{};
+
+ final DillLoader loader;
+
+ Library library;
+
+ DillLibraryBuilder(this.uri, this.loader);
+
+ get scope => internalError("Scope not supported");
+
+ void addClass(Class cls) {
+ DillClassBuilder classBulder = new DillClassBuilder(cls, this);
+ addBuilder(cls.name, classBulder);
+ cls.procedures.forEach(classBulder.addMember);
+ cls.constructors.forEach(classBulder.addMember);
+ for (Field field in cls.fields) {
+ if (field.name.name == "_redirecting#") {
+ // This is a hack / work around for storing redirecting constructors in
+ // dill files. See `buildFactoryConstructor` in
+ // [package:kernel/analyzer/ast_from_analyzer.dart]
+ // (../../../../kernel/lib/analyzer/ast_from_analyzer.dart).
+ ListLiteral initializer = field.initializer;
+ for (StaticGet get in initializer.expressions) {
+ Procedure factory = get.target;
+ FunctionNode function = factory.function;
+ ExpressionStatement statement = function.body;
+ Let let = statement.expression;
+ StaticGet getTarget = let.variable.initializer;
+ function.body = new RedirectingFactoryBody(getTarget.target)
+ ..parent = function;
+ }
+ initializer.expressions.clear();
+ } else {
+ classBulder.addMember(field);
+ }
+ }
+ }
+
+ void addMember(Member member) {
+ String name = member.name.name;
+ if (name == "_exports#") {
+ // This is a hack / work around for storing exports in dill files. See
+ // [compile_platform.dart](../compile_platform.dart).
+ print("$uri: _exports# not implemented yet.");
+ } else {
+ addBuilder(name, new DillMemberBuilder(member, this));
+ }
+ }
+
+ Builder addBuilder(String name, Builder builder) {
+ if (name == null || name.isEmpty) return null;
+ members[name] = builder;
+ if (!name.startsWith("_")) {
+ exports[name] = builder;
+ }
+ return builder;
+ }
+
+ bool addToExportScope(String name, Builder member) {
+ return internalError("Not implemented yet.");
+ }
+
+ void addToScope(String name, Builder member) {
+ internalError("Not implemented yet.");
+ }
+
+ KernelInvalidTypeBuilder buildAmbiguousBuilder(
+ String name, Builder builder, Builder other) {
+ return new KernelInvalidTypeBuilder(name, this);
+ }
+}
« 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