| 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 part of dart2js.semantics_visitor_test; | 5 part of dart2js.semantics_visitor_test; |
| 6 | 6 |
| 7 const Map<String, List<Test>> SEND_TESTS = const { | 7 const Map<String, List<Test>> SEND_TESTS = const { |
| 8 'Parameters': const [ | 8 'Parameters': const [ |
| 9 // Parameters | 9 // Parameters |
| 10 const Test('m(o) => o;', | 10 const Test('m(o) => o;', |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 element: 'function(m#o)', | 67 element: 'function(m#o)', |
| 68 arguments: '(null,42)', | 68 arguments: '(null,42)', |
| 69 selector: 'CallStructure(arity=2)')), | 69 selector: 'CallStructure(arity=2)')), |
| 70 const Test( | 70 const Test( |
| 71 'm() { o(a, b) {}; o = 42; }', | 71 'm() { o(a, b) {}; o = 42; }', |
| 72 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_SET, | 72 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_SET, |
| 73 element: 'function(m#o)', rhs: '42')), | 73 element: 'function(m#o)', rhs: '42')), |
| 74 ], | 74 ], |
| 75 'Static fields': const [ | 75 'Static fields': const [ |
| 76 // Static fields | 76 // Static fields |
| 77 const Test( | 77 const Test(''' |
| 78 ''' | |
| 79 class C { static var o; } | 78 class C { static var o; } |
| 80 m() => C.o; | 79 m() => C.o; |
| 81 ''', | 80 ''', |
| 82 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), | 81 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), |
| 83 const Test.clazz( | 82 const Test.clazz(''' |
| 84 ''' | |
| 85 class C { | 83 class C { |
| 86 static var o; | 84 static var o; |
| 87 m() => o; | 85 m() => o; |
| 88 } | 86 } |
| 89 ''', | 87 ''', |
| 90 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), | 88 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), |
| 91 const Test.clazz( | 89 const Test.clazz(''' |
| 92 ''' | |
| 93 class C { | 90 class C { |
| 94 static var o; | 91 static var o; |
| 95 m() => C.o; | 92 m() => C.o; |
| 96 } | 93 } |
| 97 ''', | 94 ''', |
| 98 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), | 95 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), |
| 99 const Test.prefix( | 96 const Test.prefix(''' |
| 100 ''' | |
| 101 class C { | 97 class C { |
| 102 static var o; | 98 static var o; |
| 103 } | 99 } |
| 104 ''', | 100 ''', 'm() => p.C.o;', |
| 105 'm() => p.C.o;', | |
| 106 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), | 101 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)')), |
| 107 const Test.clazz( | 102 const Test.clazz( |
| 108 ''' | 103 ''' |
| 109 class C { | 104 class C { |
| 110 var o; | 105 var o; |
| 111 static m() => o; | 106 static m() => o; |
| 112 } | 107 } |
| 113 ''', | 108 ''', |
| 114 const Visit(VisitKind.ERROR_INVALID_GET, | 109 const Visit(VisitKind.ERROR_INVALID_GET, |
| 115 error: MessageKind.NO_INSTANCE_AVAILABLE)), | 110 error: MessageKind.NO_INSTANCE_AVAILABLE)), |
| 116 const Test.prefix( | 111 const Test.prefix( |
| 117 ''' | 112 ''' |
| 118 class C { | 113 class C { |
| 119 static var o; | 114 static var o; |
| 120 } | 115 } |
| 121 ''', | 116 ''', |
| 122 'm() => p.C.o;', | 117 'm() => p.C.o;', |
| 123 const [ | 118 const [ |
| 124 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), | 119 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 125 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)'), | 120 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#o)'), |
| 126 ], | 121 ], |
| 127 isDeferred: true), | 122 isDeferred: true), |
| 128 const Test( | 123 const Test(''' |
| 129 ''' | |
| 130 class C { | 124 class C { |
| 131 var o; | 125 var o; |
| 132 } | 126 } |
| 133 m() => C.o; | 127 m() => C.o; |
| 134 ''', | 128 ''', const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 135 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), | 129 const Test(''' |
| 136 const Test( | |
| 137 ''' | |
| 138 class C { | 130 class C { |
| 139 var o; | 131 var o; |
| 140 } | 132 } |
| 141 m() { C.o = 42; } | 133 m() { C.o = 42; } |
| 142 ''', | 134 ''', const Visit(VisitKind.VISIT_UNRESOLVED_SET, name: 'o', rhs: '42')), |
| 143 const Visit(VisitKind.VISIT_UNRESOLVED_SET, name: 'o', rhs: '42')), | 135 const Test(''' |
| 144 const Test( | |
| 145 ''' | |
| 146 class C { | 136 class C { |
| 147 C.o(); | 137 C.o(); |
| 148 } | 138 } |
| 149 m() => C.o; | 139 m() => C.o; |
| 150 ''', | 140 ''', const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 151 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), | |
| 152 const Test.prefix( | 141 const Test.prefix( |
| 153 ''' | 142 ''' |
| 154 ''', | 143 ''', |
| 155 'm() => p.C.o;', | 144 'm() => p.C.o;', |
| 156 const [ | 145 const [ |
| 157 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, | 146 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, |
| 158 receiver: 'p.C', name: 'o'), | 147 receiver: 'p.C', name: 'o'), |
| 159 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'C'), | 148 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'C'), |
| 160 ]), | 149 ]), |
| 161 const Test.prefix( | 150 const Test.prefix(''' |
| 162 ''' | |
| 163 class C { | 151 class C { |
| 164 } | 152 } |
| 165 ''', | 153 ''', 'm() => p.C.o;', |
| 166 'm() => p.C.o;', | |
| 167 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), | 154 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 168 const Test.prefix( | 155 const Test.prefix( |
| 169 ''' | 156 ''' |
| 170 ''', | 157 ''', |
| 171 'm() => p.C.o;', | 158 'm() => p.C.o;', |
| 172 const [ | 159 const [ |
| 173 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, | 160 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, |
| 174 receiver: 'p.C', name: 'o'), | 161 receiver: 'p.C', name: 'o'), |
| 175 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), | 162 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 176 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'C'), | 163 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'C'), |
| 177 ], | 164 ], |
| 178 isDeferred: true), | 165 isDeferred: true), |
| 179 const Test.prefix( | 166 const Test.prefix( |
| 180 ''' | 167 ''' |
| 181 class C { | 168 class C { |
| 182 } | 169 } |
| 183 ''', | 170 ''', |
| 184 'm() => p.C.o;', | 171 'm() => p.C.o;', |
| 185 const [ | 172 const [ |
| 186 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), | 173 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 187 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o'), | 174 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o'), |
| 188 ], | 175 ], |
| 189 isDeferred: true), | 176 isDeferred: true), |
| 190 const Test( | 177 const Test(''' |
| 191 ''' | |
| 192 class C {} | 178 class C {} |
| 193 m() => C.this; | 179 m() => C.this; |
| 194 ''', | 180 ''', null), |
| 195 null), | |
| 196 const Test( | 181 const Test( |
| 197 ''' | 182 ''' |
| 198 class C { | 183 class C { |
| 199 static var o; | 184 static var o; |
| 200 } | 185 } |
| 201 m() { C.o = 42; } | 186 m() { C.o = 42; } |
| 202 ''', | 187 ''', |
| 203 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, | 188 const Visit(VisitKind.VISIT_STATIC_FIELD_SET, |
| 204 element: 'field(C#o)', rhs: '42')), | 189 element: 'field(C#o)', rhs: '42')), |
| 205 const Test.clazz( | 190 const Test.clazz( |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 class C { | 339 class C { |
| 355 static const o = 0; | 340 static const o = 0; |
| 356 } | 341 } |
| 357 ''', | 342 ''', |
| 358 'm() { p.C.o = 42; }', | 343 'm() { p.C.o = 42; }', |
| 359 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, | 344 const Visit(VisitKind.VISIT_FINAL_STATIC_FIELD_SET, |
| 360 element: 'field(C#o)', rhs: '42')), | 345 element: 'field(C#o)', rhs: '42')), |
| 361 ], | 346 ], |
| 362 'Static properties': const [ | 347 'Static properties': const [ |
| 363 // Static properties | 348 // Static properties |
| 364 const Test( | 349 const Test(''' |
| 365 ''' | |
| 366 class C { | 350 class C { |
| 367 static get o => null; | 351 static get o => null; |
| 368 } | 352 } |
| 369 m() => C.o; | 353 m() => C.o; |
| 370 ''', | 354 ''', |
| 371 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), | 355 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), |
| 372 const Test.clazz( | 356 const Test.clazz(''' |
| 373 ''' | |
| 374 class C { | 357 class C { |
| 375 static get o => null; | 358 static get o => null; |
| 376 m() => o; | 359 m() => o; |
| 377 } | 360 } |
| 378 ''', | 361 ''', |
| 379 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), | 362 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), |
| 380 const Test.clazz( | 363 const Test.clazz(''' |
| 381 ''' | |
| 382 class C { | 364 class C { |
| 383 static get o => null; | 365 static get o => null; |
| 384 m() => C.o; | 366 m() => C.o; |
| 385 } | 367 } |
| 386 ''', | 368 ''', |
| 387 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), | 369 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), |
| 388 const Test.prefix( | 370 const Test.prefix(''' |
| 389 ''' | |
| 390 class C { | 371 class C { |
| 391 static get o => null; | 372 static get o => null; |
| 392 } | 373 } |
| 393 ''', | 374 ''', 'm() => p.C.o;', |
| 394 'm() => p.C.o;', | |
| 395 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), | 375 const Visit(VisitKind.VISIT_STATIC_GETTER_GET, element: 'getter(C#o)')), |
| 396 const Test( | 376 const Test( |
| 397 ''' | 377 ''' |
| 398 class C { static get o => 42; } | 378 class C { static get o => 42; } |
| 399 m() { C.o = 42; } | 379 m() { C.o = 42; } |
| 400 ''', | 380 ''', |
| 401 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, | 381 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, |
| 402 element: 'getter(C#o)', rhs: '42')), | 382 element: 'getter(C#o)', rhs: '42')), |
| 403 const Test.clazz( | 383 const Test.clazz( |
| 404 ''' | 384 ''' |
| (...skipping 15 matching lines...) Expand all Loading... |
| 420 element: 'getter(C#o)', rhs: '42')), | 400 element: 'getter(C#o)', rhs: '42')), |
| 421 const Test.prefix( | 401 const Test.prefix( |
| 422 ''' | 402 ''' |
| 423 class C { | 403 class C { |
| 424 static get o => 42; | 404 static get o => 42; |
| 425 } | 405 } |
| 426 ''', | 406 ''', |
| 427 'm() { p.C.o = 42; }', | 407 'm() { p.C.o = 42; }', |
| 428 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, | 408 const Visit(VisitKind.VISIT_STATIC_GETTER_SET, |
| 429 element: 'getter(C#o)', rhs: '42')), | 409 element: 'getter(C#o)', rhs: '42')), |
| 430 const Test( | 410 const Test(''' |
| 431 ''' | |
| 432 class C { | 411 class C { |
| 433 static set o(_) {} | 412 static set o(_) {} |
| 434 } | 413 } |
| 435 m() => C.o; | 414 m() => C.o; |
| 436 ''', | 415 ''', |
| 437 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), | 416 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), |
| 438 const Test.clazz( | 417 const Test.clazz(''' |
| 439 ''' | |
| 440 class C { | 418 class C { |
| 441 static set o(_) {} | 419 static set o(_) {} |
| 442 m() => o; | 420 m() => o; |
| 443 } | 421 } |
| 444 ''', | 422 ''', |
| 445 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), | 423 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), |
| 446 | 424 |
| 447 const Test.clazz( | 425 const Test.clazz(''' |
| 448 ''' | |
| 449 class C { | 426 class C { |
| 450 static set o(_) {} | 427 static set o(_) {} |
| 451 m() => C.o; | 428 m() => C.o; |
| 452 } | 429 } |
| 453 ''', | 430 ''', |
| 454 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), | 431 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), |
| 455 const Test.prefix( | 432 const Test.prefix(''' |
| 456 ''' | |
| 457 class C { | 433 class C { |
| 458 static set o(_) {} | 434 static set o(_) {} |
| 459 } | 435 } |
| 460 ''', | 436 ''', 'm() => p.C.o;', |
| 461 'm() => p.C.o;', | |
| 462 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), | 437 const Visit(VisitKind.VISIT_STATIC_SETTER_GET, element: 'setter(C#o)')), |
| 463 const Test( | 438 const Test( |
| 464 ''' | 439 ''' |
| 465 class C { static set o(_) {} } | 440 class C { static set o(_) {} } |
| 466 m() { C.o = 42; } | 441 m() { C.o = 42; } |
| 467 ''', | 442 ''', |
| 468 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, | 443 const Visit(VisitKind.VISIT_STATIC_SETTER_SET, |
| 469 element: 'setter(C#o)', rhs: '42')), | 444 element: 'setter(C#o)', rhs: '42')), |
| 470 const Test.clazz( | 445 const Test.clazz( |
| 471 ''' | 446 ''' |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 const Test( | 645 const Test( |
| 671 ''' | 646 ''' |
| 672 class C { static o(a, b) {} } | 647 class C { static o(a, b) {} } |
| 673 m() => C.o(null); | 648 m() => C.o(null); |
| 674 ''', | 649 ''', |
| 675 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INCOMPATIBLE_INVOKE, | 650 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INCOMPATIBLE_INVOKE, |
| 676 element: 'function(C#o)', arguments: '(null)')), | 651 element: 'function(C#o)', arguments: '(null)')), |
| 677 ], | 652 ], |
| 678 'Top level fields': const [ | 653 'Top level fields': const [ |
| 679 // Top level fields | 654 // Top level fields |
| 680 const Test( | 655 const Test(''' |
| 681 ''' | |
| 682 var o; | 656 var o; |
| 683 m() => o; | 657 m() => o; |
| 684 ''', | 658 ''', |
| 685 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: 'field(o)')), | 659 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: 'field(o)')), |
| 686 const Test.prefix( | 660 const Test.prefix(''' |
| 687 ''' | |
| 688 var o; | 661 var o; |
| 689 ''', | 662 ''', 'm() => p.o;', |
| 690 'm() => p.o;', | |
| 691 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: 'field(o)')), | 663 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: 'field(o)')), |
| 692 const Test.prefix( | 664 const Test.prefix( |
| 693 ''' | 665 ''' |
| 694 var o; | 666 var o; |
| 695 ''', | 667 ''', |
| 696 'm() => p.o;', | 668 'm() => p.o;', |
| 697 const [ | 669 const [ |
| 698 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), | 670 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 699 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: 'field(o)'), | 671 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: 'field(o)'), |
| 700 ], | 672 ], |
| 701 isDeferred: true), | 673 isDeferred: true), |
| 702 const Test.prefix( | 674 const Test.prefix(''' |
| 703 ''' | 675 ''', 'm() => p.o;', |
| 704 ''', | |
| 705 'm() => p.o;', | |
| 706 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), | 676 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 707 const Test.prefix( | 677 const Test.prefix( |
| 708 ''' | 678 ''' |
| 709 ''', | 679 ''', |
| 710 'm() => p.o;', | 680 'm() => p.o;', |
| 711 const [ | 681 const [ |
| 712 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), | 682 const Visit(VisitKind.PREVISIT_DEFERRED_ACCESS, element: 'prefix(p)'), |
| 713 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o'), | 683 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o'), |
| 714 ], | 684 ], |
| 715 isDeferred: true), | 685 isDeferred: true), |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 ''', | 750 ''', |
| 781 'm() { p.o(null, 42); }', | 751 'm() { p.o(null, 42); }', |
| 782 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE, | 752 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE, |
| 783 element: 'field(o)', arguments: '(null,42)')), | 753 element: 'field(o)', arguments: '(null,42)')), |
| 784 const Test.prefix( | 754 const Test.prefix( |
| 785 ''' | 755 ''' |
| 786 ''', | 756 ''', |
| 787 'm() { p(null, 42); }', | 757 'm() { p(null, 42); }', |
| 788 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 758 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 789 error: MessageKind.PREFIX_AS_EXPRESSION, arguments: '(null,42)')), | 759 error: MessageKind.PREFIX_AS_EXPRESSION, arguments: '(null,42)')), |
| 790 const Test( | 760 const Test(''' |
| 791 ''' | |
| 792 m() => o; | 761 m() => o; |
| 793 ''', | 762 ''', const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), |
| 794 const Visit(VisitKind.VISIT_UNRESOLVED_GET, name: 'o')), | 763 const Test(''' |
| 795 const Test( | |
| 796 ''' | |
| 797 m() { o = 42; } | 764 m() { o = 42; } |
| 798 ''', | 765 ''', const Visit(VisitKind.VISIT_UNRESOLVED_SET, name: 'o', rhs: '42')), |
| 799 const Visit(VisitKind.VISIT_UNRESOLVED_SET, name: 'o', rhs: '42')), | |
| 800 ], | 766 ], |
| 801 'Top level properties': const [ | 767 'Top level properties': const [ |
| 802 // Top level properties | 768 // Top level properties |
| 803 const Test( | 769 const Test( |
| 804 ''' | 770 ''' |
| 805 get o => null; | 771 get o => null; |
| 806 m() => o; | 772 m() => o; |
| 807 ''', | 773 ''', |
| 808 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET, | 774 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET, |
| 809 element: 'getter(o)')), | 775 element: 'getter(o)')), |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 986 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#o)'), | 952 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#o)'), |
| 987 ]), | 953 ]), |
| 988 const Test('m(o) { o.foo(null, 42); }', const [ | 954 const Test('m(o) { o.foo(null, 42); }', const [ |
| 989 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE, | 955 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE, |
| 990 receiver: 'o', name: 'foo', arguments: '(null,42)'), | 956 receiver: 'o', name: 'foo', arguments: '(null,42)'), |
| 991 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#o)'), | 957 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#o)'), |
| 992 ]), | 958 ]), |
| 993 ], | 959 ], |
| 994 'This access': const [ | 960 'This access': const [ |
| 995 // This access | 961 // This access |
| 996 const Test.clazz( | 962 const Test.clazz(''' |
| 997 ''' | |
| 998 class C { | 963 class C { |
| 999 m() => this; | 964 m() => this; |
| 1000 } | 965 } |
| 1001 ''', | 966 ''', const Visit(VisitKind.VISIT_THIS_GET)), |
| 1002 const Visit(VisitKind.VISIT_THIS_GET)), | 967 const Test.clazz(''' |
| 1003 const Test.clazz( | |
| 1004 ''' | |
| 1005 class C { | 968 class C { |
| 1006 call(a, b) {} | 969 call(a, b) {} |
| 1007 m() { this(null, 42); } | 970 m() { this(null, 42); } |
| 1008 } | 971 } |
| 1009 ''', | 972 ''', const Visit(VisitKind.VISIT_THIS_INVOKE, arguments: '(null,42)')), |
| 1010 const Visit(VisitKind.VISIT_THIS_INVOKE, arguments: '(null,42)')), | |
| 1011 const Test.clazz( | 973 const Test.clazz( |
| 1012 ''' | 974 ''' |
| 1013 class C { | 975 class C { |
| 1014 call(a, b) {} | 976 call(a, b) {} |
| 1015 static m() { this(null, 42); } | 977 static m() { this(null, 42); } |
| 1016 } | 978 } |
| 1017 ''', | 979 ''', |
| 1018 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 980 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 1019 error: MessageKind.NO_THIS_AVAILABLE, arguments: '(null,42)')), | 981 error: MessageKind.NO_THIS_AVAILABLE, arguments: '(null,42)')), |
| 1020 ], | 982 ], |
| 1021 'This properties': const [ | 983 'This properties': const [ |
| 1022 // This properties | 984 // This properties |
| 1023 const Test.clazz( | 985 const Test.clazz(''' |
| 1024 ''' | |
| 1025 class C { | 986 class C { |
| 1026 var foo; | 987 var foo; |
| 1027 m() => foo; | 988 m() => foo; |
| 1028 } | 989 } |
| 1029 ''', | 990 ''', const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), |
| 1030 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), | 991 const Test.clazz(''' |
| 1031 const Test.clazz( | |
| 1032 ''' | |
| 1033 class C { | 992 class C { |
| 1034 var foo; | 993 var foo; |
| 1035 m() => this.foo; | 994 m() => this.foo; |
| 1036 } | 995 } |
| 1037 ''', | 996 ''', const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), |
| 1038 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), | 997 const Test.clazz(''' |
| 1039 const Test.clazz( | |
| 1040 ''' | |
| 1041 class C { | 998 class C { |
| 1042 get foo => null; | 999 get foo => null; |
| 1043 m() => foo; | 1000 m() => foo; |
| 1044 } | 1001 } |
| 1045 ''', | 1002 ''', const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), |
| 1046 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), | |
| 1047 const Test.clazz( | 1003 const Test.clazz( |
| 1048 ''' | 1004 ''' |
| 1049 class C { | 1005 class C { |
| 1050 var foo; | 1006 var foo; |
| 1051 static m() => this.foo; | 1007 static m() => this.foo; |
| 1052 } | 1008 } |
| 1053 ''', | 1009 ''', |
| 1054 const Visit(VisitKind.ERROR_INVALID_GET, | 1010 const Visit(VisitKind.ERROR_INVALID_GET, |
| 1055 error: MessageKind.NO_THIS_AVAILABLE)), | 1011 error: MessageKind.NO_THIS_AVAILABLE)), |
| 1056 const Test.clazz( | 1012 const Test.clazz(''' |
| 1057 ''' | |
| 1058 class C { | 1013 class C { |
| 1059 get foo => null; | 1014 get foo => null; |
| 1060 m() => this.foo; | 1015 m() => this.foo; |
| 1061 } | 1016 } |
| 1062 ''', | 1017 ''', const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), |
| 1063 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET, name: 'foo')), | 1018 const Test.clazz(''' |
| 1064 const Test.clazz( | |
| 1065 ''' | |
| 1066 class C { | 1019 class C { |
| 1067 var foo; | 1020 var foo; |
| 1068 m() { foo = 42; } | 1021 m() { foo = 42; } |
| 1069 } | 1022 } |
| 1070 ''', | 1023 ''', |
| 1071 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), | 1024 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), |
| 1072 const Test.clazz( | 1025 const Test.clazz(''' |
| 1073 ''' | |
| 1074 class C { | 1026 class C { |
| 1075 var foo; | 1027 var foo; |
| 1076 m() { this.foo = 42; } | 1028 m() { this.foo = 42; } |
| 1077 } | 1029 } |
| 1078 ''', | 1030 ''', |
| 1079 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), | 1031 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), |
| 1080 const Test.clazz( | 1032 const Test.clazz(''' |
| 1081 ''' | |
| 1082 class C { | 1033 class C { |
| 1083 set foo(_) {} | 1034 set foo(_) {} |
| 1084 m() { foo = 42; } | 1035 m() { foo = 42; } |
| 1085 } | 1036 } |
| 1086 ''', | 1037 ''', |
| 1087 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), | 1038 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), |
| 1088 const Test.clazz( | 1039 const Test.clazz(''' |
| 1089 ''' | |
| 1090 class C { | 1040 class C { |
| 1091 set foo(_) {} | 1041 set foo(_) {} |
| 1092 m() { this.foo = 42; } | 1042 m() { this.foo = 42; } |
| 1093 } | 1043 } |
| 1094 ''', | 1044 ''', |
| 1095 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), | 1045 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET, name: 'foo', rhs: '42')), |
| 1096 const Test.clazz( | 1046 const Test.clazz( |
| 1097 ''' | 1047 ''' |
| 1098 class C { | 1048 class C { |
| 1099 var foo; | 1049 var foo; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1116 class C { | 1066 class C { |
| 1117 var foo; | 1067 var foo; |
| 1118 static m() { this.foo(null, 42); } | 1068 static m() { this.foo(null, 42); } |
| 1119 } | 1069 } |
| 1120 ''', | 1070 ''', |
| 1121 const Visit(VisitKind.ERROR_INVALID_INVOKE, | 1071 const Visit(VisitKind.ERROR_INVALID_INVOKE, |
| 1122 error: MessageKind.NO_THIS_AVAILABLE, arguments: '(null,42)')), | 1072 error: MessageKind.NO_THIS_AVAILABLE, arguments: '(null,42)')), |
| 1123 ], | 1073 ], |
| 1124 'Super fields': const [ | 1074 'Super fields': const [ |
| 1125 // Super fields | 1075 // Super fields |
| 1126 const Test.clazz( | 1076 const Test.clazz(''' |
| 1127 ''' | |
| 1128 class B { | 1077 class B { |
| 1129 var o; | 1078 var o; |
| 1130 } | 1079 } |
| 1131 class C extends B { | 1080 class C extends B { |
| 1132 m() => super.o; | 1081 m() => super.o; |
| 1133 } | 1082 } |
| 1134 ''', | 1083 ''', |
| 1135 const Visit(VisitKind.VISIT_SUPER_FIELD_GET, element: 'field(B#o)')), | 1084 const Visit(VisitKind.VISIT_SUPER_FIELD_GET, element: 'field(B#o)')), |
| 1136 const Test.clazz( | 1085 const Test.clazz( |
| 1137 ''' | 1086 ''' |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1159 ''' | 1108 ''' |
| 1160 class B { | 1109 class B { |
| 1161 var o; | 1110 var o; |
| 1162 } | 1111 } |
| 1163 class C extends B { | 1112 class C extends B { |
| 1164 m() { super.o(null, 42); } | 1113 m() { super.o(null, 42); } |
| 1165 } | 1114 } |
| 1166 ''', | 1115 ''', |
| 1167 const Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE, | 1116 const Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE, |
| 1168 element: 'field(B#o)', arguments: '(null,42)')), | 1117 element: 'field(B#o)', arguments: '(null,42)')), |
| 1169 const Test.clazz( | 1118 const Test.clazz(''' |
| 1170 ''' | |
| 1171 class B { | 1119 class B { |
| 1172 } | 1120 } |
| 1173 class C extends B { | 1121 class C extends B { |
| 1174 m() => super.o; | 1122 m() => super.o; |
| 1175 } | 1123 } |
| 1176 ''', | 1124 ''', const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GET)), |
| 1177 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_GET)), | 1125 const Test.clazz(''' |
| 1178 const Test.clazz( | |
| 1179 ''' | |
| 1180 class B { | 1126 class B { |
| 1181 } | 1127 } |
| 1182 class C extends B { | 1128 class C extends B { |
| 1183 m() => super.o = 42; | 1129 m() => super.o = 42; |
| 1184 } | 1130 } |
| 1185 ''', | 1131 ''', const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SET, rhs: '42')), |
| 1186 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_SET, rhs: '42')), | |
| 1187 ], | 1132 ], |
| 1188 'Super properties': const [ | 1133 'Super properties': const [ |
| 1189 // Super properties | 1134 // Super properties |
| 1190 const Test.clazz( | 1135 const Test.clazz(''' |
| 1191 ''' | |
| 1192 class B { | 1136 class B { |
| 1193 get o => null; | 1137 get o => null; |
| 1194 } | 1138 } |
| 1195 class C extends B { | 1139 class C extends B { |
| 1196 m() => super.o; | 1140 m() => super.o; |
| 1197 } | 1141 } |
| 1198 ''', | 1142 ''', |
| 1199 const Visit(VisitKind.VISIT_SUPER_GETTER_GET, element: 'getter(B#o)')), | 1143 const Visit(VisitKind.VISIT_SUPER_GETTER_GET, element: 'getter(B#o)')), |
| 1200 const Test.clazz( | 1144 const Test.clazz(''' |
| 1201 ''' | |
| 1202 class B { | 1145 class B { |
| 1203 set o(_) {} | 1146 set o(_) {} |
| 1204 } | 1147 } |
| 1205 class C extends B { | 1148 class C extends B { |
| 1206 m() => super.o; | 1149 m() => super.o; |
| 1207 } | 1150 } |
| 1208 ''', | 1151 ''', |
| 1209 const Visit(VisitKind.VISIT_SUPER_SETTER_GET, element: 'setter(B#o)')), | 1152 const Visit(VisitKind.VISIT_SUPER_SETTER_GET, element: 'setter(B#o)')), |
| 1210 const Test.clazz( | 1153 const Test.clazz( |
| 1211 ''' | 1154 ''' |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1311 ], | 1254 ], |
| 1312 'Expression invoke': const [ | 1255 'Expression invoke': const [ |
| 1313 // Expression invoke | 1256 // Expression invoke |
| 1314 const Test( | 1257 const Test( |
| 1315 'm() => (a, b){}(null, 42);', | 1258 'm() => (a, b){}(null, 42);', |
| 1316 const Visit(VisitKind.VISIT_EXPRESSION_INVOKE, | 1259 const Visit(VisitKind.VISIT_EXPRESSION_INVOKE, |
| 1317 receiver: '(a,b){}', arguments: '(null,42)')), | 1260 receiver: '(a,b){}', arguments: '(null,42)')), |
| 1318 ], | 1261 ], |
| 1319 'Class type literals': const [ | 1262 'Class type literals': const [ |
| 1320 // Class type literals | 1263 // Class type literals |
| 1321 const Test( | 1264 const Test(''' |
| 1322 ''' | |
| 1323 class C {} | 1265 class C {} |
| 1324 m() => C; | 1266 m() => C; |
| 1325 ''', | 1267 ''', |
| 1326 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, constant: 'C')), | 1268 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, constant: 'C')), |
| 1327 const Test( | 1269 const Test( |
| 1328 ''' | 1270 ''' |
| 1329 class C {} | 1271 class C {} |
| 1330 m() => C(null, 42); | 1272 m() => C(null, 42); |
| 1331 ''', | 1273 ''', |
| 1332 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE, | 1274 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE, |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1359 ''', | 1301 ''', |
| 1360 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_PREFIX, | 1302 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_PREFIX, |
| 1361 constant: 'C', operator: '++')), | 1303 constant: 'C', operator: '++')), |
| 1362 const Test( | 1304 const Test( |
| 1363 ''' | 1305 ''' |
| 1364 class C {} | 1306 class C {} |
| 1365 m() => C--; | 1307 m() => C--; |
| 1366 ''', | 1308 ''', |
| 1367 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_POSTFIX, | 1309 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_POSTFIX, |
| 1368 constant: 'C', operator: '--')), | 1310 constant: 'C', operator: '--')), |
| 1369 const Test( | 1311 const Test(''' |
| 1370 ''' | |
| 1371 class C {} | 1312 class C {} |
| 1372 m() => (C).hashCode; | 1313 m() => (C).hashCode; |
| 1373 ''', | 1314 ''', const [ |
| 1374 const [ | 1315 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, |
| 1375 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET, | 1316 receiver: '(C)', name: 'hashCode'), |
| 1376 receiver: '(C)', name: 'hashCode'), | 1317 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, constant: 'C'), |
| 1377 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET, constant: 'C'), | 1318 ]), |
| 1378 ]), | |
| 1379 ], | 1319 ], |
| 1380 'Typedef type literals': const [ | 1320 'Typedef type literals': const [ |
| 1381 // Typedef type literals | 1321 // Typedef type literals |
| 1382 const Test( | 1322 const Test(''' |
| 1383 ''' | |
| 1384 typedef F(); | 1323 typedef F(); |
| 1385 m() => F; | 1324 m() => F; |
| 1386 ''', | 1325 ''', |
| 1387 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET, constant: 'F')), | 1326 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET, constant: 'F')), |
| 1388 const Test( | 1327 const Test( |
| 1389 ''' | 1328 ''' |
| 1390 typedef F(); | 1329 typedef F(); |
| 1391 m() => F(null, 42); | 1330 m() => F(null, 42); |
| 1392 ''', | 1331 ''', |
| 1393 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE, | 1332 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE, |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1587 // Assert | 1526 // Assert |
| 1588 const Test( | 1527 const Test( |
| 1589 ''' | 1528 ''' |
| 1590 m() { assert(m()); } | 1529 m() { assert(m()); } |
| 1591 ''', | 1530 ''', |
| 1592 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, | 1531 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE, |
| 1593 element: 'function(m)', arguments: '()')), | 1532 element: 'function(m)', arguments: '()')), |
| 1594 ], | 1533 ], |
| 1595 'Logical and': const [ | 1534 'Logical and': const [ |
| 1596 // Logical and | 1535 // Logical and |
| 1597 const Test( | 1536 const Test(''' |
| 1598 ''' | |
| 1599 m() => true && false; | 1537 m() => true && false; |
| 1600 ''', | 1538 ''', |
| 1601 const Visit(VisitKind.VISIT_LOGICAL_AND, left: 'true', right: 'false')), | 1539 const Visit(VisitKind.VISIT_LOGICAL_AND, left: 'true', right: 'false')), |
| 1602 ], | 1540 ], |
| 1603 'Logical or': const [ | 1541 'Logical or': const [ |
| 1604 // Logical or | 1542 // Logical or |
| 1605 const Test( | 1543 const Test(''' |
| 1606 ''' | |
| 1607 m() => true || false; | 1544 m() => true || false; |
| 1608 ''', | 1545 ''', |
| 1609 const Visit(VisitKind.VISIT_LOGICAL_OR, left: 'true', right: 'false')), | 1546 const Visit(VisitKind.VISIT_LOGICAL_OR, left: 'true', right: 'false')), |
| 1610 ], | 1547 ], |
| 1611 'Is test': const [ | 1548 'Is test': const [ |
| 1612 // Is test | 1549 // Is test |
| 1613 const Test( | 1550 const Test(''' |
| 1614 ''' | |
| 1615 class C {} | 1551 class C {} |
| 1616 m() => 0 is C; | 1552 m() => 0 is C; |
| 1617 ''', | 1553 ''', const Visit(VisitKind.VISIT_IS, expression: '0', type: 'C')), |
| 1618 const Visit(VisitKind.VISIT_IS, expression: '0', type: 'C')), | |
| 1619 ], | 1554 ], |
| 1620 'Is not test': const [ | 1555 'Is not test': const [ |
| 1621 // Is not test | 1556 // Is not test |
| 1622 const Test( | 1557 const Test(''' |
| 1623 ''' | |
| 1624 class C {} | 1558 class C {} |
| 1625 m() => 0 is! C; | 1559 m() => 0 is! C; |
| 1626 ''', | 1560 ''', const Visit(VisitKind.VISIT_IS_NOT, expression: '0', type: 'C')), |
| 1627 const Visit(VisitKind.VISIT_IS_NOT, expression: '0', type: 'C')), | |
| 1628 ], | 1561 ], |
| 1629 'As test': const [ | 1562 'As test': const [ |
| 1630 // As test | 1563 // As test |
| 1631 const Test( | 1564 const Test(''' |
| 1632 ''' | |
| 1633 class C {} | 1565 class C {} |
| 1634 m() => 0 as C; | 1566 m() => 0 as C; |
| 1635 ''', | 1567 ''', const Visit(VisitKind.VISIT_AS, expression: '0', type: 'C')), |
| 1636 const Visit(VisitKind.VISIT_AS, expression: '0', type: 'C')), | |
| 1637 ], | 1568 ], |
| 1638 'Binary operators': const [ | 1569 'Binary operators': const [ |
| 1639 // Binary operators | 1570 // Binary operators |
| 1640 const Test( | 1571 const Test( |
| 1641 ''' | 1572 ''' |
| 1642 m() => 2 + 3; | 1573 m() => 2 + 3; |
| 1643 ''', | 1574 ''', |
| 1644 const Visit(VisitKind.VISIT_BINARY, | 1575 const Visit(VisitKind.VISIT_BINARY, |
| 1645 left: '2', operator: '+', right: '3')), | 1576 left: '2', operator: '+', right: '3')), |
| 1646 const Test( | 1577 const Test( |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1766 } | 1697 } |
| 1767 class C extends B { | 1698 class C extends B { |
| 1768 static m() => super + 42; | 1699 static m() => super + 42; |
| 1769 } | 1700 } |
| 1770 ''', | 1701 ''', |
| 1771 const Visit(VisitKind.ERROR_INVALID_BINARY, | 1702 const Visit(VisitKind.ERROR_INVALID_BINARY, |
| 1772 error: MessageKind.NO_SUPER_IN_STATIC, operator: '+', right: '42')), | 1703 error: MessageKind.NO_SUPER_IN_STATIC, operator: '+', right: '42')), |
| 1773 ], | 1704 ], |
| 1774 'Index': const [ | 1705 'Index': const [ |
| 1775 // Index | 1706 // Index |
| 1776 const Test( | 1707 const Test(''' |
| 1777 ''' | |
| 1778 m() => 2[3]; | 1708 m() => 2[3]; |
| 1779 ''', | 1709 ''', const Visit(VisitKind.VISIT_INDEX, receiver: '2', index: '3')), |
| 1780 const Visit(VisitKind.VISIT_INDEX, receiver: '2', index: '3')), | |
| 1781 const Test( | 1710 const Test( |
| 1782 ''' | 1711 ''' |
| 1783 m() => --2[3]; | 1712 m() => --2[3]; |
| 1784 ''', | 1713 ''', |
| 1785 const Visit(VisitKind.VISIT_INDEX_PREFIX, | 1714 const Visit(VisitKind.VISIT_INDEX_PREFIX, |
| 1786 receiver: '2', index: '3', operator: '--')), | 1715 receiver: '2', index: '3', operator: '--')), |
| 1787 const Test( | 1716 const Test( |
| 1788 ''' | 1717 ''' |
| 1789 m() => 2[3]++; | 1718 m() => 2[3]++; |
| 1790 ''', | 1719 ''', |
| 1791 const Visit(VisitKind.VISIT_INDEX_POSTFIX, | 1720 const Visit(VisitKind.VISIT_INDEX_POSTFIX, |
| 1792 receiver: '2', index: '3', operator: '++')), | 1721 receiver: '2', index: '3', operator: '++')), |
| 1793 const Test.clazz( | 1722 const Test.clazz( |
| 1794 ''' | 1723 ''' |
| 1795 class B { | 1724 class B { |
| 1796 operator [](_) => null; | 1725 operator [](_) => null; |
| 1797 } | 1726 } |
| 1798 class C extends B { | 1727 class C extends B { |
| 1799 m() => super[42]; | 1728 m() => super[42]; |
| 1800 } | 1729 } |
| 1801 ''', | 1730 ''', |
| 1802 const Visit(VisitKind.VISIT_SUPER_INDEX, | 1731 const Visit(VisitKind.VISIT_SUPER_INDEX, |
| 1803 element: 'function(B#[])', index: '42')), | 1732 element: 'function(B#[])', index: '42')), |
| 1804 const Test.clazz( | 1733 const Test.clazz(''' |
| 1805 ''' | |
| 1806 class B { | 1734 class B { |
| 1807 } | 1735 } |
| 1808 class C extends B { | 1736 class C extends B { |
| 1809 m() => super[42]; | 1737 m() => super[42]; |
| 1810 } | 1738 } |
| 1811 ''', | 1739 ''', const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX, index: '42')), |
| 1812 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX, index: '42')), | |
| 1813 const Test.clazz( | 1740 const Test.clazz( |
| 1814 ''' | 1741 ''' |
| 1815 class B { | 1742 class B { |
| 1816 operator [](_) => null; | 1743 operator [](_) => null; |
| 1817 } | 1744 } |
| 1818 class C extends B { | 1745 class C extends B { |
| 1819 static m() => super[42]; | 1746 static m() => super[42]; |
| 1820 } | 1747 } |
| 1821 ''', | 1748 ''', |
| 1822 const Visit(VisitKind.ERROR_INVALID_INDEX, | 1749 const Visit(VisitKind.ERROR_INVALID_INDEX, |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1992 } | 1919 } |
| 1993 class C extends B { | 1920 class C extends B { |
| 1994 m() => super[42] ??= 0; | 1921 m() => super[42] ??= 0; |
| 1995 } | 1922 } |
| 1996 ''', | 1923 ''', |
| 1997 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_SET_IF_NULL, | 1924 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_INDEX_SET_IF_NULL, |
| 1998 index: '42', rhs: '0')), | 1925 index: '42', rhs: '0')), |
| 1999 ], | 1926 ], |
| 2000 'Equals': const [ | 1927 'Equals': const [ |
| 2001 // Equals | 1928 // Equals |
| 2002 const Test( | 1929 const Test(''' |
| 2003 ''' | |
| 2004 m() => 2 == 3; | 1930 m() => 2 == 3; |
| 2005 ''', | 1931 ''', const Visit(VisitKind.VISIT_EQUALS, left: '2', right: '3')), |
| 2006 const Visit(VisitKind.VISIT_EQUALS, left: '2', right: '3')), | |
| 2007 const Test.clazz( | 1932 const Test.clazz( |
| 2008 ''' | 1933 ''' |
| 2009 class B { | 1934 class B { |
| 2010 operator ==(_) => null; | 1935 operator ==(_) => null; |
| 2011 } | 1936 } |
| 2012 class C extends B { | 1937 class C extends B { |
| 2013 m() => super == 42; | 1938 m() => super == 42; |
| 2014 } | 1939 } |
| 2015 ''', | 1940 ''', |
| 2016 const Visit(VisitKind.VISIT_SUPER_EQUALS, | 1941 const Visit(VisitKind.VISIT_SUPER_EQUALS, |
| 2017 element: 'function(B#==)', right: '42')), | 1942 element: 'function(B#==)', right: '42')), |
| 2018 const Test.clazz( | 1943 const Test.clazz( |
| 2019 ''' | 1944 ''' |
| 2020 class B { | 1945 class B { |
| 2021 operator ==(_) => null; | 1946 operator ==(_) => null; |
| 2022 } | 1947 } |
| 2023 class C extends B { | 1948 class C extends B { |
| 2024 static m() => super == 42; | 1949 static m() => super == 42; |
| 2025 } | 1950 } |
| 2026 ''', | 1951 ''', |
| 2027 const Visit(VisitKind.ERROR_INVALID_EQUALS, | 1952 const Visit(VisitKind.ERROR_INVALID_EQUALS, |
| 2028 error: MessageKind.NO_SUPER_IN_STATIC, right: '42')), | 1953 error: MessageKind.NO_SUPER_IN_STATIC, right: '42')), |
| 2029 ], | 1954 ], |
| 2030 'Not equals': const [ | 1955 'Not equals': const [ |
| 2031 // Not equals | 1956 // Not equals |
| 2032 const Test( | 1957 const Test(''' |
| 2033 ''' | |
| 2034 m() => 2 != 3; | 1958 m() => 2 != 3; |
| 2035 ''', | 1959 ''', const Visit(VisitKind.VISIT_NOT_EQUALS, left: '2', right: '3')), |
| 2036 const Visit(VisitKind.VISIT_NOT_EQUALS, left: '2', right: '3')), | |
| 2037 const Test.clazz( | 1960 const Test.clazz( |
| 2038 ''' | 1961 ''' |
| 2039 class B { | 1962 class B { |
| 2040 operator ==(_) => null; | 1963 operator ==(_) => null; |
| 2041 } | 1964 } |
| 2042 class C extends B { | 1965 class C extends B { |
| 2043 m() => super != 42; | 1966 m() => super != 42; |
| 2044 } | 1967 } |
| 2045 ''', | 1968 ''', |
| 2046 const Visit(VisitKind.VISIT_SUPER_NOT_EQUALS, | 1969 const Visit(VisitKind.VISIT_SUPER_NOT_EQUALS, |
| 2047 element: 'function(B#==)', right: '42')), | 1970 element: 'function(B#==)', right: '42')), |
| 2048 const Test.clazz( | 1971 const Test.clazz( |
| 2049 ''' | 1972 ''' |
| 2050 class B { | 1973 class B { |
| 2051 operator ==(_) => null; | 1974 operator ==(_) => null; |
| 2052 } | 1975 } |
| 2053 class C extends B { | 1976 class C extends B { |
| 2054 static m() => super != 42; | 1977 static m() => super != 42; |
| 2055 } | 1978 } |
| 2056 ''', | 1979 ''', |
| 2057 const Visit(VisitKind.ERROR_INVALID_NOT_EQUALS, | 1980 const Visit(VisitKind.ERROR_INVALID_NOT_EQUALS, |
| 2058 error: MessageKind.NO_SUPER_IN_STATIC, right: '42')), | 1981 error: MessageKind.NO_SUPER_IN_STATIC, right: '42')), |
| 2059 ], | 1982 ], |
| 2060 'Unary expression': const [ | 1983 'Unary expression': const [ |
| 2061 // Unary expression | 1984 // Unary expression |
| 2062 const Test( | 1985 const Test(''' |
| 2063 ''' | |
| 2064 m() => -false; | 1986 m() => -false; |
| 2065 ''', | 1987 ''', |
| 2066 const Visit(VisitKind.VISIT_UNARY, expression: 'false', operator: '-')), | 1988 const Visit(VisitKind.VISIT_UNARY, expression: 'false', operator: '-')), |
| 2067 const Test( | 1989 const Test(''' |
| 2068 ''' | |
| 2069 m() => ~false; | 1990 m() => ~false; |
| 2070 ''', | 1991 ''', |
| 2071 const Visit(VisitKind.VISIT_UNARY, expression: 'false', operator: '~')), | 1992 const Visit(VisitKind.VISIT_UNARY, expression: 'false', operator: '~')), |
| 2072 const Test.clazz( | 1993 const Test.clazz( |
| 2073 ''' | 1994 ''' |
| 2074 class B { | 1995 class B { |
| 2075 operator -() => null; | 1996 operator -() => null; |
| 2076 } | 1997 } |
| 2077 class C extends B { | 1998 class C extends B { |
| 2078 m() => -super; | 1999 m() => -super; |
| 2079 } | 2000 } |
| 2080 ''', | 2001 ''', |
| 2081 const Visit(VisitKind.VISIT_SUPER_UNARY, | 2002 const Visit(VisitKind.VISIT_SUPER_UNARY, |
| 2082 element: 'function(B#unary-)', operator: '-')), | 2003 element: 'function(B#unary-)', operator: '-')), |
| 2083 const Test.clazz( | 2004 const Test.clazz(''' |
| 2084 ''' | |
| 2085 class B { | 2005 class B { |
| 2086 } | 2006 } |
| 2087 class C extends B { | 2007 class C extends B { |
| 2088 m() => -super; | 2008 m() => -super; |
| 2089 } | 2009 } |
| 2090 ''', | 2010 ''', |
| 2091 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_UNARY, operator: '-')), | 2011 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_UNARY, operator: '-')), |
| 2092 const Test.clazz( | 2012 const Test.clazz( |
| 2093 ''' | 2013 ''' |
| 2094 class B { | 2014 class B { |
| 2095 operator ~() => null; | 2015 operator ~() => null; |
| 2096 } | 2016 } |
| 2097 class C extends B { | 2017 class C extends B { |
| 2098 m() => ~super; | 2018 m() => ~super; |
| 2099 } | 2019 } |
| 2100 ''', | 2020 ''', |
| 2101 const Visit(VisitKind.VISIT_SUPER_UNARY, | 2021 const Visit(VisitKind.VISIT_SUPER_UNARY, |
| 2102 element: 'function(B#~)', operator: '~')), | 2022 element: 'function(B#~)', operator: '~')), |
| 2103 const Test.clazz( | 2023 const Test.clazz( |
| 2104 ''' | 2024 ''' |
| 2105 class B { | 2025 class B { |
| 2106 operator -() => null; | 2026 operator -() => null; |
| 2107 } | 2027 } |
| 2108 class C extends B { | 2028 class C extends B { |
| 2109 static m() => -super; | 2029 static m() => -super; |
| 2110 } | 2030 } |
| 2111 ''', | 2031 ''', |
| 2112 const Visit(VisitKind.ERROR_INVALID_UNARY, | 2032 const Visit(VisitKind.ERROR_INVALID_UNARY, |
| 2113 error: MessageKind.NO_SUPER_IN_STATIC, operator: '-')), | 2033 error: MessageKind.NO_SUPER_IN_STATIC, operator: '-')), |
| 2114 const Test( | 2034 const Test(''' |
| 2115 ''' | |
| 2116 m() => !0; | 2035 m() => !0; |
| 2117 ''', | 2036 ''', const Visit(VisitKind.VISIT_NOT, expression: '0')), |
| 2118 const Visit(VisitKind.VISIT_NOT, expression: '0')), | 2037 const Test(''' |
| 2119 const Test( | |
| 2120 ''' | |
| 2121 m() => +false; | 2038 m() => +false; |
| 2122 ''', | 2039 ''', |
| 2123 // TODO(johnniwinther): Should this be an | 2040 // TODO(johnniwinther): Should this be an |
| 2124 // ERROR_UNDEFINED_UNARY_EXPRESSION? Currently the parser just skips | 2041 // ERROR_UNDEFINED_UNARY_EXPRESSION? Currently the parser just skips |
| 2125 // the `+`. | 2042 // the `+`. |
| 2126 const []), | 2043 const []), |
| 2127 ], | 2044 ], |
| 2128 'Index set': const [ | 2045 'Index set': const [ |
| 2129 // Index set | 2046 // Index set |
| 2130 const Test( | 2047 const Test( |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2161 } | 2078 } |
| 2162 class C extends B { | 2079 class C extends B { |
| 2163 static m() => super[1] = 2; | 2080 static m() => super[1] = 2; |
| 2164 } | 2081 } |
| 2165 ''', | 2082 ''', |
| 2166 const Visit(VisitKind.ERROR_INVALID_INDEX_SET, | 2083 const Visit(VisitKind.ERROR_INVALID_INDEX_SET, |
| 2167 error: MessageKind.NO_SUPER_IN_STATIC, index: '1', rhs: '2')), | 2084 error: MessageKind.NO_SUPER_IN_STATIC, index: '1', rhs: '2')), |
| 2168 ], | 2085 ], |
| 2169 'Compound assignment': const [ | 2086 'Compound assignment': const [ |
| 2170 // Compound assignment | 2087 // Compound assignment |
| 2171 const Test( | 2088 const Test(''' |
| 2172 ''' | |
| 2173 m(a) => a.b += 42; | 2089 m(a) => a.b += 42; |
| 2174 ''', | 2090 ''', const [ |
| 2175 const [ | 2091 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND, |
| 2176 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND, | 2092 receiver: 'a', name: 'b', operator: '+=', rhs: '42'), |
| 2177 receiver: 'a', name: 'b', operator: '+=', rhs: '42'), | 2093 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') |
| 2178 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') | 2094 ]), |
| 2179 ]), | |
| 2180 const Test( | 2095 const Test( |
| 2181 ''' | 2096 ''' |
| 2182 m(a) => a += 42; | 2097 m(a) => a += 42; |
| 2183 ''', | 2098 ''', |
| 2184 const Visit(VisitKind.VISIT_PARAMETER_COMPOUND, | 2099 const Visit(VisitKind.VISIT_PARAMETER_COMPOUND, |
| 2185 element: 'parameter(m#a)', operator: '+=', rhs: '42')), | 2100 element: 'parameter(m#a)', operator: '+=', rhs: '42')), |
| 2186 const Test( | 2101 const Test( |
| 2187 ''' | 2102 ''' |
| 2188 m(final a) => a += 42; | 2103 m(final a) => a += 42; |
| 2189 ''', | 2104 ''', |
| (...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2711 } | 2626 } |
| 2712 ''', | 2627 ''', |
| 2713 const Visit(VisitKind.ERROR_INVALID_COMPOUND_INDEX_SET, | 2628 const Visit(VisitKind.ERROR_INVALID_COMPOUND_INDEX_SET, |
| 2714 error: MessageKind.NO_SUPER_IN_STATIC, | 2629 error: MessageKind.NO_SUPER_IN_STATIC, |
| 2715 index: '1', | 2630 index: '1', |
| 2716 operator: '+=', | 2631 operator: '+=', |
| 2717 rhs: '42')), | 2632 rhs: '42')), |
| 2718 ], | 2633 ], |
| 2719 'Prefix expression': const [ | 2634 'Prefix expression': const [ |
| 2720 // Prefix expression | 2635 // Prefix expression |
| 2721 const Test( | 2636 const Test(''' |
| 2722 ''' | |
| 2723 m(a) => --a.b; | 2637 m(a) => --a.b; |
| 2724 ''', | 2638 ''', const [ |
| 2725 const [ | 2639 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX, |
| 2726 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX, | 2640 receiver: 'a', name: 'b', operator: '--'), |
| 2727 receiver: 'a', name: 'b', operator: '--'), | 2641 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') |
| 2728 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') | 2642 ]), |
| 2729 ]), | |
| 2730 const Test( | 2643 const Test( |
| 2731 ''' | 2644 ''' |
| 2732 m(a) => ++a; | 2645 m(a) => ++a; |
| 2733 ''', | 2646 ''', |
| 2734 const Visit(VisitKind.VISIT_PARAMETER_PREFIX, | 2647 const Visit(VisitKind.VISIT_PARAMETER_PREFIX, |
| 2735 element: 'parameter(m#a)', operator: '++')), | 2648 element: 'parameter(m#a)', operator: '++')), |
| 2736 const Test( | 2649 const Test( |
| 2737 ''' | 2650 ''' |
| 2738 m(final a) => ++a; | 2651 m(final a) => ++a; |
| 2739 ''', | 2652 ''', |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2978 ''' | 2891 ''' |
| 2979 class B { | 2892 class B { |
| 2980 a() {} | 2893 a() {} |
| 2981 } | 2894 } |
| 2982 class C extends B { | 2895 class C extends B { |
| 2983 m() => ++super.a; | 2896 m() => ++super.a; |
| 2984 } | 2897 } |
| 2985 ''', | 2898 ''', |
| 2986 const Visit(VisitKind.VISIT_SUPER_METHOD_PREFIX, | 2899 const Visit(VisitKind.VISIT_SUPER_METHOD_PREFIX, |
| 2987 element: 'function(B#a)', operator: '++')), | 2900 element: 'function(B#a)', operator: '++')), |
| 2988 const Test.clazz( | 2901 const Test.clazz(''' |
| 2989 ''' | |
| 2990 class B { | 2902 class B { |
| 2991 } | 2903 } |
| 2992 class C extends B { | 2904 class C extends B { |
| 2993 m() => ++super.a; | 2905 m() => ++super.a; |
| 2994 } | 2906 } |
| 2995 ''', | 2907 ''', |
| 2996 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_PREFIX, operator: '++')), | 2908 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_PREFIX, operator: '++')), |
| 2997 const Test.clazz( | 2909 const Test.clazz( |
| 2998 ''' | 2910 ''' |
| 2999 class B { | 2911 class B { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3082 element: 'function(a)', operator: '++')), | 2994 element: 'function(a)', operator: '++')), |
| 3083 | 2995 |
| 3084 const Test( | 2996 const Test( |
| 3085 ''' | 2997 ''' |
| 3086 final a = 42; | 2998 final a = 42; |
| 3087 m() => ++a; | 2999 m() => ++a; |
| 3088 ''', | 3000 ''', |
| 3089 const Visit(VisitKind.VISIT_TOP_LEVEL_FINAL_FIELD_PREFIX, | 3001 const Visit(VisitKind.VISIT_TOP_LEVEL_FINAL_FIELD_PREFIX, |
| 3090 element: 'field(a)', operator: '++')), | 3002 element: 'field(a)', operator: '++')), |
| 3091 | 3003 |
| 3092 const Test( | 3004 const Test(''' |
| 3093 ''' | |
| 3094 m() => ++unresolved; | 3005 m() => ++unresolved; |
| 3095 ''', | 3006 ''', const Visit(VisitKind.VISIT_UNRESOLVED_PREFIX, operator: '++')), |
| 3096 const Visit(VisitKind.VISIT_UNRESOLVED_PREFIX, operator: '++')), | |
| 3097 ], | 3007 ], |
| 3098 'Postfix expression': const [ | 3008 'Postfix expression': const [ |
| 3099 // Postfix expression | 3009 // Postfix expression |
| 3100 const Test( | 3010 const Test(''' |
| 3101 ''' | |
| 3102 m(a) => a.b--; | 3011 m(a) => a.b--; |
| 3103 ''', | 3012 ''', const [ |
| 3104 const [ | 3013 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX, |
| 3105 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX, | 3014 receiver: 'a', name: 'b', operator: '--'), |
| 3106 receiver: 'a', name: 'b', operator: '--'), | 3015 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') |
| 3107 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') | 3016 ]), |
| 3108 ]), | |
| 3109 const Test( | 3017 const Test( |
| 3110 ''' | 3018 ''' |
| 3111 m(a) => a++; | 3019 m(a) => a++; |
| 3112 ''', | 3020 ''', |
| 3113 const Visit(VisitKind.VISIT_PARAMETER_POSTFIX, | 3021 const Visit(VisitKind.VISIT_PARAMETER_POSTFIX, |
| 3114 element: 'parameter(m#a)', operator: '++')), | 3022 element: 'parameter(m#a)', operator: '++')), |
| 3115 const Test( | 3023 const Test( |
| 3116 ''' | 3024 ''' |
| 3117 m(final a) => a++; | 3025 m(final a) => a++; |
| 3118 ''', | 3026 ''', |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3357 ''' | 3265 ''' |
| 3358 class B { | 3266 class B { |
| 3359 a() {} | 3267 a() {} |
| 3360 } | 3268 } |
| 3361 class C extends B { | 3269 class C extends B { |
| 3362 m() => super.a++; | 3270 m() => super.a++; |
| 3363 } | 3271 } |
| 3364 ''', | 3272 ''', |
| 3365 const Visit(VisitKind.VISIT_SUPER_METHOD_POSTFIX, | 3273 const Visit(VisitKind.VISIT_SUPER_METHOD_POSTFIX, |
| 3366 element: 'function(B#a)', operator: '++')), | 3274 element: 'function(B#a)', operator: '++')), |
| 3367 const Test.clazz( | 3275 const Test.clazz(''' |
| 3368 ''' | |
| 3369 class B { | 3276 class B { |
| 3370 } | 3277 } |
| 3371 class C extends B { | 3278 class C extends B { |
| 3372 m() => super.a++; | 3279 m() => super.a++; |
| 3373 } | 3280 } |
| 3374 ''', | 3281 ''', |
| 3375 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_POSTFIX, operator: '++')), | 3282 const Visit(VisitKind.VISIT_UNRESOLVED_SUPER_POSTFIX, operator: '++')), |
| 3376 const Test.clazz( | 3283 const Test.clazz( |
| 3377 ''' | 3284 ''' |
| 3378 class B { | 3285 class B { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3461 element: 'function(a)', operator: '++')), | 3368 element: 'function(a)', operator: '++')), |
| 3462 | 3369 |
| 3463 const Test( | 3370 const Test( |
| 3464 ''' | 3371 ''' |
| 3465 final a = 42; | 3372 final a = 42; |
| 3466 m() => a++; | 3373 m() => a++; |
| 3467 ''', | 3374 ''', |
| 3468 const Visit(VisitKind.VISIT_TOP_LEVEL_FINAL_FIELD_POSTFIX, | 3375 const Visit(VisitKind.VISIT_TOP_LEVEL_FINAL_FIELD_POSTFIX, |
| 3469 element: 'field(a)', operator: '++')), | 3376 element: 'field(a)', operator: '++')), |
| 3470 | 3377 |
| 3471 const Test( | 3378 const Test(''' |
| 3472 ''' | |
| 3473 m() => unresolved++; | 3379 m() => unresolved++; |
| 3474 ''', | 3380 ''', const Visit(VisitKind.VISIT_UNRESOLVED_POSTFIX, operator: '++')), |
| 3475 const Visit(VisitKind.VISIT_UNRESOLVED_POSTFIX, operator: '++')), | |
| 3476 ], | 3381 ], |
| 3477 'Constructor invocations': const [ | 3382 'Constructor invocations': const [ |
| 3478 const Test( | 3383 const Test( |
| 3479 ''' | 3384 ''' |
| 3480 class Class { | 3385 class Class { |
| 3481 const Class(a, b); | 3386 const Class(a, b); |
| 3482 } | 3387 } |
| 3483 m() => const Class(true, 42); | 3388 m() => const Class(true, 42); |
| 3484 ''', | 3389 ''', |
| 3485 const Visit(VisitKind.VISIT_CONST_CONSTRUCTOR_INVOKE, | 3390 const Visit(VisitKind.VISIT_CONST_CONSTRUCTOR_INVOKE, |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3753 m() => new Class(true, 42); | 3658 m() => new Class(true, 42); |
| 3754 ''', | 3659 ''', |
| 3755 const Visit( | 3660 const Visit( |
| 3756 VisitKind.VISIT_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE, | 3661 VisitKind.VISIT_UNRESOLVED_REDIRECTING_FACTORY_CONSTRUCTOR_INVOKE, |
| 3757 element: 'factory_constructor(Class#)', | 3662 element: 'factory_constructor(Class#)', |
| 3758 arguments: '(true,42)', | 3663 arguments: '(true,42)', |
| 3759 type: 'Class', | 3664 type: 'Class', |
| 3760 selector: 'CallStructure(arity=2)')), | 3665 selector: 'CallStructure(arity=2)')), |
| 3761 ], | 3666 ], |
| 3762 'If not null expressions': const [ | 3667 'If not null expressions': const [ |
| 3763 const Test( | 3668 const Test(''' |
| 3764 ''' | |
| 3765 m(a) => a?.b; | 3669 m(a) => a?.b; |
| 3766 ''', | 3670 ''', const [ |
| 3767 const [ | 3671 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_GET, |
| 3768 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_GET, | 3672 receiver: 'a', name: 'b'), |
| 3769 receiver: 'a', name: 'b'), | 3673 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 3770 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), | 3674 ]), |
| 3771 ]), | 3675 const Test(''' |
| 3772 const Test( | |
| 3773 ''' | |
| 3774 class C { | 3676 class C { |
| 3775 static var b; | 3677 static var b; |
| 3776 } | 3678 } |
| 3777 m(a) => C?.b; | 3679 m(a) => C?.b; |
| 3778 ''', | 3680 ''', |
| 3779 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#b)')), | 3681 const Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: 'field(C#b)')), |
| 3780 const Test( | 3682 const Test(''' |
| 3781 ''' | |
| 3782 m(a) => a?.b = 42; | 3683 m(a) => a?.b = 42; |
| 3783 ''', | 3684 ''', const [ |
| 3784 const [ | 3685 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET, |
| 3785 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET, | 3686 receiver: 'a', name: 'b', rhs: '42'), |
| 3786 receiver: 'a', name: 'b', rhs: '42'), | 3687 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 3787 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), | 3688 ]), |
| 3788 ]), | 3689 const Test(''' |
| 3789 const Test( | |
| 3790 ''' | |
| 3791 m(a) => a?.b(42, true); | 3690 m(a) => a?.b(42, true); |
| 3792 ''', | 3691 ''', const [ |
| 3793 const [ | 3692 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_INVOKE, |
| 3794 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_INVOKE, | 3693 receiver: 'a', |
| 3795 receiver: 'a', | 3694 arguments: '(42,true)', |
| 3796 arguments: '(42,true)', | 3695 selector: 'Selector(call, b, arity=2)'), |
| 3797 selector: 'Selector(call, b, arity=2)'), | 3696 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 3798 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), | 3697 ]), |
| 3799 ]), | 3698 const Test(''' |
| 3800 const Test( | |
| 3801 ''' | |
| 3802 m(a) => ++a?.b; | 3699 m(a) => ++a?.b; |
| 3803 ''', | 3700 ''', const [ |
| 3804 const [ | 3701 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_PREFIX, |
| 3805 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_PREFIX, | 3702 receiver: 'a', name: 'b', operator: '++'), |
| 3806 receiver: 'a', name: 'b', operator: '++'), | 3703 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 3807 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), | 3704 ]), |
| 3808 ]), | 3705 const Test(''' |
| 3809 const Test( | |
| 3810 ''' | |
| 3811 m(a) => a?.b--; | 3706 m(a) => a?.b--; |
| 3812 ''', | 3707 ''', const [ |
| 3813 const [ | 3708 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_POSTFIX, |
| 3814 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_POSTFIX, | 3709 receiver: 'a', name: 'b', operator: '--'), |
| 3815 receiver: 'a', name: 'b', operator: '--'), | 3710 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 3816 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), | 3711 ]), |
| 3817 ]), | 3712 const Test(''' |
| 3818 const Test( | |
| 3819 ''' | |
| 3820 m(a) => a?.b *= 42; | 3713 m(a) => a?.b *= 42; |
| 3821 ''', | 3714 ''', const [ |
| 3822 const [ | 3715 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_COMPOUND, |
| 3823 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_COMPOUND, | 3716 receiver: 'a', name: 'b', operator: '*=', rhs: '42'), |
| 3824 receiver: 'a', name: 'b', operator: '*=', rhs: '42'), | 3717 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 3825 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), | 3718 ]), |
| 3826 ]), | 3719 const Test(''' |
| 3827 const Test( | |
| 3828 ''' | |
| 3829 m(a) => a?.b ??= 42; | 3720 m(a) => a?.b ??= 42; |
| 3830 ''', | 3721 ''', const [ |
| 3831 const [ | 3722 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET_IF_NULL, |
| 3832 const Visit(VisitKind.VISIT_IF_NOT_NULL_DYNAMIC_PROPERTY_SET_IF_NULL, | 3723 receiver: 'a', name: 'b', rhs: '42'), |
| 3833 receiver: 'a', name: 'b', rhs: '42'), | 3724 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 3834 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), | 3725 ]), |
| 3835 ]), | 3726 const Test(''' |
| 3836 const Test( | |
| 3837 ''' | |
| 3838 m(a, b) => a ?? b; | 3727 m(a, b) => a ?? b; |
| 3839 ''', | 3728 ''', const [ |
| 3840 const [ | 3729 const Visit(VisitKind.VISIT_IF_NULL, left: 'a', right: 'b'), |
| 3841 const Visit(VisitKind.VISIT_IF_NULL, left: 'a', right: 'b'), | 3730 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), |
| 3842 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)'), | 3731 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#b)'), |
| 3843 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#b)'), | 3732 ]), |
| 3844 ]), | |
| 3845 const Test( | 3733 const Test( |
| 3846 ''' | 3734 ''' |
| 3847 m(a) => a ??= 42; | 3735 m(a) => a ??= 42; |
| 3848 ''', | 3736 ''', |
| 3849 const Visit(VisitKind.VISIT_PARAMETER_SET_IF_NULL, | 3737 const Visit(VisitKind.VISIT_PARAMETER_SET_IF_NULL, |
| 3850 element: 'parameter(m#a)', rhs: '42')), | 3738 element: 'parameter(m#a)', rhs: '42')), |
| 3851 const Test.prefix( | 3739 const Test.prefix( |
| 3852 ''' | 3740 ''' |
| 3853 var o; | 3741 var o; |
| 3854 ''', | 3742 ''', |
| 3855 'm() => p?.o;', | 3743 'm() => p?.o;', |
| 3856 const Visit(VisitKind.ERROR_INVALID_GET, | 3744 const Visit(VisitKind.ERROR_INVALID_GET, |
| 3857 error: MessageKind.PREFIX_AS_EXPRESSION)), | 3745 error: MessageKind.PREFIX_AS_EXPRESSION)), |
| 3858 ], | 3746 ], |
| 3859 'Set if null': const [ | 3747 'Set if null': const [ |
| 3860 const Test( | 3748 const Test(''' |
| 3861 ''' | |
| 3862 m(a) => a.b ??= 42; | 3749 m(a) => a.b ??= 42; |
| 3863 ''', | 3750 ''', const [ |
| 3864 const [ | 3751 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET_IF_NULL, |
| 3865 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET_IF_NULL, | 3752 receiver: 'a', name: 'b', rhs: '42'), |
| 3866 receiver: 'a', name: 'b', rhs: '42'), | 3753 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') |
| 3867 const Visit(VisitKind.VISIT_PARAMETER_GET, element: 'parameter(m#a)') | 3754 ]), |
| 3868 ]), | |
| 3869 const Test( | 3755 const Test( |
| 3870 ''' | 3756 ''' |
| 3871 m(a) => a ??= 42; | 3757 m(a) => a ??= 42; |
| 3872 ''', | 3758 ''', |
| 3873 const Visit(VisitKind.VISIT_PARAMETER_SET_IF_NULL, | 3759 const Visit(VisitKind.VISIT_PARAMETER_SET_IF_NULL, |
| 3874 element: 'parameter(m#a)', rhs: '42')), | 3760 element: 'parameter(m#a)', rhs: '42')), |
| 3875 const Test( | 3761 const Test( |
| 3876 ''' | 3762 ''' |
| 3877 m(final a) => a ??= 42; | 3763 m(final a) => a ??= 42; |
| 3878 ''', | 3764 ''', |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4296 element: 'field(a)', rhs: '42')), | 4182 element: 'field(a)', rhs: '42')), |
| 4297 | 4183 |
| 4298 const Test( | 4184 const Test( |
| 4299 ''' | 4185 ''' |
| 4300 m() => unresolved ??= 42; | 4186 m() => unresolved ??= 42; |
| 4301 ''', | 4187 ''', |
| 4302 const Visit(VisitKind.VISIT_UNRESOLVED_SET_IF_NULL, | 4188 const Visit(VisitKind.VISIT_UNRESOLVED_SET_IF_NULL, |
| 4303 name: 'unresolved', rhs: '42')), | 4189 name: 'unresolved', rhs: '42')), |
| 4304 ], | 4190 ], |
| 4305 }; | 4191 }; |
| OLD | NEW |