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 |