| 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 universe; | 5 library universe; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import '../common.dart'; | 9 import '../common.dart'; |
| 10 import '../compiler.dart' show Compiler; | 10 import '../compiler.dart' show Compiler; |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 break; | 372 break; |
| 373 case StaticUseKind.GENERAL: | 373 case StaticUseKind.GENERAL: |
| 374 case StaticUseKind.STATIC_TEAR_OFF: | 374 case StaticUseKind.STATIC_TEAR_OFF: |
| 375 case StaticUseKind.FIELD_GET: | 375 case StaticUseKind.FIELD_GET: |
| 376 case StaticUseKind.CONSTRUCTOR_INVOKE: | 376 case StaticUseKind.CONSTRUCTOR_INVOKE: |
| 377 case StaticUseKind.CONST_CONSTRUCTOR_INVOKE: | 377 case StaticUseKind.CONST_CONSTRUCTOR_INVOKE: |
| 378 break; | 378 break; |
| 379 case StaticUseKind.CLOSURE: | 379 case StaticUseKind.CLOSURE: |
| 380 allClosures.add(element); | 380 allClosures.add(element); |
| 381 break; | 381 break; |
| 382 case StaticUseKind.DIRECT_INVOKE: |
| 383 invariant( |
| 384 element, 'Direct static use is not supported for resolution.'); |
| 385 break; |
| 382 } | 386 } |
| 383 } | 387 } |
| 384 | 388 |
| 385 void forgetElement(Element element, Compiler compiler) { | 389 void forgetElement(Element element, Compiler compiler) { |
| 386 allClosures.remove(element); | 390 allClosures.remove(element); |
| 387 slowDirectlyNestedClosures(element).forEach(compiler.forgetElement); | 391 slowDirectlyNestedClosures(element).forEach(compiler.forgetElement); |
| 388 closurizedMembers.remove(element); | 392 closurizedMembers.remove(element); |
| 389 fieldSetters.remove(element); | 393 fieldSetters.remove(element); |
| 390 _directlyInstantiatedClasses.remove(element); | 394 _directlyInstantiatedClasses.remove(element); |
| 391 if (element is ClassElement) { | 395 if (element is ClassElement) { |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 ClassElement cls = type.element; | 516 ClassElement cls = type.element; |
| 513 if (!cls.isAbstract | 517 if (!cls.isAbstract |
| 514 // We can't use the closed-world assumption with native abstract | 518 // We can't use the closed-world assumption with native abstract |
| 515 // classes; a native abstract class may have non-abstract subclasses | 519 // classes; a native abstract class may have non-abstract subclasses |
| 516 // not declared to the program. Instances of these classes are | 520 // not declared to the program. Instances of these classes are |
| 517 // indistinguishable from the abstract class. | 521 // indistinguishable from the abstract class. |
| 518 || | 522 || |
| 519 isNative | 523 isNative |
| 520 // Likewise, if this registration comes from the mirror system, | 524 // Likewise, if this registration comes from the mirror system, |
| 521 // all bets are off. | 525 // all bets are off. |
| 522 // TODO(herhut): Track classes required by mirrors seperately. | 526 // TODO(herhut): Track classes required by mirrors separately. |
| 523 || | 527 || |
| 524 byMirrors) { | 528 byMirrors) { |
| 525 _directlyInstantiatedClasses.add(cls); | 529 _directlyInstantiatedClasses.add(cls); |
| 526 } | 530 } |
| 527 | 531 |
| 528 // TODO(johnniwinther): Replace this by separate more specific mappings that | 532 // TODO(johnniwinther): Replace this by separate more specific mappings that |
| 529 // include the type arguments. | 533 // include the type arguments. |
| 530 if (_implementedClasses.add(cls)) { | 534 if (_implementedClasses.add(cls)) { |
| 531 onImplemented(cls); | 535 onImplemented(cls); |
| 532 cls.allSupertypes.forEach((InterfaceType supertype) { | 536 cls.allSupertypes.forEach((InterfaceType supertype) { |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 case StaticUseKind.SUPER_TEAR_OFF: | 648 case StaticUseKind.SUPER_TEAR_OFF: |
| 645 methodsNeedingSuperGetter.add(element); | 649 methodsNeedingSuperGetter.add(element); |
| 646 break; | 650 break; |
| 647 case StaticUseKind.SUPER_FIELD_SET: | 651 case StaticUseKind.SUPER_FIELD_SET: |
| 648 case StaticUseKind.FIELD_SET: | 652 case StaticUseKind.FIELD_SET: |
| 649 case StaticUseKind.GENERAL: | 653 case StaticUseKind.GENERAL: |
| 650 case StaticUseKind.CLOSURE: | 654 case StaticUseKind.CLOSURE: |
| 651 case StaticUseKind.FIELD_GET: | 655 case StaticUseKind.FIELD_GET: |
| 652 case StaticUseKind.CONSTRUCTOR_INVOKE: | 656 case StaticUseKind.CONSTRUCTOR_INVOKE: |
| 653 case StaticUseKind.CONST_CONSTRUCTOR_INVOKE: | 657 case StaticUseKind.CONST_CONSTRUCTOR_INVOKE: |
| 658 case StaticUseKind.DIRECT_INVOKE: |
| 654 break; | 659 break; |
| 655 } | 660 } |
| 656 } | 661 } |
| 657 | 662 |
| 658 void forgetElement(Element element, Compiler compiler) { | 663 void forgetElement(Element element, Compiler compiler) { |
| 659 _directlyInstantiatedClasses.remove(element); | 664 _directlyInstantiatedClasses.remove(element); |
| 660 if (element is ClassElement) { | 665 if (element is ClassElement) { |
| 661 assert(invariant(element, element.thisType.isRaw, | 666 assert(invariant(element, element.thisType.isRaw, |
| 662 message: 'Generic classes not supported (${element.thisType}).')); | 667 message: 'Generic classes not supported (${element.thisType}).')); |
| 663 _instantiatedTypes..remove(element.rawType)..remove(element.thisType); | 668 _instantiatedTypes..remove(element.rawType)..remove(element.thisType); |
| 664 } | 669 } |
| 665 } | 670 } |
| 666 } | 671 } |
| OLD | NEW |