OLD | NEW |
---|---|
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 // TODO(jmesserly): this file needs to be refactored, it's a port from | 5 // TODO(jmesserly): this file needs to be refactored, it's a port from |
6 // package:dev_compiler's tests | 6 // package:dev_compiler's tests |
7 /// General type checking tests | 7 /// General type checking tests |
8 library analyzer.test.src.task.strong.checker_test; | 8 library analyzer.test.src.task.strong.checker_test; |
9 | 9 |
10 import 'package:unittest/unittest.dart'; | 10 import 'package:unittest/unittest.dart'; |
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
549 test('dynamic', () { | 549 test('dynamic', () { |
550 checkFile(''' | 550 checkFile(''' |
551 | 551 |
552 class A {} | 552 class A {} |
553 | 553 |
554 typedef dynamic Top(dynamic x); // Top of the lattice | 554 typedef dynamic Top(dynamic x); // Top of the lattice |
555 typedef dynamic Left(A x); // Left branch | 555 typedef dynamic Left(A x); // Left branch |
556 typedef A Right(dynamic x); // Right branch | 556 typedef A Right(dynamic x); // Right branch |
557 typedef A Bottom(A x); // Bottom of the lattice | 557 typedef A Bottom(A x); // Bottom of the lattice |
558 | 558 |
559 void main() { | |
560 Top top; | |
561 Left left; | |
562 Right right; | |
563 Bottom bot; | |
564 { | |
565 Top f; | |
566 f = top; | |
567 f = left; | |
568 f = right; | |
569 f = bot; | |
570 } | |
571 { | |
572 Left f; | |
573 f = /*warning:DOWN_CAST_COMPOSITE*/top; | |
574 f = left; | |
575 f = /*warning:DOWN_CAST_COMPOSITE*/right; | |
576 f = bot; | |
577 } | |
578 { | |
579 Right f; | |
580 f = /*warning:DOWN_CAST_COMPOSITE*/top; | |
581 f = /*warning:DOWN_CAST_COMPOSITE*/left; | |
582 f = right; | |
583 f = bot; | |
584 } | |
585 { | |
586 Bottom f; | |
587 f = /*warning:DOWN_CAST_COMPOSITE*/top; | |
588 f = /*warning:DOWN_CAST_COMPOSITE*/left; | |
589 f = /*warning:DOWN_CAST_COMPOSITE*/right; | |
590 f = bot; | |
591 } | |
592 } | |
593 '''); | |
594 }); | |
595 | |
596 test('dynamic - known functions', () { | |
597 checkFile(''' | |
598 | |
599 class A {} | |
Leaf
2016/02/16 20:30:43
A little pedantic, but I think it's worth getting
Jennifer Messerly
2016/02/17 20:13:23
Done!
* used that picture in a comment. Thanks :)
| |
600 | |
601 typedef dynamic Top(dynamic x); // Top of the lattice | |
602 typedef dynamic Left(A x); // Left branch | |
603 typedef A Right(dynamic x); // Right branch | |
604 typedef A Bottom(A x); // Bottom of the lattice | |
Leaf
2016/02/16 20:30:43
This is not the bottom type in this lattice.
Jennifer Messerly
2016/02/17 20:13:23
Fixed. See above.
| |
605 | |
559 dynamic left(A x) => x; | 606 dynamic left(A x) => x; |
560 A bot(A x) => x; | 607 A bot(A x) => x; |
Leaf
2016/02/16 20:30:43
This is not the bottom type in this lattice.
Jennifer Messerly
2016/02/17 20:13:23
Fixed. See above.
| |
561 dynamic top(dynamic x) => x; | 608 dynamic top(dynamic x) => x; |
Leaf
2016/02/16 20:30:43
This is not the top type in this lattice.
Jennifer Messerly
2016/02/17 20:13:23
Fixed. See above.
| |
562 A right(dynamic x) => /*info:DYNAMIC_CAST*/x; | 609 A right(dynamic x) => /*info:DYNAMIC_CAST*/x; |
Leaf
2016/02/16 20:30:43
This is the bottom type in this lattice.
Jennifer Messerly
2016/02/17 20:13:23
Fixed. See above.
| |
563 | 610 |
564 void main() { | 611 void main() { |
565 { | 612 { |
566 Top f; | 613 Top f; |
567 f = top; | 614 f = top; |
568 f = left; | 615 f = left; |
569 f = right; | 616 f = right; |
570 f = bot; | 617 f = bot; |
571 } | 618 } |
572 { | 619 { |
573 Left f; | 620 Left f; |
574 f = /*severe:STATIC_TYPE_ERROR*/top; | 621 f = top; |
575 f = left; | 622 f = left; |
576 f = /*severe:STATIC_TYPE_ERROR*/right; | 623 f = right; |
577 f = bot; | 624 f = bot; |
578 } | 625 } |
579 { | 626 { |
580 Right f; | 627 Right f; |
581 f = /*severe:STATIC_TYPE_ERROR*/top; | 628 f = /*severe:STATIC_TYPE_ERROR*/top; |
582 f = /*severe:STATIC_TYPE_ERROR*/left; | 629 f = /*severe:STATIC_TYPE_ERROR*/left; |
583 f = right; | 630 f = right; |
584 f = bot; | 631 f = bot; |
585 } | 632 } |
586 { | 633 { |
587 Bottom f; | 634 Bottom f; |
588 f = /*severe:STATIC_TYPE_ERROR*/top; | 635 f = /*severe:STATIC_TYPE_ERROR*/top; |
589 f = /*severe:STATIC_TYPE_ERROR*/left; | 636 f = /*severe:STATIC_TYPE_ERROR*/left; |
590 f = /*severe:STATIC_TYPE_ERROR*/right; | 637 f = right; |
591 f = bot; | 638 f = bot; |
592 } | 639 } |
593 } | 640 } |
594 '''); | 641 '''); |
595 }); | 642 }); |
596 | 643 |
597 test('function literal variance', () { | 644 test('function literal variance', () { |
598 checkFile(''' | 645 checkFile(''' |
599 | 646 |
600 class A {} | 647 class A {} |
(...skipping 2193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2794 | 2841 |
2795 baz1() sync* { yield* (/*info:DYNAMIC_CAST*/x); } | 2842 baz1() sync* { yield* (/*info:DYNAMIC_CAST*/x); } |
2796 Iterable baz2() sync* { yield* (/*info:DYNAMIC_CAST*/x); } | 2843 Iterable baz2() sync* { yield* (/*info:DYNAMIC_CAST*/x); } |
2797 Iterable<int> baz3() sync* { yield* (/*warning:DOWN_CAST_COMPOSITE*/x); } | 2844 Iterable<int> baz3() sync* { yield* (/*warning:DOWN_CAST_COMPOSITE*/x); } |
2798 Iterable<int> baz4() sync* { yield* new Iterable<int>(); } | 2845 Iterable<int> baz4() sync* { yield* new Iterable<int>(); } |
2799 Iterable<int> baz5() sync* { yield* (/*info:INFERRED_TYPE_ALLOCATION*/ne w Iterable()); } | 2846 Iterable<int> baz5() sync* { yield* (/*info:INFERRED_TYPE_ALLOCATION*/ne w Iterable()); } |
2800 '''); | 2847 '''); |
2801 }); | 2848 }); |
2802 }); | 2849 }); |
2803 } | 2850 } |
OLD | NEW |