| 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 library dart2js.world; | 5 library dart2js.world; |
| 6 | 6 |
| 7 import 'closure.dart' show | 7 import 'closure.dart' show |
| 8 SynthesizedCallMethodElementX; | 8 SynthesizedCallMethodElementX; |
| 9 import 'common/backend_api.dart' show | 9 import 'common/backend_api.dart' show |
| 10 Backend; | 10 Backend; |
| 11 import 'common/registry.dart' show | 11 import 'common/registry.dart' show |
| 12 Registry; | 12 Registry; |
| 13 import 'compiler.dart' show | 13 import 'compiler.dart' show |
| 14 Compiler; | 14 Compiler; |
| 15 import 'dart_types.dart'; | 15 import 'dart_types.dart'; |
| 16 import 'diagnostics/diagnostic_listener.dart' show |
| 17 DiagnosticReporter; |
| 16 import 'diagnostics/invariant.dart' show | 18 import 'diagnostics/invariant.dart' show |
| 17 invariant; | 19 invariant; |
| 18 import 'elements/elements.dart' show | 20 import 'elements/elements.dart' show |
| 19 ClassElement, | 21 ClassElement, |
| 20 Element, | 22 Element, |
| 21 FunctionElement, | 23 FunctionElement, |
| 22 MixinApplicationElement, | 24 MixinApplicationElement, |
| 23 TypedefElement, | 25 TypedefElement, |
| 24 VariableElement; | 26 VariableElement; |
| 25 import 'ordered_typeset.dart'; | 27 import 'ordered_typeset.dart'; |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 | 412 |
| 411 Set<ClassElement> typesImplementedBySubclassesOf(ClassElement cls) { | 413 Set<ClassElement> typesImplementedBySubclassesOf(ClassElement cls) { |
| 412 return _typesImplementedBySubclasses[cls.declaration]; | 414 return _typesImplementedBySubclasses[cls.declaration]; |
| 413 } | 415 } |
| 414 | 416 |
| 415 World(Compiler compiler) | 417 World(Compiler compiler) |
| 416 : allFunctions = new FunctionSet(compiler), | 418 : allFunctions = new FunctionSet(compiler), |
| 417 this.compiler = compiler, | 419 this.compiler = compiler, |
| 418 alreadyPopulated = compiler.cacheStrategy.newSet(); | 420 alreadyPopulated = compiler.cacheStrategy.newSet(); |
| 419 | 421 |
| 422 DiagnosticReporter get reporter => compiler.reporter; |
| 423 |
| 420 /// Called to add [cls] to the set of known classes. | 424 /// Called to add [cls] to the set of known classes. |
| 421 /// | 425 /// |
| 422 /// This ensures that class hierarchy queries can be performed on [cls] and | 426 /// This ensures that class hierarchy queries can be performed on [cls] and |
| 423 /// classes that extend or implement it. | 427 /// classes that extend or implement it. |
| 424 void registerClass(ClassElement cls) { | 428 void registerClass(ClassElement cls) { |
| 425 _ensureClassSet(cls); | 429 _ensureClassSet(cls); |
| 426 } | 430 } |
| 427 | 431 |
| 428 /// Returns [ClassHierarchyNode] for [cls] used to model the class hierarchies | 432 /// Returns [ClassHierarchyNode] for [cls] used to model the class hierarchies |
| 429 /// of known classes. | 433 /// of known classes. |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 cls.superclass, indirectlyInstantiated: true); | 497 cls.superclass, indirectlyInstantiated: true); |
| 494 } | 498 } |
| 495 } | 499 } |
| 496 | 500 |
| 497 void addSubtypes(ClassElement cls) { | 501 void addSubtypes(ClassElement cls) { |
| 498 if (compiler.hasIncrementalSupport && !alreadyPopulated.add(cls)) { | 502 if (compiler.hasIncrementalSupport && !alreadyPopulated.add(cls)) { |
| 499 return; | 503 return; |
| 500 } | 504 } |
| 501 assert(cls.isDeclaration); | 505 assert(cls.isDeclaration); |
| 502 if (!cls.isResolved) { | 506 if (!cls.isResolved) { |
| 503 compiler.internalError(cls, 'Class "${cls.name}" is not resolved.'); | 507 reporter.internalError(cls, 'Class "${cls.name}" is not resolved.'); |
| 504 } | 508 } |
| 505 | 509 |
| 506 updateClassHierarchyNodeForClass(cls, directlyInstantiated: true); | 510 updateClassHierarchyNodeForClass(cls, directlyInstantiated: true); |
| 507 | 511 |
| 508 // Walk through the superclasses, and record the types | 512 // Walk through the superclasses, and record the types |
| 509 // implemented by that type on the superclasses. | 513 // implemented by that type on the superclasses. |
| 510 ClassElement superclass = cls.superclass; | 514 ClassElement superclass = cls.superclass; |
| 511 while (superclass != null) { | 515 while (superclass != null) { |
| 512 Set<Element> typesImplementedBySubclassesOfCls = | 516 Set<Element> typesImplementedBySubclassesOfCls = |
| 513 _typesImplementedBySubclasses.putIfAbsent( | 517 _typesImplementedBySubclasses.putIfAbsent( |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 675 // function expressions's element. | 679 // function expressions's element. |
| 676 // TODO(herhut): Generate classes for function expressions earlier. | 680 // TODO(herhut): Generate classes for function expressions earlier. |
| 677 if (element is SynthesizedCallMethodElementX) { | 681 if (element is SynthesizedCallMethodElementX) { |
| 678 return getMightBePassedToApply(element.expression); | 682 return getMightBePassedToApply(element.expression); |
| 679 } | 683 } |
| 680 return functionsThatMightBePassedToApply.contains(element); | 684 return functionsThatMightBePassedToApply.contains(element); |
| 681 } | 685 } |
| 682 | 686 |
| 683 bool get hasClosedWorldAssumption => !compiler.hasIncrementalSupport; | 687 bool get hasClosedWorldAssumption => !compiler.hasIncrementalSupport; |
| 684 } | 688 } |
| OLD | NEW |