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

Unified Diff: pkg/compiler/lib/src/ssa/kernel_impact.dart

Issue 3007523003: Prepare for handling super noSuchMethod (Closed)
Patch Set: Created 3 years, 4 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
Index: pkg/compiler/lib/src/ssa/kernel_impact.dart
diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
index 379f151139c20b38d5841ccb832bc89859b04e51..8a464ca1b11f6f4a357d808c6807d9e8649531eb 100644
--- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
@@ -414,8 +414,15 @@ class KernelImpactBuilder extends ir.Visitor {
FunctionEntity method = elementAdapter
.getSuperMember(currentMember, name, target, setter: false);
_visitArguments(arguments);
- impactBuilder.registerStaticUse(new StaticUse.superInvoke(
- method, elementAdapter.getCallStructure(arguments)));
+ if (method != null) {
+ impactBuilder.registerStaticUse(new StaticUse.superInvoke(
+ method, elementAdapter.getCallStructure(arguments)));
+ } else {
+ impactBuilder.registerStaticUse(new StaticUse.superInvoke(
+ elementAdapter.getSuperNoSuchMethod(
+ elementAdapter.getClass(currentMember.enclosingClass)),
+ CallStructure.ONE_ARG));
+ }
}
@override
@@ -433,10 +440,17 @@ class KernelImpactBuilder extends ir.Visitor {
void handleSuperGet(ir.Name name, ir.Member target) {
MemberEntity member = elementAdapter
.getSuperMember(currentMember, name, target, setter: false);
- if (member.isFunction) {
- impactBuilder.registerStaticUse(new StaticUse.superTearOff(member));
+ if (member != null) {
+ if (member.isFunction) {
+ impactBuilder.registerStaticUse(new StaticUse.superTearOff(member));
+ } else {
+ impactBuilder.registerStaticUse(new StaticUse.superGet(member));
+ }
} else {
- impactBuilder.registerStaticUse(new StaticUse.superGet(member));
+ impactBuilder.registerStaticUse(new StaticUse.superInvoke(
+ elementAdapter.getSuperNoSuchMethod(
+ elementAdapter.getClass(currentMember.enclosingClass)),
+ CallStructure.ONE_ARG));
}
}
@@ -454,10 +468,17 @@ class KernelImpactBuilder extends ir.Visitor {
visitNode(value);
MemberEntity member = elementAdapter
.getSuperMember(currentMember, name, target, setter: true);
- if (member.isField) {
- impactBuilder.registerStaticUse(new StaticUse.superFieldSet(member));
+ if (member != null) {
+ if (member.isField) {
+ impactBuilder.registerStaticUse(new StaticUse.superFieldSet(member));
+ } else {
+ impactBuilder.registerStaticUse(new StaticUse.superSetterSet(member));
+ }
} else {
- impactBuilder.registerStaticUse(new StaticUse.superSetterSet(member));
+ impactBuilder.registerStaticUse(new StaticUse.superInvoke(
+ elementAdapter.getSuperNoSuchMethod(
+ elementAdapter.getClass(currentMember.enclosingClass)),
+ CallStructure.ONE_ARG));
}
}
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map_impl.dart ('k') | tests/compiler/dart2js/kernel/getters_setters_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698