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

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

Issue 2788153002: Create separate scopes for constructors, setters, and other members. (Closed)
Patch Set: Update subpackage dependencies. Created 3 years, 8 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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698