Chromium Code Reviews| Index: dart/lib/compiler/implementation/enqueue.dart |
| diff --git a/dart/lib/compiler/implementation/enqueue.dart b/dart/lib/compiler/implementation/enqueue.dart |
| index a42b1d4e2dcd36f1570daadb293616b2f7d50d37..bfa2636d272df72bdb289b04f1ec3143a432eb02 100644 |
| --- a/dart/lib/compiler/implementation/enqueue.dart |
| +++ b/dart/lib/compiler/implementation/enqueue.dart |
| @@ -214,12 +214,19 @@ class Enqueuer { |
| void onRegisterInstantiatedClass(ClassElement cls) { |
| task.measure(() { |
| - while (cls !== null) { |
| - if (seenClasses.contains(cls)) return; |
| + cls.ensureResolved(compiler); // So allSupertypesAndSelf works. |
|
karlklose
2012/08/14 11:06:51
How about something like 'Compute set of all super
ahe
2012/08/14 18:20:34
Done.
|
| + for (Link<Type> supertypes = cls.allSupertypesAndSelf; |
| + !supertypes.isEmpty(); supertypes = supertypes.tail) { |
| + cls = supertypes.head.element; |
| + if (seenClasses.contains(cls)) continue; |
| seenClasses.add(cls); |
| cls.ensureResolved(compiler); |
| - cls.members.forEach(processInstantiatedClassMember); |
| - cls = cls.superclass; |
| + if (!cls.isInterface()) { |
| + cls.members.forEach(processInstantiatedClassMember); |
| + } |
| + if (isResolutionQueue) { |
| + compiler.resolver.checkMembers(cls); |
| + } |
| } |
| }); |
| } |