Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Side by Side Diff: tests/compiler/dart2js/semantic_visitor_test_send_data.dart

Issue 2990223002: Reformat untouched files. (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698