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

Unified Diff: pkg/compiler/lib/src/kernel/world_builder.dart

Issue 2831903002: Correctly handle setters in KernelWorldBuilder (Closed)
Patch Set: Fix. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tests/compiler/dart2js/kernel/closed_world2_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/kernel/world_builder.dart
diff --git a/pkg/compiler/lib/src/kernel/world_builder.dart b/pkg/compiler/lib/src/kernel/world_builder.dart
index 438a0df5a37629134c7d404de2b3e1f5f03e0548..3b7f3ccbda7cf67f2d4138ba89ee60e72f6a5d84 100644
--- a/pkg/compiler/lib/src/kernel/world_builder.dart
+++ b/pkg/compiler/lib/src/kernel/world_builder.dart
@@ -637,6 +637,7 @@ class KLibraryEnv {
Map<String, KClassEnv> _classMap;
Map<String, ir.Member> _memberMap;
+ Map<String, ir.Member> _setterMap;
KLibraryEnv(this.library);
@@ -665,9 +666,23 @@ class KLibraryEnv {
ir.Member lookupMember(String name, {bool setter: false}) {
if (_memberMap == null) {
_memberMap = <String, ir.Member>{};
+ _setterMap = <String, ir.Member>{};
for (ir.Member member in library.members) {
- // TODO(johnniwinther): Support setter vs. getter.
- _memberMap[member.name.name] = member;
+ if (member is ir.Procedure) {
+ if (member.kind == ir.ProcedureKind.Setter) {
+ _setterMap[member.name.name] = member;
+ } else {
+ _memberMap[member.name.name] = member;
+ }
+ } else if (member is ir.Field) {
+ _memberMap[member.name.name] = member;
+ if (member.isMutable) {
+ _setterMap[member.name.name] = member;
+ }
+ } else {
+ throw new SpannableAssertionFailure(
+ NO_LOCATION_SPANNABLE, "Unexpected library member node: $member");
+ }
}
}
return _memberMap[name];
@@ -686,6 +701,7 @@ class KClassEnv {
Map<String, ir.Member> _constructorMap;
Map<String, ir.Member> _memberMap;
+ Map<String, ir.Member> _setterMap;
Iterable<ConstantExpression> _metadata;
@@ -694,29 +710,40 @@ class KClassEnv {
void _ensureMaps() {
if (_memberMap == null) {
_memberMap = <String, ir.Member>{};
+ _setterMap = <String, ir.Member>{};
_constructorMap = <String, ir.Member>{};
for (ir.Member member in cls.members) {
- if (member is ir.Procedure && member.kind == ir.ProcedureKind.Factory) {
+ if (member is ir.Constructor ||
+ member is ir.Procedure && member.kind == ir.ProcedureKind.Factory) {
_constructorMap[member.name.name] = member;
- } else {
- // TODO(johnniwinther): Support setter vs. getter.
+ } else if (member is ir.Procedure) {
+ if (member.kind == ir.ProcedureKind.Setter) {
+ _setterMap[member.name.name] = member;
+ } else {
+ _memberMap[member.name.name] = member;
+ }
+ } else if (member is ir.Field) {
+ _memberMap[member.name.name] = member;
+ if (member.isMutable) {
+ _setterMap[member.name.name] = member;
+ }
_memberMap[member.name.name] = member;
+ } else {
+ throw new SpannableAssertionFailure(
+ NO_LOCATION_SPANNABLE, "Unexpected class member node: $member");
}
}
- for (ir.Member member in cls.constructors) {
- _constructorMap[member.name.name] = member;
- }
}
}
/// Return the [ir.Member] for the member [name] in [library].
ir.Member lookupMember(String name, {bool setter: false}) {
_ensureMaps();
- return _memberMap[name];
+ return setter ? _setterMap[name] : _memberMap[name];
}
/// Return the [ir.Member] for the member [name] in [library].
- ir.Member lookupConstructor(String name, {bool setter: false}) {
+ ir.Member lookupConstructor(String name) {
_ensureMaps();
return _constructorMap[name];
}
« no previous file with comments | « no previous file | tests/compiler/dart2js/kernel/closed_world2_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698