OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart2js; | 5 part of dart2js; |
6 | 6 |
7 class EnqueueTask extends CompilerTask { | 7 class EnqueueTask extends CompilerTask { |
8 final Enqueuer codegen; | 8 final Enqueuer codegen; |
9 final Enqueuer resolution; | 9 final Enqueuer resolution; |
10 | 10 |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 } | 221 } |
222 } | 222 } |
223 } | 223 } |
224 | 224 |
225 void onRegisterInstantiatedClass(ClassElement cls) { | 225 void onRegisterInstantiatedClass(ClassElement cls) { |
226 task.measure(() { | 226 task.measure(() { |
227 // The class must be resolved to compute the set of all | 227 // The class must be resolved to compute the set of all |
228 // supertypes. | 228 // supertypes. |
229 cls.ensureResolved(compiler); | 229 cls.ensureResolved(compiler); |
230 | 230 |
231 for (Link<DartType> supertypes = cls.allSupertypesAndSelf; | 231 void processClass(ClassElement cls) { |
232 !supertypes.isEmpty; supertypes = supertypes.tail) { | 232 if (seenClasses.contains(cls)) return; |
233 cls = supertypes.head.element; | 233 |
234 if (seenClasses.contains(cls)) continue; | |
235 seenClasses.add(cls); | 234 seenClasses.add(cls); |
236 cls.ensureResolved(compiler); | 235 cls.ensureResolved(compiler); |
237 cls.implementation.forEachMember(processInstantiatedClassMember); | 236 cls.implementation.forEachMember(processInstantiatedClassMember); |
238 if (isResolutionQueue) { | 237 if (isResolutionQueue) { |
239 compiler.resolver.checkMembers(cls); | 238 compiler.resolver.checkMembers(cls); |
240 } | 239 } |
241 | 240 |
242 if (compiler.enableTypeAssertions) { | 241 if (compiler.enableTypeAssertions) { |
243 // We need to register is checks and helpers for checking | 242 // We need to register is checks and helpers for checking |
244 // assignments to fields. | 243 // assignments to fields. |
245 // TODO(ngeoffray): This should really move to the backend. | 244 // TODO(ngeoffray): This should really move to the backend. |
246 cls.localMembers.forEach((Element member) { | 245 cls.localMembers.forEach((Element member) { |
247 if (!member.isInstanceMember() || !member.isField()) return; | 246 if (!member.isInstanceMember() || !member.isField()) return; |
248 DartType type = member.computeType(compiler); | 247 DartType type = member.computeType(compiler); |
249 registerIsCheck(type); | 248 registerIsCheck(type); |
250 SourceString helper = compiler.backend.getCheckedModeHelper(type); | 249 SourceString helper = compiler.backend.getCheckedModeHelper(type); |
251 if (helper != null) { | 250 if (helper != null) { |
252 Element helperElement = compiler.findHelper(helper); | 251 Element helperElement = compiler.findHelper(helper); |
253 registerStaticUse(helperElement); | 252 registerStaticUse(helperElement); |
254 } | 253 } |
255 }); | 254 }); |
256 } | 255 } |
257 } | 256 } |
| 257 processClass(cls); |
| 258 for (Link<DartType> supertypes = cls.allSupertypes; |
| 259 !supertypes.isEmpty; supertypes = supertypes.tail) { |
| 260 processClass(supertypes.head.element); |
| 261 } |
258 }); | 262 }); |
259 } | 263 } |
260 | 264 |
261 void registerNewSelector(SourceString name, | 265 void registerNewSelector(SourceString name, |
262 Selector selector, | 266 Selector selector, |
263 Map<SourceString, Set<Selector>> selectorsMap) { | 267 Map<SourceString, Set<Selector>> selectorsMap) { |
264 if (name != selector.name) { | 268 if (name != selector.name) { |
265 String message = "$name != ${selector.name} (${selector.kind})"; | 269 String message = "$name != ${selector.name} (${selector.kind})"; |
266 compiler.internalError("Wrong selector name: $message."); | 270 compiler.internalError("Wrong selector name: $message."); |
267 } | 271 } |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 | 402 |
399 String toString() => 'Enqueuer($name)'; | 403 String toString() => 'Enqueuer($name)'; |
400 | 404 |
401 void logSummary(log(message)) { | 405 void logSummary(log(message)) { |
402 log(isResolutionQueue | 406 log(isResolutionQueue |
403 ? 'Resolved ${resolvedElements.length} elements.' | 407 ? 'Resolved ${resolvedElements.length} elements.' |
404 : 'Compiled ${universe.generatedCode.length} methods.'); | 408 : 'Compiled ${universe.generatedCode.length} methods.'); |
405 nativeEnqueuer.logSummary(log); | 409 nativeEnqueuer.logSummary(log); |
406 } | 410 } |
407 } | 411 } |
OLD | NEW |