[vm] Fix super refs in non-synthetic constructors in mixin deduplication
Change-Id: I50bc48b6956aadd770ee73bc09b6292f33eac2ea
Reviewed-on: https://dart-review.googlesource.com/c/87078
Reviewed-by: Martin Kustermann <kustermann@google.com>
diff --git a/pkg/vm/lib/transformations/mixin_deduplication.dart b/pkg/vm/lib/transformations/mixin_deduplication.dart
index 19375aa..73c7e0b 100644
--- a/pkg/vm/lib/transformations/mixin_deduplication.dart
+++ b/pkg/vm/lib/transformations/mixin_deduplication.dart
@@ -126,26 +126,24 @@
throw 'Unexpected node ${node.runtimeType}: $node';
}
-/// Corrects synthetic forwarding constructors inserted by mixin resolution
-/// after replacing superclass.
+/// Corrects forwarding constructors inserted by mixin resolution after
+/// replacing superclass.
void _correctForwardingConstructors(Class c, Class oldSuper, Class newSuper) {
for (var constructor in c.constructors) {
- if (constructor.isSynthetic) {
- for (var initializer in constructor.initializers) {
- if ((initializer is SuperInitializer) &&
- initializer.target.enclosingClass == oldSuper) {
- Constructor replacement = null;
- for (var c in newSuper.constructors) {
- if (c.name == initializer.target.name) {
- replacement = c;
- break;
- }
+ for (var initializer in constructor.initializers) {
+ if ((initializer is SuperInitializer) &&
+ initializer.target.enclosingClass == oldSuper) {
+ Constructor replacement = null;
+ for (var c in newSuper.constructors) {
+ if (c.name == initializer.target.name) {
+ replacement = c;
+ break;
}
- if (replacement == null) {
- throw 'Unable to find a replacement for $c in $newSuper';
- }
- initializer.target = replacement;
}
+ if (replacement == null) {
+ throw 'Unable to find a replacement for $c in $newSuper';
+ }
+ initializer.target = replacement;
}
}
}