Include superclasses of classes only needed for rti

Closes #29441

R=sigmund@google.com

Review-Url: https://codereview.chromium.org/2842653003 .
This commit is contained in:
Johnni Winther
2017-04-26 09:21:26 +02:00
parent 7979eadef0
commit 86fbb962cf
4 changed files with 12 additions and 8 deletions
@@ -282,6 +282,8 @@ class Class implements FieldContainer {
int get superclassHolderIndex =>
(superclass == null) ? 0 : superclass.holder.index;
String toString() => 'Class(${element.name})';
}
class MixinApplication extends Class {
@@ -240,7 +240,13 @@ class Collector {
// these are thought to not have been instantiated, so we neeed to be able
// to identify them later and make sure we only emit "empty shells" without
// fields, etc.
classesOnlyNeededForRti = _rtiNeededClasses.difference(neededClasses);
classesOnlyNeededForRti = new Set<ClassElement>();
for (ClassElement cls in _rtiNeededClasses) {
while (cls != null && !neededClasses.contains(cls)) {
if (!classesOnlyNeededForRti.add(cls)) break;
cls = cls.superclass;
}
}
neededClasses.addAll(classesOnlyNeededForRti);
@@ -209,7 +209,9 @@ class ProgramBuilder {
_classes.forEach((ClassElement element, Class c) {
if (element.superclass != null) {
c.setSuperclass(_classes[element.superclass]);
assert(c.superclass != null);
assert(invariant(element, c.superclass != null,
message: "No Class for has been created for superclass "
"${element.superclass} of $c."));
}
if (c is MixinApplication) {
c.setMixinClass(_classes[computeMixinClass(element)]);
-6
View File
@@ -938,9 +938,3 @@ named_parameters_test/03: Crash # Issue 27394
named_parameters_test/05: Crash # Issue 27394
named_parameters_test/07: Crash # Issue 27394
named_parameters_test/09: Crash # Issue 27394
[ $compiler == dart2js && $runtime == d8 && $host_checked == false && $checked && $fast_startup == false]
mixin_type_parameter6_test: RuntimeError #29441
[ $compiler == dart2js && $runtime == d8 && $host_checked && $checked ]
mixin_type_parameter6_test: Crash #29441