| 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 |