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

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

Issue 929113002: Add SemanticVisitor to dart2js. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix indents and long lines. Created 5 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « tests/compiler/dart2js/analyze_unused_dart2js_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library dart2js.semantics_visitor_test;
6
7 import 'package:async_helper/async_helper.dart';
8 import 'package:expect/expect.dart';
9 import 'package:compiler/src/constants/expressions.dart';
10 import 'package:compiler/src/dart_types.dart';
11 import 'package:compiler/src/dart2jslib.dart';
12 import 'package:compiler/src/elements/elements.dart';
13 import 'package:compiler/src/resolution/resolution.dart';
14 import 'package:compiler/src/resolution/semantic_visitor.dart';
15 import 'package:compiler/src/resolution/operators.dart';
16 import 'package:compiler/src/tree/tree.dart';
17 import 'package:compiler/src/util/util.dart';
18 import 'memory_compiler.dart';
19
20 class Visit {
21 final VisitKind method;
22 final element;
23 final rhs;
24 final arguments;
25 final receiver;
26 final name;
27 final expression;
28 final left;
29 final right;
30 final type;
31 final operator;
32 final index;
33 final getter;
34 final setter;
35 final constant;
36
37 const Visit(this.method,
38 {this.element,
39 this.rhs,
40 this.arguments,
41 this.receiver,
42 this.name,
43 this.expression,
44 this.left,
45 this.right,
46 this.type,
47 this.operator,
48 this.index,
49 this.getter,
50 this.setter,
51 this.constant});
52
53 int get hashCode => toString().hashCode;
54
55 bool operator ==(other) => '$this' == '$other';
56
57 String toString() {
58 StringBuffer sb = new StringBuffer();
59 sb.write('method=$method');
60 if (element != null) {
61 sb.write(',element=$element');
62 }
63 if (rhs != null) {
64 sb.write(',rhs=$rhs');
65 }
66 if (arguments != null) {
67 sb.write(',arguments=$arguments');
68 }
69 if (receiver != null) {
70 sb.write(',receiver=$receiver');
71 }
72 if (name != null) {
73 sb.write(',name=$name');
74 }
75 if (expression != null) {
76 sb.write(',expression=$expression');
77 }
78 if (left != null) {
79 sb.write(',left=$left');
80 }
81 if (right != null) {
82 sb.write(',right=$right');
83 }
84 if (type != null) {
85 sb.write(',type=$type');
86 }
87 if (operator != null) {
88 sb.write(',operator=$operator');
89 }
90 if (index != null) {
91 sb.write(',index=$index');
92 }
93 if (getter != null) {
94 sb.write(',getter=$getter');
95 }
96 if (setter != null) {
97 sb.write(',setter=$setter');
98 }
99 if (constant != null) {
100 sb.write(',constant=$constant');
101 }
102 return sb.toString();
103 }
104 }
105
106 class Test {
107 final String codeByPrefix;
108 final String code;
109 final /*Visit | List<Visit>*/ expectedVisits;
110 final String cls;
111
112 const Test(this.code, this.expectedVisits)
113 : cls = null, codeByPrefix = null;
114 const Test.clazz(this.code, this.expectedVisits)
115 : cls = 'C', codeByPrefix = null;
116 const Test.prefix(this.codeByPrefix, this.code, this.expectedVisits)
117 : cls = null;
118
119 String get method => 'm';
120
121 String toString() {
122 StringBuffer sb = new StringBuffer();
123 sb.writeln();
124 sb.writeln(code);
125 if (codeByPrefix != null) {
126 sb.writeln('imported by prefix:');
127 sb.writeln(codeByPrefix);
128 }
129 return sb.toString();
130 }
131 }
132
133 const List<Test> TESTS = const [
134 // Parameters
135 const Test('m(o) => o;',
136 const Visit(VisitKind.VISIT_PARAMETER_GET,
137 element: 'parameter(m#o)')),
138 const Test('m(o) { o = 42; }',
139 const Visit(VisitKind.VISIT_PARAMETER_SET,
140 element: 'parameter(m#o)',
141 rhs:'42')),
142 const Test('m(o) { o(null, 42); }',
143 const Visit(VisitKind.VISIT_PARAMETER_INVOKE,
144 element: 'parameter(m#o)',
145 arguments: '(null,42)')),
146
147 // Local variables
148 const Test('m() { var o; return o; }',
149 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_GET,
150 element: 'variable(m#o)')),
151 const Test('m() { var o; o = 42; }',
152 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_SET,
153 element: 'variable(m#o)',
154 rhs:'42')),
155 const Test('m() { var o; o(null, 42); }',
156 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_INVOKE,
157 element: 'variable(m#o)',
158 arguments: '(null,42)')),
159
160 // Local functions
161 const Test('m() { o(a, b) {}; return o; }',
162 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_GET,
163 element: 'function(m#o)')),
164 const Test('m() { o(a, b) {}; o(null, 42); }',
165 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_INVOKE,
166 element: 'function(m#o)',
167 arguments: '(null,42)')),
168
169 // Static fields
170 const Test(
171 '''
172 class C { static var o; }
173 m() => C.o;
174 ''',
175 const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
176 element: 'field(C#o)')),
177 const Test.clazz(
178 '''
179 class C {
180 static var o;
181 m() => o;
182 }
183 ''',
184 const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
185 element: 'field(C#o)')),
186 const Test.clazz(
187 '''
188 class C {
189 static var o;
190 m() => C.o;
191 }
192 ''',
193 const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
194 element: 'field(C#o)')),
195 const Test.prefix(
196 '''
197 class C {
198 static var o;
199 }
200 ''',
201 'm() => p.C.o;',
202 const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
203 element: 'field(C#o)')),
204 const Test(
205 '''
206 class C { static var o; }
207 m() { C.o = 42; }
208 ''',
209 const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
210 element: 'field(C#o)',
211 rhs: '42')),
212 const Test.clazz(
213 '''
214 class C {
215 static var o;
216 m() { o = 42; }
217 }
218 ''',
219 const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
220 element: 'field(C#o)',
221 rhs: '42')),
222 const Test.clazz(
223 '''
224 class C {
225 static var o;
226 m() { C.o = 42; }
227 }
228 ''',
229 const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
230 element: 'field(C#o)',
231 rhs: '42')),
232 const Test.prefix(
233 '''
234 class C {
235 static var o;
236 }
237 ''',
238 'm() { p.C.o = 42; }',
239 const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
240 element: 'field(C#o)',
241 rhs: '42')),
242 const Test(
243 '''
244 class C { static var o; }
245 m() { C.o(null, 42); }
246 ''',
247 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
248 element: 'field(C#o)',
249 arguments: '(null,42)')),
250 const Test.clazz(
251 '''
252 class C {
253 static var o;
254 m() { o(null, 42); }
255 }
256 ''',
257 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
258 element: 'field(C#o)',
259 arguments: '(null,42)')),
260 const Test.clazz(
261 '''
262 class C {
263 static var o;
264 m() { C.o(null, 42); }
265 }
266 ''',
267 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
268 element: 'field(C#o)',
269 arguments: '(null,42)')),
270 const Test.prefix(
271 '''
272 class C {
273 static var o;
274 }
275 ''',
276 'm() { p.C.o(null, 42); }',
277 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
278 element: 'field(C#o)',
279 arguments: '(null,42)')),
280
281 // Static properties
282 const Test(
283 '''
284 class C {
285 static get o => null;
286 }
287 m() => C.o;
288 ''',
289 const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
290 element: 'getter(C#o)')),
291 const Test.clazz(
292 '''
293 class C {
294 static get o => null;
295 m() => o;
296 }
297 ''',
298 const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
299 element: 'getter(C#o)')),
300 const Test.clazz(
301 '''
302 class C {
303 static get o => null;
304 m() => C.o;
305 }
306 ''',
307 const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
308 element: 'getter(C#o)')),
309 const Test.prefix(
310 '''
311 class C {
312 static get o => null;
313 }
314 ''',
315 'm() => p.C.o;',
316 const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
317 element: 'getter(C#o)')),
318 const Test(
319 '''
320 class C { static set o(_) {} }
321 m() { C.o = 42; }
322 ''',
323 const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
324 element: 'setter(C#o)',
325 rhs: '42')),
326 const Test.clazz(
327 '''
328 class C {
329 static set o(_) {}
330 m() { o = 42; }
331 }
332 ''',
333 const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
334 element: 'setter(C#o)',
335 rhs: '42')),
336 const Test.clazz(
337 '''
338 class C {
339 static set o(_) {}
340 m() { C.o = 42; }
341 }
342 ''',
343 const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
344 element: 'setter(C#o)',
345 rhs: '42')),
346 const Test.prefix(
347 '''
348 class C {
349 static set o(_) {}
350 }
351 ''',
352 'm() { p.C.o = 42; }',
353 const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
354 element: 'setter(C#o)',
355 rhs: '42')),
356 const Test(
357 '''
358 class C { static get o => null; }
359 m() => C.o(null, 42);
360 ''',
361 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
362 element: 'getter(C#o)',
363 arguments: '(null,42)')),
364 const Test.clazz(
365 '''
366 class C {
367 static get o => null;
368 m() { o(null, 42); }
369 }
370 ''',
371 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
372 element: 'getter(C#o)',
373 arguments: '(null,42)')),
374 const Test.clazz(
375 '''
376 class C {
377 static get o => null;
378 m() { C.o(null, 42); }
379 }
380 ''',
381 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
382 element: 'getter(C#o)',
383 arguments: '(null,42)')),
384 const Test.prefix(
385 '''
386 class C {
387 static get o => null;
388 }
389 ''',
390 'm() { p.C.o(null, 42); }',
391 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
392 element: 'getter(C#o)',
393 arguments: '(null,42)')),
394
395 // Static functions
396 const Test(
397 '''
398 class C { static o(a, b) {} }
399 m() => C.o;
400 ''',
401 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
402 element: 'function(C#o)')),
403 const Test.clazz(
404 '''
405 class C {
406 static o(a, b) {}
407 m() => o;
408 }
409 ''',
410 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
411 element: 'function(C#o)')),
412 const Test.clazz(
413 '''
414 class C {
415 static o(a, b) {}
416 m() => C.o;
417 }
418 ''',
419 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
420 element: 'function(C#o)')),
421 const Test.prefix(
422 '''
423 class C { static o(a, b) {} }
424 ''',
425 '''
426 m() => p.C.o;
427 ''',
428 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
429 element: 'function(C#o)')),
430 const Test(
431 '''
432 class C { static o(a, b) {} }
433 m() => C.o(null, 42);
434 ''',
435 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
436 element: 'function(C#o)',
437 arguments: '(null,42)')),
438 const Test.clazz(
439 '''
440 class C {
441 static o(a, b) {}
442 m() { o(null, 42); }
443 }
444 ''',
445 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
446 element: 'function(C#o)',
447 arguments: '(null,42)')),
448 const Test.clazz(
449 '''
450 class C {
451 static o(a, b) {}
452 m() { C.o(null, 42); }
453 }
454 ''',
455 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
456 element: 'function(C#o)',
457 arguments: '(null,42)')),
458 const Test.prefix(
459 '''
460 class C {
461 static o(a, b) {}
462 }
463 ''',
464 'm() { p.C.o(null, 42); }',
465 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
466 element: 'function(C#o)',
467 arguments: '(null,42)')),
468
469 // Top level fields
470 const Test(
471 '''
472 var o;
473 m() => o;
474 ''',
475 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET,
476 element: 'field(o)')),
477 const Test.prefix(
478 '''
479 var o;
480 ''',
481 'm() => p.o;',
482 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET,
483 element: 'field(o)')),
484 const Test(
485 '''
486 var o;
487 m() { o = 42; }
488 ''',
489 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET,
490 element: 'field(o)',
491 rhs: '42')),
492 const Test.prefix(
493 '''
494 var o;
495 ''',
496 'm() { p.o = 42; }',
497 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET,
498 element: 'field(o)',
499 rhs: '42')),
500 const Test(
501 '''
502 var o;
503 m() { o(null, 42); }
504 ''',
505 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE,
506 element: 'field(o)',
507 arguments: '(null,42)')),
508 const Test.prefix(
509 '''
510 var o;
511 ''',
512 'm() { p.o(null, 42); }',
513 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE,
514 element: 'field(o)',
515 arguments: '(null,42)')),
516
517 // Top level properties
518 const Test(
519 '''
520 get o => null;
521 m() => o;
522 ''',
523 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET,
524 element: 'getter(o)')),
525 const Test.prefix(
526 '''
527 get o => null;
528 ''',
529 '''
530 m() => p.o;
531 ''',
532 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET,
533 element: 'getter(o)')),
534 const Test(
535 '''
536 set o(_) {}
537 m() { o = 42; }
538 ''',
539 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET,
540 element: 'setter(o)',
541 rhs: '42')),
542 const Test.prefix(
543 '''
544 set o(_) {}
545 ''',
546 'm() { p.o = 42; }',
547 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET,
548 element: 'setter(o)',
549 rhs: '42')),
550 const Test(
551 '''
552 get o => null;
553 m() => o(null, 42);
554 ''',
555 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE,
556 element: 'getter(o)',
557 arguments: '(null,42)')),
558 const Test.prefix(
559 '''
560 get o => null;
561 ''',
562 'm() { p.o(null, 42); }',
563 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE,
564 element: 'getter(o)',
565 arguments: '(null,42)')),
566
567 // Top level functions
568 const Test(
569 '''
570 o(a, b) {}
571 m() => o;
572 ''',
573 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_GET,
574 element: 'function(o)')),
575 const Test(
576 '''
577 o(a, b) {}
578 m() => o(null, 42);
579 ''',
580 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE,
581 element: 'function(o)',
582 arguments: '(null,42)')),
583 const Test.prefix(
584 '''
585 o(a, b) {}
586 ''',
587 'm() { p.o(null, 42); }',
588 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE,
589 element: 'function(o)',
590 arguments: '(null,42)')),
591
592 // Dynamic properties
593 const Test('m(o) => o.foo;',
594 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET,
595 receiver: 'o',
596 name: 'foo')),
597 const Test('m(o) { o.foo = 42; }',
598 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET,
599 receiver: 'o',
600 name: 'foo',
601 rhs: '42')),
602 const Test('m(o) { o.foo(null, 42); }',
603 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE,
604 receiver: 'o',
605 name: 'foo',
606 arguments: '(null,42)')),
607
608 // This access
609 const Test.clazz(
610 '''
611 class C {
612 m() => this;
613 }
614 ''',
615 const Visit(VisitKind.VISIT_THIS_GET)),
616 const Test.clazz(
617 '''
618 class C {
619 call(a, b) {}
620 m() { this(null, 42); }
621 }
622 ''',
623 const Visit(VisitKind.VISIT_THIS_INVOKE,
624 arguments: '(null,42)')),
625
626 // This properties
627 const Test.clazz(
628 '''
629 class C {
630 var foo;
631 m() => foo;
632 }
633 ''',
634 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
635 name: 'foo')),
636 const Test.clazz(
637 '''
638 class C {
639 var foo;
640 m() => this.foo;
641 }
642 ''',
643 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
644 name: 'foo')),
645 const Test.clazz(
646 '''
647 class C {
648 get foo => null;
649 m() => foo;
650 }
651 ''',
652 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
653 name: 'foo')),
654 const Test.clazz(
655 '''
656 class C {
657 get foo => null;
658 m() => this.foo;
659 }
660 ''',
661 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
662 name: 'foo')),
663 const Test.clazz(
664 '''
665 class C {
666 var foo;
667 m() { foo = 42; }
668 }
669 ''',
670 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
671 name: 'foo',
672 rhs: '42')),
673 const Test.clazz(
674 '''
675 class C {
676 var foo;
677 m() { this.foo = 42; }
678 }
679 ''',
680 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
681 name: 'foo',
682 rhs: '42')),
683 const Test.clazz(
684 '''
685 class C {
686 set foo(_) {}
687 m() { foo = 42; }
688 }
689 ''',
690 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
691 name: 'foo',
692 rhs: '42')),
693 const Test.clazz(
694 '''
695 class C {
696 set foo(_) {}
697 m() { this.foo = 42; }
698 }
699 ''',
700 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
701 name: 'foo',
702 rhs: '42')),
703 const Test.clazz(
704 '''
705 class C {
706 var foo;
707 m() { foo(null, 42); }
708 }
709 ''',
710 const Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE,
711 name: 'foo',
712 arguments: '(null,42)')),
713 const Test.clazz(
714 '''
715 class C {
716 var foo;
717 m() { this.foo(null, 42); }
718 }
719 ''',
720 const Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE,
721 name: 'foo',
722 arguments: '(null,42)')),
723
724 // Super fields
725 const Test.clazz(
726 '''
727 class B {
728 var o;
729 }
730 class C extends B {
731 m() => super.o;
732 }
733 ''',
734 const Visit(VisitKind.VISIT_SUPER_FIELD_GET,
735 element: 'field(B#o)')),
736 const Test.clazz(
737 '''
738 class B {
739 var o;
740 }
741 class C extends B {
742 m() { super.o = 42; }
743 }
744 ''',
745 const Visit(VisitKind.VISIT_SUPER_FIELD_SET,
746 element: 'field(B#o)',
747 rhs: '42')),
748 const Test.clazz(
749 '''
750 class B {
751 var o;
752 }
753 class C extends B {
754 m() { super.o(null, 42); }
755 }
756 ''',
757 const Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE,
758 element: 'field(B#o)',
759 arguments: '(null,42)')),
760
761 // Super properties
762 const Test.clazz(
763 '''
764 class B {
765 get o => null;
766 }
767 class C extends B {
768 m() => super.o;
769 }
770 ''',
771 const Visit(VisitKind.VISIT_SUPER_GETTER_GET,
772 element: 'getter(B#o)')),
773 const Test.clazz(
774 '''
775 class B {
776 set o(_) {}
777 }
778 class C extends B {
779 m() { super.o = 42; }
780 }
781 ''',
782 const Visit(VisitKind.VISIT_SUPER_SETTER_SET,
783 element: 'setter(B#o)',
784 rhs: '42')),
785 const Test.clazz(
786 '''
787 class B {
788 get o => null;
789 }
790 class C extends B {
791 m() { super.o(null, 42); }
792 }
793 ''',
794 const Visit(VisitKind.VISIT_SUPER_GETTER_INVOKE,
795 element: 'getter(B#o)',
796 arguments: '(null,42)')),
797
798 // Super methods
799 const Test.clazz(
800 '''
801 class B {
802 o(a, b) {}
803 }
804 class C extends B {
805 m() => super.o;
806 }
807 ''',
808 const Visit(VisitKind.VISIT_SUPER_METHOD_GET,
809 element: 'function(B#o)')),
810 const Test.clazz(
811 '''
812 class B {
813 o(a, b) {}
814 }
815 class C extends B {
816 m() { super.o(null, 42); }
817 }
818 ''',
819 const Visit(VisitKind.VISIT_SUPER_METHOD_INVOKE,
820 element: 'function(B#o)',
821 arguments: '(null,42)')),
822
823 // Expression invoke
824 const Test('m() => (a, b){}(null, 42);',
825 const Visit(VisitKind.VISIT_EXPRESSION_INVOKE,
826 receiver: '(a,b){}',
827 arguments: '(null,42)')),
828
829 // Class type literals
830 const Test(
831 '''
832 class C {}
833 m() => C;
834 ''',
835 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET,
836 constant: 'C')),
837 const Test(
838 '''
839 class C {}
840 m() => C(null, 42);
841 ''',
842 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE,
843 constant: 'C',
844 arguments: '(null,42)')),
845
846 // Typedef type literals
847 const Test(
848 '''
849 typedef F();
850 m() => F;
851 ''',
852 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET,
853 constant: 'F')),
854 const Test(
855 '''
856 typedef F();
857 m() => F(null, 42);
858 ''',
859 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE,
860 constant: 'F',
861 arguments: '(null,42)')),
862
863 // Type variable type literals
864 const Test.clazz(
865 '''
866 class C<T> {
867 m() => T;
868 }
869 ''',
870 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET,
871 element: 'type_variable(C#T)')),
872 const Test.clazz(
873 '''
874 class C<T> {
875 m() => T(null, 42);
876 }
877 ''',
878 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE,
879 element: 'type_variable(C#T)',
880 arguments: '(null,42)')),
881
882 // Dynamic type literals
883 const Test(
884 '''
885 m() => dynamic;
886 ''',
887 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET,
888 constant: 'dynamic')),
889 // TODO(johnniwinther): Enable this when we pass the right constant.
890 // Currently we generated the constant for `Type` instead of `dynamic`.
891 /*const Test(
892 '''
893 m() { dynamic(null, 42); }
894 ''',
895 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE,
896 constant: 'dynamic',
897 arguments: '(null,42)')),*/
898
899 // Assert
900 const Test(
901 '''
902 m() { assert(false); }
903 ''',
904 const Visit(VisitKind.VISIT_ASSERT, expression: 'false')),
905
906 // Logical and
907 const Test(
908 '''
909 m() => true && false;
910 ''',
911 const Visit(VisitKind.VISIT_LOGICAL_AND, left: 'true', right: 'false')),
912
913 // Logical or
914 const Test(
915 '''
916 m() => true || false;
917 ''',
918 const Visit(VisitKind.VISIT_LOGICAL_OR, left: 'true', right: 'false')),
919
920 // Is test
921 const Test(
922 '''
923 class C {}
924 m() => 0 is C;
925 ''',
926 const Visit(VisitKind.VISIT_IS, expression: '0', type: 'C')),
927
928 // Is not test
929 const Test(
930 '''
931 class C {}
932 m() => 0 is! C;
933 ''',
934 const Visit(VisitKind.VISIT_IS_NOT, expression: '0', type: 'C')),
935
936 // Is test
937 const Test(
938 '''
939 class C {}
940 m() => 0 as C;
941 ''',
942 const Visit(VisitKind.VISIT_AS, expression: '0', type: 'C')),
943
944 // Binary operators
945 const Test(
946 '''
947 m() => 2 + 3;
948 ''',
949 const Visit(VisitKind.VISIT_BINARY,
950 left: '2', operator: '+', right: '3')),
951 const Test(
952 '''
953 m() => 2 - 3;
954 ''',
955 const Visit(VisitKind.VISIT_BINARY,
956 left: '2', operator: '-', right: '3')),
957 const Test(
958 '''
959 m() => 2 * 3;
960 ''',
961 const Visit(VisitKind.VISIT_BINARY,
962 left: '2', operator: '*', right: '3')),
963 const Test(
964 '''
965 m() => 2 / 3;
966 ''',
967 const Visit(VisitKind.VISIT_BINARY,
968 left: '2', operator: '/', right: '3')),
969 const Test(
970 '''
971 m() => 2 ~/ 3;
972 ''',
973 const Visit(VisitKind.VISIT_BINARY,
974 left: '2', operator: '~/', right: '3')),
975 const Test(
976 '''
977 m() => 2 % 3;
978 ''',
979 const Visit(VisitKind.VISIT_BINARY,
980 left: '2', operator: '%', right: '3')),
981 const Test(
982 '''
983 m() => 2 << 3;
984 ''',
985 const Visit(VisitKind.VISIT_BINARY,
986 left: '2', operator: '<<', right: '3')),
987 const Test(
988 '''
989 m() => 2 >> 3;
990 ''',
991 const Visit(VisitKind.VISIT_BINARY,
992 left: '2', operator: '>>', right: '3')),
993 const Test(
994 '''
995 m() => 2 <= 3;
996 ''',
997 const Visit(VisitKind.VISIT_BINARY,
998 left: '2', operator: '<=', right: '3')),
999 const Test(
1000 '''
1001 m() => 2 < 3;
1002 ''',
1003 const Visit(VisitKind.VISIT_BINARY,
1004 left: '2', operator: '<', right: '3')),
1005 const Test(
1006 '''
1007 m() => 2 >= 3;
1008 ''',
1009 const Visit(VisitKind.VISIT_BINARY,
1010 left: '2', operator: '>=', right: '3')),
1011 const Test(
1012 '''
1013 m() => 2 > 3;
1014 ''',
1015 const Visit(VisitKind.VISIT_BINARY,
1016 left: '2', operator: '>', right: '3')),
1017 const Test(
1018 '''
1019 m() => 2 & 3;
1020 ''',
1021 const Visit(VisitKind.VISIT_BINARY,
1022 left: '2', operator: '&', right: '3')),
1023 const Test(
1024 '''
1025 m() => 2 | 3;
1026 ''',
1027 const Visit(VisitKind.VISIT_BINARY,
1028 left: '2', operator: '|', right: '3')),
1029 const Test(
1030 '''
1031 m() => 2 ^ 3;
1032 ''',
1033 const Visit(VisitKind.VISIT_BINARY,
1034 left: '2', operator: '^', right: '3')),
1035 const Test(
1036 '''
1037 m() => 2[3];
1038 ''',
1039 const Visit(VisitKind.VISIT_BINARY,
1040 left: '2', operator: '[]', right: '3')),
1041 const Test.clazz(
1042 '''
1043 class B {
1044 operator +(_) => null;
1045 }
1046 class C extends B {
1047 m() => super + 42;
1048 }
1049 ''',
1050 const Visit(VisitKind.VISIT_SUPER_BINARY,
1051 element: 'function(B#+)',
1052 operator: '+',
1053 right: '42')),
1054
1055 // Equals
1056 const Test(
1057 '''
1058 m() => 2 == 3;
1059 ''',
1060 const Visit(VisitKind.VISIT_EQUALS,
1061 left: '2', right: '3')),
1062 const Test.clazz(
1063 '''
1064 class B {
1065 operator ==(_) => null;
1066 }
1067 class C extends B {
1068 m() => super == 42;
1069 }
1070 ''',
1071 const Visit(VisitKind.VISIT_SUPER_EQUALS,
1072 element: 'function(B#==)',
1073 right: '42')),
1074
1075 // Not equals
1076 const Test(
1077 '''
1078 m() => 2 != 3;
1079 ''',
1080 const Visit(VisitKind.VISIT_NOT_EQUALS,
1081 left: '2', right: '3')),
1082 // TODO(johnniwinther): Enable this. Resolution does not store the element.
1083 /*const Test.clazz(
1084 '''
1085 class B {
1086 operator ==(_) => null;
1087 }
1088 class C extends B {
1089 m() => super != 42;
1090 }
1091 ''',
1092 const Visit(VisitKind.VISIT_SUPER_NOT_EQUALS,
1093 element: 'function(B#==)',
1094 right: '42')),*/
1095
1096 // Unary expression
1097 const Test(
1098 '''
1099 m() => -false;
1100 ''',
1101 const Visit(VisitKind.VISIT_UNARY,
1102 expression: 'false', operator: '-')),
1103 const Test(
1104 '''
1105 m() => ~false;
1106 ''',
1107 const Visit(VisitKind.VISIT_UNARY,
1108 expression: 'false', operator: '~')),
1109 const Test.clazz(
1110 '''
1111 class B {
1112 operator -() => null;
1113 }
1114 class C extends B {
1115 m() => -super;
1116 }
1117 ''',
1118 const Visit(VisitKind.VISIT_SUPER_UNARY,
1119 element: 'function(B#unary-)', operator: '-')),
1120 const Test.clazz(
1121 '''
1122 class B {
1123 operator ~() => null;
1124 }
1125 class C extends B {
1126 m() => ~super;
1127 }
1128 ''',
1129 const Visit(VisitKind.VISIT_SUPER_UNARY,
1130 element: 'function(B#~)', operator: '~')),
1131 const Test(
1132 '''
1133 m() => !0;
1134 ''',
1135 const Visit(VisitKind.VISIT_NOT, expression: '0')),
1136
1137 // Index set
1138 const Test(
1139 '''
1140 m() => 0[1] = 2;
1141 ''',
1142 const Visit(VisitKind.VISIT_INDEX_SET,
1143 receiver: '0', index: '1', rhs: '2')),
1144 const Test.clazz(
1145 '''
1146 class B {
1147 operator []=(a, b) {}
1148 }
1149 class C extends B {
1150 m() => super[1] = 2;
1151 }
1152 ''',
1153 const Visit(VisitKind.VISIT_SUPER_INDEX_SET,
1154 element: 'function(B#[]=)', index: '1', rhs: '2')),
1155
1156 // Compound assignment
1157 const Test(
1158 '''
1159 m(a) => a.b += 42;
1160 ''',
1161 const [
1162 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND,
1163 receiver: 'a', operator: '+=', rhs: '42',
1164 getter: 'Selector(getter, b, arity=0)',
1165 setter: 'Selector(setter, b, arity=1)'),
1166 const Visit(VisitKind.VISIT_PARAMETER_GET,
1167 element: 'parameter(m#a)')
1168 ]),
1169 // TODO(johnniwinther): Enable this when type literals are recognized in
1170 // SendSet.
1171 /*const Test(
1172 '''
1173 class C {}
1174 m(a) => C += 42;
1175 ''',
1176 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND,
1177 constant: 'C', operator: '+=', rhs: '42')),
1178 const Test(
1179 '''
1180 typedef F();
1181 m(a) => F += 42;
1182 ''',
1183 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND,
1184 constant: 'F', operator: '+=', rhs: '42')),
1185 const Test.clazz(
1186 '''
1187 class C<T> {
1188 m(a) => T += 42;
1189 }
1190 ''',
1191 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND,
1192 element: 'type_variable(C#T)', operator: '+=', rhs: '42')),
1193 const Test(
1194 '''
1195 m(a) => dynamic += 42;
1196 ''',
1197 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND,
1198 constant: 'dynamic',
1199 operator: '+=', rhs: '42')),*/
1200 const Test(
1201 '''
1202 m(a) => a += 42;
1203 ''',
1204 const Visit(VisitKind.VISIT_PARAMETER_COMPOUND,
1205 element: 'parameter(m#a)', operator: '+=', rhs: '42')),
1206 const Test(
1207 '''
1208 m() {
1209 var a;
1210 a += 42;
1211 }
1212 ''',
1213 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_COMPOUND,
1214 element: 'variable(m#a)', operator: '+=', rhs: '42')),
1215 const Test(
1216 '''
1217 var a;
1218 m() => a += 42;
1219 ''',
1220 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_COMPOUND,
1221 element: 'field(a)', operator: '+=', rhs: '42')),
1222 const Test(
1223 '''
1224 get a => 0;
1225 set a(_) {}
1226 m() => a += 42;
1227 ''',
1228 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND,
1229 getter: 'getter(a)', setter: 'setter(a)',
1230 operator: '+=', rhs: '42')),
1231 const Test(
1232 '''
1233 class C {
1234 static var a;
1235 }
1236 m() => C.a += 42;
1237 ''',
1238 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
1239 element: 'field(C#a)', operator: '+=', rhs: '42')),
1240 const Test.clazz(
1241 '''
1242 class C {
1243 static var a;
1244 m() => C.a += 42;
1245 }
1246 ''',
1247 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
1248 element: 'field(C#a)', operator: '+=', rhs: '42')),
1249 const Test.clazz(
1250 '''
1251 class C {
1252 static var a;
1253 m() => a += 42;
1254 }
1255 ''',
1256 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
1257 element: 'field(C#a)', operator: '+=', rhs: '42')),
1258 const Test.prefix(
1259 '''
1260 class C {
1261 static var a;
1262 }
1263 ''',
1264 '''
1265 m() => p.C.a += 42;
1266 ''',
1267 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
1268 element: 'field(C#a)', operator: '+=', rhs: '42')),
1269 const Test(
1270 '''
1271 class C {
1272 static get a => 0;
1273 static set a(_) {}
1274 }
1275 m() => C.a += 42;
1276 ''',
1277 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
1278 getter: 'getter(C#a)', setter: 'setter(C#a)',
1279 operator: '+=', rhs: '42')),
1280 const Test.clazz(
1281 '''
1282 class C {
1283 static get a => 0;
1284 static set a(_) {}
1285 m() => C.a += 42;
1286 }
1287 ''',
1288 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
1289 getter: 'getter(C#a)', setter: 'setter(C#a)',
1290 operator: '+=', rhs: '42')),
1291 const Test.clazz(
1292 '''
1293 class C {
1294 static get a => 0;
1295 static set a(_) {}
1296 m() => a += 42;
1297 }
1298 ''',
1299 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
1300 getter: 'getter(C#a)', setter: 'setter(C#a)',
1301 operator: '+=', rhs: '42')),
1302 const Test.prefix(
1303 '''
1304 class C {
1305 static get a => 0;
1306 static set a(_) {}
1307 }
1308 ''',
1309 '''
1310 m() => p.C.a += 42;
1311 ''',
1312 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
1313 getter: 'getter(C#a)', setter: 'setter(C#a)',
1314 operator: '+=', rhs: '42')),
1315 // TODO(johnniwinther): Enable these when dart2js supports method and setter
1316 // with the same name.
1317 /*const Test(
1318 '''
1319 class C {
1320 static a() {}
1321 static set a(_) {}
1322 }
1323 m() => C.a += 42;
1324 ''',
1325 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
1326 getter: 'function(C#a)', setter: 'setter(C#a)',
1327 operator: '+=', rhs: '42')),
1328 const Test.clazz(
1329 '''
1330 class C {
1331 static a() {}
1332 static set a(_) {}
1333 m() => C.a += 42;
1334 }
1335 ''',
1336 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
1337 getter: 'function(C#a)', setter: 'setter(C#a)',
1338 operator: '+=', rhs: '42')),
1339 const Test.clazz(
1340 '''
1341 class C {
1342 static a() {}
1343 static set a(_) {}
1344 m() => a += 42;
1345 }
1346 ''',
1347 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
1348 getter: 'function(C#a)', setter: 'setter(C#a)',
1349 operator: '+=', rhs: '42')),
1350 const Test.prefix(
1351 '''
1352 class C {
1353 static a() {}
1354 static set a(_) {}
1355 }
1356 ''',
1357 '''
1358 m() => p.C.a += 42;
1359 ''',
1360 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
1361 getter: 'function(C#a)', setter: 'setter(C#a)',
1362 operator: '+=', rhs: '42')),*/
1363 const Test.clazz(
1364 '''
1365 class C {
1366 var a;
1367 m() => a += 42;
1368 }
1369 ''',
1370 const Visit(VisitKind.VISIT_THIS_PROPERTY_COMPOUND,
1371 operator: '+=', rhs: '42',
1372 getter: 'Selector(getter, a, arity=0)',
1373 setter: 'Selector(setter, a, arity=1)')),
1374 const Test.clazz(
1375 '''
1376 class C {
1377 var a = 0;
1378 m() => this.a += 42;
1379 }
1380 ''',
1381 const Visit(VisitKind.VISIT_THIS_PROPERTY_COMPOUND,
1382 operator: '+=', rhs: '42',
1383 getter: 'Selector(getter, a, arity=0)',
1384 setter: 'Selector(setter, a, arity=1)')),
1385 const Test.clazz(
1386 '''
1387 class B {
1388 var a = 0;
1389 }
1390 class C extends B {
1391 m() => super.a += 42;
1392 }
1393 ''',
1394 const Visit(VisitKind.VISIT_SUPER_FIELD_COMPOUND,
1395 element: 'field(B#a)', operator: '+=', rhs: '42')),
1396 const Test.clazz(
1397 '''
1398 class B {
1399 get a => 0;
1400 set a (_) {}
1401 }
1402 class C extends B {
1403 m() => super.a += 42;
1404 }
1405 ''',
1406 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND,
1407 getter: 'getter(B#a)', setter: 'setter(B#a)',
1408 operator: '+=', rhs: '42')),
1409 const Test.clazz(
1410 '''
1411 class A {
1412 get a => 0;
1413 }
1414 class B extends A {
1415 set a (_) {}
1416 }
1417 class C extends B {
1418 m() => super.a += 42;
1419 }
1420 ''',
1421 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND,
1422 getter: 'getter(A#a)', setter: 'setter(B#a)',
1423 operator: '+=', rhs: '42')),
1424 const Test.clazz(
1425 '''
1426 class A {
1427 var a;
1428 }
1429 class B extends A {
1430 get a => 0;
1431 }
1432
1433 class C extends B {
1434 m() => super.a += 42;
1435 }
1436 ''',
1437 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_COMPOUND,
1438 getter: 'getter(B#a)', setter: 'field(A#a)',
1439 operator: '+=', rhs: '42')),
1440 const Test.clazz(
1441 '''
1442 class A {
1443 var a;
1444 }
1445 class B extends A {
1446 set a(_) {}
1447 }
1448
1449 class C extends B {
1450 m() => super.a += 42;
1451 }
1452 ''',
1453 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_COMPOUND,
1454 getter: 'field(A#a)', setter: 'setter(B#a)',
1455 operator: '+=', rhs: '42')),
1456 // TODO(johnniwinther): Enable this when dart2js supports shadow setters.
1457 /*const Test.clazz(
1458 '''
1459 class A {
1460 var a;
1461 }
1462 class B extends A {
1463 final a;
1464 }
1465
1466 class C extends B {
1467 m() => super.a += 42;
1468 }
1469 ''',
1470 const Visit(VisitKind.VISIT_SUPER_FIELD_FIELD_COMPOUND,
1471 getter: 'field(B#a)', setter: 'field(A#a)',
1472 operator: '+=', rhs: '42')),*/
1473
1474 // Compound index assignment
1475 const Test(
1476 '''
1477 m() => 0[1] += 42;
1478 ''',
1479 const Visit(VisitKind.VISIT_COMPOUND_INDEX_SET,
1480 receiver: '0', index: '1', operator: '+=', rhs: '42')),
1481 // TODO(johnniwinther): Enable this when the getter element is stored.
1482 /*const Test.clazz(
1483 '''
1484 class B {
1485 operator [](_) {}
1486 operator []=(a, b) {}
1487 }
1488 class C extends B {
1489 m() => super[1] += 42;
1490 }
1491 ''',
1492 const Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET,
1493 getter: 'function(B#[])', setter: 'function(B#[]=)',
1494 index: '1', operator: '+=', rhs: '42')),*/
1495
1496 // Prefix expression
1497 const Test(
1498 '''
1499 m(a) => --a.b;
1500 ''',
1501 const [
1502 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX,
1503 receiver: 'a', operator: '--',
1504 getter: 'Selector(getter, b, arity=0)',
1505 setter: 'Selector(setter, b, arity=1)'),
1506 const Visit(VisitKind.VISIT_PARAMETER_GET,
1507 element: 'parameter(m#a)')
1508 ]),
1509 const Test(
1510 '''
1511 m(a) => ++a;
1512 ''',
1513 const Visit(VisitKind.VISIT_PARAMETER_PREFIX,
1514 element: 'parameter(m#a)', operator: '++')),
1515 const Test(
1516 '''
1517 m() {
1518 var a;
1519 --a;
1520 }
1521 ''',
1522 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_PREFIX,
1523 element: 'variable(m#a)', operator: '--')),
1524 const Test(
1525 '''
1526 var a;
1527 m() => ++a;
1528 ''',
1529 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_PREFIX,
1530 element: 'field(a)', operator: '++')),
1531 const Test(
1532 '''
1533 get a => 0;
1534 set a(_) {}
1535 m() => --a;
1536 ''',
1537 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX,
1538 getter: 'getter(a)', setter: 'setter(a)',
1539 operator: '--')),
1540 const Test(
1541 '''
1542 class C {
1543 static var a;
1544 }
1545 m() => ++C.a;
1546 ''',
1547 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
1548 element: 'field(C#a)', operator: '++')),
1549 const Test.clazz(
1550 '''
1551 class C {
1552 static var a;
1553 m() => ++C.a;
1554 }
1555 ''',
1556 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
1557 element: 'field(C#a)', operator: '++')),
1558 const Test.clazz(
1559 '''
1560 class C {
1561 static var a;
1562 m() => --a;
1563 }
1564 ''',
1565 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
1566 element: 'field(C#a)', operator: '--')),
1567 const Test.prefix(
1568 '''
1569 class C {
1570 static var a;
1571 }
1572 ''',
1573 '''
1574 m() => --p.C.a;
1575 ''',
1576 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
1577 element: 'field(C#a)', operator: '--')),
1578 const Test(
1579 '''
1580 class C {
1581 static get a => 0;
1582 static set a(_) {}
1583 }
1584 m() => ++C.a;
1585 ''',
1586 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
1587 getter: 'getter(C#a)', setter: 'setter(C#a)',
1588 operator: '++')),
1589 const Test.clazz(
1590 '''
1591 class C {
1592 static get a => 0;
1593 static set a(_) {}
1594 m() => --C.a;
1595 }
1596 ''',
1597 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
1598 getter: 'getter(C#a)', setter: 'setter(C#a)',
1599 operator: '--')),
1600 const Test.clazz(
1601 '''
1602 class C {
1603 static get a => 0;
1604 static set a(_) {}
1605 m() => --a;
1606 }
1607 ''',
1608 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
1609 getter: 'getter(C#a)', setter: 'setter(C#a)',
1610 operator: '--')),
1611 const Test.prefix(
1612 '''
1613 class C {
1614 static get a => 0;
1615 static set a(_) {}
1616 }
1617 ''',
1618 '''
1619 m() => ++p.C.a;
1620 ''',
1621 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
1622 getter: 'getter(C#a)', setter: 'setter(C#a)',
1623 operator: '++')),
1624 const Test.clazz(
1625 '''
1626 class C {
1627 var a;
1628 m() => --a;
1629 }
1630 ''',
1631 const Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX,
1632 operator: '--',
1633 getter: 'Selector(getter, a, arity=0)',
1634 setter: 'Selector(setter, a, arity=1)')),
1635 const Test.clazz(
1636 '''
1637 class C {
1638 var a = 0;
1639 m() => ++this.a;
1640 }
1641 ''',
1642 const Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX,
1643 operator: '++',
1644 getter: 'Selector(getter, a, arity=0)',
1645 setter: 'Selector(setter, a, arity=1)')),
1646 const Test.clazz(
1647 '''
1648 class B {
1649 var a = 0;
1650 }
1651 class C extends B {
1652 m() => --super.a;
1653 }
1654 ''',
1655 const Visit(VisitKind.VISIT_SUPER_FIELD_PREFIX,
1656 element: 'field(B#a)', operator: '--')),
1657 const Test.clazz(
1658 '''
1659 class B {
1660 get a => 0;
1661 set a (_) {}
1662 }
1663 class C extends B {
1664 m() => --super.a;
1665 }
1666 ''',
1667 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX,
1668 getter: 'getter(B#a)', setter: 'setter(B#a)',
1669 operator: '--')),
1670 const Test.clazz(
1671 '''
1672 class A {
1673 get a => 0;
1674 }
1675 class B extends A {
1676 set a (_) {}
1677 }
1678 class C extends B {
1679 m() => ++super.a;
1680 }
1681 ''',
1682 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX,
1683 getter: 'getter(A#a)', setter: 'setter(B#a)',
1684 operator: '++')),
1685 const Test.clazz(
1686 '''
1687 class A {
1688 var a;
1689 }
1690 class B extends A {
1691 get a => 0;
1692 }
1693
1694 class C extends B {
1695 m() => --super.a;
1696 }
1697 ''',
1698 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_PREFIX,
1699 getter: 'getter(B#a)', setter: 'field(A#a)',
1700 operator: '--')),
1701 const Test.clazz(
1702 '''
1703 class A {
1704 var a;
1705 }
1706 class B extends A {
1707 set a(_) {}
1708 }
1709
1710 class C extends B {
1711 m() => ++super.a;
1712 }
1713 ''',
1714 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_PREFIX,
1715 getter: 'field(A#a)', setter: 'setter(B#a)',
1716 operator: '++')),
1717
1718 // Prefix expression
1719 const Test(
1720 '''
1721 m(a) => a.b--;
1722 ''',
1723 const [
1724 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX,
1725 receiver: 'a', operator: '--',
1726 getter: 'Selector(getter, b, arity=0)',
1727 setter: 'Selector(setter, b, arity=1)'),
1728 const Visit(VisitKind.VISIT_PARAMETER_GET,
1729 element: 'parameter(m#a)')
1730 ]),
1731 const Test(
1732 '''
1733 m(a) => a++;
1734 ''',
1735 const Visit(VisitKind.VISIT_PARAMETER_POSTFIX,
1736 element: 'parameter(m#a)', operator: '++')),
1737 const Test(
1738 '''
1739 m() {
1740 var a;
1741 a--;
1742 }
1743 ''',
1744 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_POSTFIX,
1745 element: 'variable(m#a)', operator: '--')),
1746 const Test(
1747 '''
1748 var a;
1749 m() => a++;
1750 ''',
1751 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_POSTFIX,
1752 element: 'field(a)', operator: '++')),
1753 const Test(
1754 '''
1755 get a => 0;
1756 set a(_) {}
1757 m() => a--;
1758 ''',
1759 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX,
1760 getter: 'getter(a)', setter: 'setter(a)',
1761 operator: '--')),
1762 const Test(
1763 '''
1764 class C {
1765 static var a;
1766 }
1767 m() => C.a++;
1768 ''',
1769 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
1770 element: 'field(C#a)', operator: '++')),
1771 const Test.clazz(
1772 '''
1773 class C {
1774 static var a;
1775 m() => C.a++;
1776 }
1777 ''',
1778 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
1779 element: 'field(C#a)', operator: '++')),
1780 const Test.clazz(
1781 '''
1782 class C {
1783 static var a;
1784 m() => a--;
1785 }
1786 ''',
1787 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
1788 element: 'field(C#a)', operator: '--')),
1789 const Test.prefix(
1790 '''
1791 class C {
1792 static var a;
1793 }
1794 ''',
1795 '''
1796 m() => p.C.a--;
1797 ''',
1798 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
1799 element: 'field(C#a)', operator: '--')),
1800 const Test(
1801 '''
1802 class C {
1803 static get a => 0;
1804 static set a(_) {}
1805 }
1806 m() => C.a++;
1807 ''',
1808 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
1809 getter: 'getter(C#a)', setter: 'setter(C#a)',
1810 operator: '++')),
1811 const Test.clazz(
1812 '''
1813 class C {
1814 static get a => 0;
1815 static set a(_) {}
1816 m() => C.a--;
1817 }
1818 ''',
1819 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
1820 getter: 'getter(C#a)', setter: 'setter(C#a)',
1821 operator: '--')),
1822 const Test.clazz(
1823 '''
1824 class C {
1825 static get a => 0;
1826 static set a(_) {}
1827 m() => a--;
1828 }
1829 ''',
1830 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
1831 getter: 'getter(C#a)', setter: 'setter(C#a)',
1832 operator: '--')),
1833 const Test.prefix(
1834 '''
1835 class C {
1836 static get a => 0;
1837 static set a(_) {}
1838 }
1839 ''',
1840 '''
1841 m() => p.C.a++;
1842 ''',
1843 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
1844 getter: 'getter(C#a)', setter: 'setter(C#a)',
1845 operator: '++')),
1846 const Test.clazz(
1847 '''
1848 class C {
1849 var a;
1850 m() => a--;
1851 }
1852 ''',
1853 const Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX,
1854 operator: '--',
1855 getter: 'Selector(getter, a, arity=0)',
1856 setter: 'Selector(setter, a, arity=1)')),
1857 const Test.clazz(
1858 '''
1859 class C {
1860 var a = 0;
1861 m() => this.a++;
1862 }
1863 ''',
1864 const Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX,
1865 operator: '++',
1866 getter: 'Selector(getter, a, arity=0)',
1867 setter: 'Selector(setter, a, arity=1)')),
1868 const Test.clazz(
1869 '''
1870 class B {
1871 var a = 0;
1872 }
1873 class C extends B {
1874 m() => super.a--;
1875 }
1876 ''',
1877 const Visit(VisitKind.VISIT_SUPER_FIELD_POSTFIX,
1878 element: 'field(B#a)', operator: '--')),
1879 const Test.clazz(
1880 '''
1881 class B {
1882 get a => 0;
1883 set a (_) {}
1884 }
1885 class C extends B {
1886 m() => super.a--;
1887 }
1888 ''',
1889 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX,
1890 getter: 'getter(B#a)', setter: 'setter(B#a)',
1891 operator: '--')),
1892 const Test.clazz(
1893 '''
1894 class A {
1895 get a => 0;
1896 }
1897 class B extends A {
1898 set a (_) {}
1899 }
1900 class C extends B {
1901 m() => super.a++;
1902 }
1903 ''',
1904 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX,
1905 getter: 'getter(A#a)', setter: 'setter(B#a)',
1906 operator: '++')),
1907 const Test.clazz(
1908 '''
1909 class A {
1910 var a;
1911 }
1912 class B extends A {
1913 get a => 0;
1914 }
1915
1916 class C extends B {
1917 m() => super.a--;
1918 }
1919 ''',
1920 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_POSTFIX,
1921 getter: 'getter(B#a)', setter: 'field(A#a)',
1922 operator: '--')),
1923 const Test.clazz(
1924 '''
1925 class A {
1926 var a;
1927 }
1928 class B extends A {
1929 set a(_) {}
1930 }
1931
1932 class C extends B {
1933 m() => super.a++;
1934 }
1935 ''',
1936 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_POSTFIX,
1937 getter: 'field(A#a)', setter: 'setter(B#a)',
1938 operator: '++')),
1939
1940 ];
1941
1942 main() {
1943 Map<String, String> sourceFiles = {};
1944 Map<String, Test> testMap = {};
1945 StringBuffer mainSource = new StringBuffer();
1946 int index = 0;
1947 TESTS.forEach((Test test) {
1948 StringBuffer testSource = new StringBuffer();
1949 if (test.codeByPrefix != null) {
1950 String prefixFilename = 'pre$index.dart';
1951 sourceFiles[prefixFilename] = test.codeByPrefix;
1952 testSource.writeln("import '$prefixFilename' as p;");
1953 }
1954
1955 String filename = 'lib$index.dart';
1956 testSource.writeln(test.code);
1957 sourceFiles[filename] = testSource.toString();
1958 mainSource.writeln("import '$filename';");
1959 testMap[filename] = test;
1960 index++;
1961 });
1962 mainSource.writeln("main() {}");
1963 sourceFiles['main.dart'] = mainSource.toString();
1964
1965 asyncTest(() {
1966 Compiler compiler = compilerFor(sourceFiles,
1967 options: ['--analyze-all', '--analyze-only']);
1968 return compiler.run(Uri.parse('memory:main.dart')).then((_) {
1969 testMap.forEach((String filename, Test test) {
1970 LibraryElement library = compiler.libraryLoader.lookupLibrary(
1971 Uri.parse('memory:$filename'));
1972 var expectedVisits = test.expectedVisits;
1973 if (expectedVisits is! List) {
1974 expectedVisits = [expectedVisits];
1975 }
1976 AstElement element;
1977 String cls = test.cls;
1978 String method = test.method;
1979 if (cls == null) {
1980 element = library.find(method);
1981 } else {
1982 ClassElement classElement = library.find(cls);
1983 Expect.isNotNull(classElement,
1984 "Class '$cls' not found in:\n"
1985 "${library.compilationUnit.script.text}");
1986 element = classElement.localLookup(method);
1987 }
1988 Expect.isNotNull(element, "Element '$method' not found in:\n"
1989 "${library.compilationUnit.script.text}");
1990 ResolvedAst resolvedAst = element.resolvedAst;
1991 SemanticTestVisitor visitor =
1992 new SemanticTestVisitor(resolvedAst.elements);
1993 try {
1994 compiler.withCurrentElement(resolvedAst.element, () {
1995 //print(resolvedAst.node.toDebugString());
1996 resolvedAst.node.accept(visitor);
1997 });
1998 } catch (e, s) {
1999 Expect.fail("$e:\n$s\nIn test:\n"
2000 "${library.compilationUnit.script.text}");
2001 }
2002 Expect.listEquals(expectedVisits, visitor.visits,
2003 "In test:\n"
2004 "${library.compilationUnit.script.text}");
2005 });
2006 });
2007 });
2008 }
2009
2010
2011 class SemanticTestVisitor extends SemanticVisitor with SemanticSendVisitor {
2012 List<Visit> visits = <Visit>[];
2013
2014 SemanticTestVisitor(TreeElements elements) : super(elements);
2015
2016 apply(Node node, arg) => node.accept(this);
2017
2018 internalError(Spannable spannable, String message) {
2019 throw new SpannableAssertionFailure(spannable, message);
2020 }
2021
2022 SemanticSendVisitor get sendVisitor => this;
2023
2024 @override
2025 visitNode(Node node) {
2026 node.visitChildren(this);
2027 }
2028
2029 @override
2030 visitAs(
2031 Send node,
2032 Node expression,
2033 DartType type,
2034 arg) {
2035 visits.add(new Visit(VisitKind.VISIT_AS,
2036 expression: expression, type: type));
2037 apply(expression, arg);
2038 }
2039
2040 @override
2041 visitAssert(
2042 Send node,
2043 Node expression,
2044 arg) {
2045 visits.add(new Visit(VisitKind.VISIT_ASSERT, expression: expression));
2046 apply(expression, arg);
2047 }
2048
2049 @override
2050 errorInvalidAssert(
2051 Send node,
2052 NodeList arguments,
2053 arg) {
2054 // TODO: implement errorAssert
2055 }
2056
2057 @override
2058 visitBinary(
2059 Send node,
2060 Node left,
2061 BinaryOperator operator,
2062 Node right,
2063 arg) {
2064 visits.add(new Visit(VisitKind.VISIT_BINARY,
2065 left: left, operator: operator, right: right));
2066 apply(left, arg);
2067 apply(right, arg);
2068 }
2069
2070 @override
2071 visitClassTypeLiteralGet(
2072 Send node,
2073 TypeConstantExpression constant,
2074 arg) {
2075 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET,
2076 constant: constant.getText()));
2077 }
2078
2079 @override
2080 visitClassTypeLiteralInvoke(
2081 Send node,
2082 TypeConstantExpression constant,
2083 NodeList arguments,
2084 Selector selector,
2085 arg) {
2086 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE,
2087 constant: constant.getText(), arguments: arguments));
2088 apply(arguments, arg);
2089 }
2090
2091 @override
2092 errorClassTypeLiteralSet(
2093 SendSet node,
2094 TypeConstantExpression constant,
2095 Node rhs,
2096 arg) {
2097 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE,
2098 constant: constant.getText(), rhs: rhs));
2099 apply(rhs, arg);
2100 }
2101
2102 @override
2103 visitNotEquals(
2104 Send node,
2105 Node left,
2106 Node right,
2107 arg) {
2108 visits.add(new Visit(VisitKind.VISIT_NOT_EQUALS,
2109 left: left, right: right));
2110 apply(left, arg);
2111 apply(right, arg);
2112 }
2113
2114 @override
2115 visitDynamicPropertyPrefix(
2116 Send node,
2117 Node receiver,
2118 IncDecOperator operator,
2119 Selector getterSelector,
2120 Selector setterSelector,
2121 arg) {
2122 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX,
2123 receiver: receiver, operator: operator,
2124 getter: getterSelector, setter: setterSelector));
2125 apply(receiver, arg);
2126 }
2127
2128 @override
2129 visitDynamicPropertyPostfix(
2130 Send node,
2131 Node receiver,
2132 IncDecOperator operator,
2133 Selector getterSelector,
2134 Selector setterSelector,
2135 arg) {
2136 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX,
2137 receiver: receiver, operator: operator,
2138 getter: getterSelector, setter: setterSelector));
2139 apply(receiver, arg);
2140 }
2141
2142 @override
2143 visitDynamicPropertyGet(
2144 Send node,
2145 Node receiver,
2146 Selector selector,
2147 arg) {
2148 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET,
2149 receiver: receiver, name: selector.name));
2150 }
2151
2152 @override
2153 visitDynamicPropertyInvoke(
2154 Send node,
2155 Node receiver,
2156 NodeList arguments,
2157 Selector selector,
2158 arg) {
2159 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE,
2160 receiver: receiver, name: selector.name, arguments: arguments));
2161 apply(arguments, arg);
2162 }
2163
2164 @override
2165 visitDynamicPropertySet(
2166 SendSet node,
2167 Node receiver,
2168 Selector selector,
2169 Node rhs,
2170 arg) {
2171 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET,
2172 receiver: receiver, name: selector.name, rhs: rhs));
2173 }
2174
2175 @override
2176 visitDynamicTypeLiteralGet(
2177 Send node,
2178 TypeConstantExpression constant,
2179 arg) {
2180 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET,
2181 constant: constant.getText()));
2182 }
2183
2184 @override
2185 visitDynamicTypeLiteralInvoke(
2186 Send node,
2187 TypeConstantExpression constant,
2188 NodeList arguments,
2189 Selector selector,
2190 arg) {
2191 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE,
2192 constant: constant.getText(), arguments: arguments));
2193 }
2194
2195 @override
2196 errorDynamicTypeLiteralSet(
2197 Send node,
2198 TypeConstantExpression constant,
2199 Node rhs,
2200 arg) {
2201 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET,
2202 rhs: rhs));
2203 apply(rhs, arg);
2204 }
2205
2206 @override
2207 visitExpressionInvoke(
2208 Send node,
2209 Node expression,
2210 NodeList arguments,
2211 Selector selector,
2212 arg) {
2213 visits.add(new Visit(VisitKind.VISIT_EXPRESSION_INVOKE,
2214 receiver: expression, arguments: arguments));
2215 }
2216
2217 @override
2218 visitIs(
2219 Send node,
2220 Node expression,
2221 DartType type,
2222 arg) {
2223 visits.add(new Visit(VisitKind.VISIT_IS,
2224 expression: expression, type: type));
2225 apply(expression, arg);
2226 }
2227
2228 @override
2229 visitIsNot(
2230 Send node,
2231 Node expression,
2232 DartType type,
2233 arg) {
2234 visits.add(new Visit(VisitKind.VISIT_IS_NOT,
2235 expression: expression, type: type));
2236 apply(expression, arg);
2237 }
2238
2239 @override
2240 visitLogicalAnd(
2241 Send node,
2242 Node left,
2243 Node right,
2244 arg) {
2245 visits.add(new Visit(VisitKind.VISIT_LOGICAL_AND,
2246 left: left, right: right));
2247 apply(left, arg);
2248 apply(right, arg);
2249 }
2250
2251 @override
2252 visitLogicalOr(
2253 Send node,
2254 Node left,
2255 Node right,
2256 arg) {
2257 visits.add(new Visit(VisitKind.VISIT_LOGICAL_OR,
2258 left: left, right: right));
2259 apply(left, arg);
2260 apply(right, arg);
2261 }
2262
2263 @override
2264 visitLocalFunctionGet(
2265 Send node,
2266 LocalFunctionElement function,
2267 arg) {
2268 visits.add(new Visit(VisitKind.VISIT_LOCAL_FUNCTION_GET,
2269 element: function));
2270 }
2271
2272 @override
2273 visitLocalFunctionInvoke(
2274 Send node,
2275 LocalFunctionElement function,
2276 NodeList arguments,
2277 Selector selector,
2278 arg) {
2279 visits.add(new Visit(VisitKind.VISIT_LOCAL_FUNCTION_INVOKE,
2280 element: function, arguments: arguments));
2281 apply(arguments, arg);
2282 }
2283
2284 @override
2285 visitLocalVariableGet(
2286 Send node,
2287 LocalVariableElement variable,
2288 arg) {
2289 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_GET,
2290 element: variable));
2291 }
2292
2293 @override
2294 visitLocalVariableInvoke(
2295 Send node,
2296 LocalVariableElement variable,
2297 NodeList arguments,
2298 Selector selector,
2299 arg) {
2300 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_INVOKE,
2301 element: variable, arguments: arguments));
2302 apply(arguments, arg);
2303 }
2304
2305 @override
2306 visitLocalVariableSet(
2307 SendSet node,
2308 LocalVariableElement variable,
2309 Node rhs,
2310 arg) {
2311 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_SET,
2312 element: variable, rhs: rhs));
2313 apply(rhs, arg);
2314 }
2315
2316 @override
2317 visitParameterGet(
2318 Send node,
2319 ParameterElement parameter,
2320 arg) {
2321 visits.add(new Visit(VisitKind.VISIT_PARAMETER_GET, element: parameter));
2322 }
2323
2324 @override
2325 visitParameterInvoke(
2326 Send node,
2327 ParameterElement parameter,
2328 NodeList arguments,
2329 Selector selector,
2330 arg) {
2331 visits.add(new Visit(VisitKind.VISIT_PARAMETER_INVOKE,
2332 element: parameter, arguments: arguments));
2333 apply(arguments, arg);
2334 }
2335
2336 @override
2337 visitParameterSet(
2338 SendSet node,
2339 ParameterElement parameter,
2340 Node rhs,
2341 arg) {
2342 visits.add(new Visit(VisitKind.VISIT_PARAMETER_SET,
2343 element: parameter, rhs: rhs));
2344 apply(rhs, arg);
2345 }
2346
2347 @override
2348 visitStaticFieldGet(
2349 Send node,
2350 FieldElement field,
2351 arg) {
2352 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: field));
2353 }
2354
2355 @override
2356 visitStaticFieldInvoke(
2357 Send node,
2358 FieldElement field,
2359 NodeList arguments,
2360 Selector selector,
2361 arg) {
2362 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
2363 element: field, arguments: arguments));
2364 apply(arguments, arg);
2365 }
2366
2367 @override
2368 visitStaticFieldSet(
2369 SendSet node,
2370 FieldElement field,
2371 Node rhs,
2372 arg) {
2373 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_SET,
2374 element: field, rhs: rhs));
2375 apply(rhs, arg);
2376 }
2377
2378 @override
2379 visitStaticFunctionGet(
2380 Send node,
2381 MethodElement function,
2382 arg) {
2383 visits.add(new Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
2384 element: function));
2385 }
2386
2387 @override
2388 visitStaticFunctionInvoke(
2389 Send node,
2390 MethodElement function,
2391 NodeList arguments,
2392 Selector selector,
2393 arg) {
2394 visits.add(new Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
2395 element: function, arguments: arguments));
2396 apply(arguments, arg);
2397 }
2398
2399 @override
2400 visitStaticGetterGet(
2401 Send node,
2402 FunctionElement getter,
2403 arg) {
2404 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_GET,
2405 element: getter));
2406 }
2407
2408 @override
2409 visitStaticGetterInvoke(
2410 Send node,
2411 FunctionElement getter,
2412 NodeList arguments,
2413 Selector selector,
2414 arg) {
2415 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
2416 element: getter, arguments: arguments));
2417 apply(arguments, arg);
2418 }
2419
2420 @override
2421 visitStaticSetterSet(
2422 SendSet node,
2423 FunctionElement setter,
2424 Node rhs,
2425 arg) {
2426 visits.add(new Visit(VisitKind.VISIT_STATIC_SETTER_SET,
2427 element: setter, rhs: rhs));
2428 apply(rhs, arg);
2429 }
2430
2431 @override
2432 visitSuperBinary(
2433 Send node,
2434 FunctionElement function,
2435 BinaryOperator operator,
2436 Node argument,
2437 arg) {
2438 visits.add(new Visit(VisitKind.VISIT_SUPER_BINARY,
2439 element: function, operator: operator, right: argument));
2440 apply(argument, arg);
2441 }
2442
2443 @override
2444 visitSuperNotEquals(
2445 Send node,
2446 FunctionElement function,
2447 Node argument,
2448 arg) {
2449 visits.add(new Visit(VisitKind.VISIT_SUPER_NOT_EQUALS,
2450 element: function, right: argument));
2451 apply(argument, arg);
2452 }
2453
2454 @override
2455 visitThisGet(Identifier node, arg) {
2456 visits.add(new Visit(VisitKind.VISIT_THIS_GET));
2457 }
2458
2459 @override
2460 visitThisInvoke(
2461 Send node,
2462 NodeList arguments,
2463 Selector selector,
2464 arg) {
2465 visits.add(new Visit(VisitKind.VISIT_THIS_INVOKE, arguments: arguments));
2466 apply(arguments, arg);
2467 }
2468
2469 @override
2470 visitThisPropertyGet(
2471 Send node,
2472 Selector selector,
2473 arg) {
2474 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
2475 name: selector.name));
2476 }
2477
2478 @override
2479 visitThisPropertyInvoke(
2480 Send node,
2481 NodeList arguments,
2482 Selector selector,
2483 arg) {
2484 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE,
2485 name: selector.name, arguments: arguments));
2486 apply(arguments, arg);
2487 }
2488
2489 @override
2490 visitThisPropertySet(
2491 SendSet node,
2492 Selector selector,
2493 Node rhs,
2494 arg) {
2495 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
2496 name: selector.name, rhs: rhs));
2497 apply(rhs, arg);
2498 }
2499
2500 @override
2501 visitTopLevelFieldGet(
2502 Send node,
2503 FieldElement field,
2504 arg) {
2505 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: field));
2506 }
2507
2508 @override
2509 visitTopLevelFieldInvoke(
2510 Send node,
2511 FieldElement field,
2512 NodeList arguments,
2513 Selector selector,
2514 arg) {
2515 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE,
2516 element: field, arguments: arguments));
2517 apply(arguments, arg);
2518 }
2519
2520 @override
2521 visitTopLevelFieldSet(
2522 SendSet node,
2523 FieldElement field,
2524 Node rhs,
2525 arg) {
2526 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET,
2527 element: field, rhs: rhs));
2528 apply(rhs, arg);
2529 }
2530
2531 @override
2532 visitTopLevelFunctionGet(
2533 Send node,
2534 MethodElement function,
2535 arg) {
2536 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_GET,
2537 element: function));
2538 }
2539
2540 @override
2541 visitTopLevelFunctionInvoke(
2542 Send node,
2543 MethodElement function,
2544 NodeList arguments,
2545 Selector selector,
2546 arg) {
2547 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE,
2548 element: function, arguments: arguments));
2549 apply(arguments, arg);
2550 }
2551
2552 @override
2553 visitTopLevelGetterGet(
2554 Send node,
2555 FunctionElement getter,
2556 arg) {
2557 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET,
2558 element: getter));
2559 }
2560
2561 @override
2562 visitTopLevelGetterInvoke(
2563 Send node,
2564 FunctionElement getter,
2565 NodeList arguments,
2566 Selector selector,
2567 arg) {
2568 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE,
2569 element: getter, arguments: arguments));
2570 apply(arguments, arg);
2571 }
2572
2573 @override
2574 visitTopLevelSetterSet(
2575 SendSet node,
2576 FunctionElement setter,
2577 Node rhs,
2578 arg) {
2579 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET,
2580 element: setter, rhs: rhs));
2581 apply(rhs, arg);
2582 }
2583
2584 @override
2585 visitTypeVariableTypeLiteralGet(
2586 Send node,
2587 TypeVariableElement element,
2588 arg) {
2589 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET,
2590 element: element));
2591 }
2592
2593 @override
2594 visitTypeVariableTypeLiteralInvoke(
2595 Send node,
2596 TypeVariableElement element,
2597 NodeList arguments,
2598 Selector selector,
2599 arg) {
2600 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE,
2601 element: element, arguments: arguments));
2602 apply(arguments, arg);
2603 }
2604
2605 @override
2606 errorTypeVariableTypeLiteralSet(
2607 SendSet node,
2608 TypeVariableElement element,
2609 Node rhs,
2610 arg) {
2611 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET,
2612 element: element, rhs: rhs));
2613 apply(rhs, arg);
2614 }
2615
2616 @override
2617 visitTypedefTypeLiteralGet(
2618 Send node,
2619 TypeConstantExpression constant,
2620 arg) {
2621 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET,
2622 constant: constant.getText()));
2623 }
2624
2625 @override
2626 visitTypedefTypeLiteralInvoke(
2627 Send node,
2628 TypeConstantExpression constant,
2629 NodeList arguments,
2630 Selector selector,
2631 arg) {
2632 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE,
2633 constant: constant.getText(), arguments: arguments));
2634 apply(arguments, arg);
2635 }
2636
2637 @override
2638 errorTypedefTypeLiteralSet(
2639 SendSet node,
2640 TypeConstantExpression constant,
2641 Node rhs,
2642 arg) {
2643 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET,
2644 constant: constant.getText(), rhs: rhs));
2645 apply(rhs, arg);
2646 }
2647
2648 @override
2649 visitUnary(
2650 Send node,
2651 UnaryOperator operator,
2652 Node expression,
2653 arg) {
2654 visits.add(new Visit(VisitKind.VISIT_UNARY,
2655 expression: expression, operator: operator));
2656 apply(expression, arg);
2657 }
2658
2659 @override
2660 visitNot(
2661 Send node,
2662 Node expression,
2663 arg) {
2664 visits.add(new Visit(VisitKind.VISIT_NOT, expression: expression));
2665 apply(expression, arg);
2666 }
2667
2668 @override
2669 visitSuperFieldGet(
2670 Send node,
2671 FieldElement field,
2672 arg) {
2673 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_GET, element: field));
2674 }
2675
2676 @override
2677 visitSuperFieldInvoke(
2678 Send node,
2679 FieldElement field,
2680 NodeList arguments,
2681 Selector selector,
2682 arg) {
2683 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE,
2684 element: field, arguments: arguments));
2685 apply(arguments, arg);
2686 }
2687
2688 @override
2689 visitSuperFieldSet(
2690 SendSet node,
2691 FieldElement field,
2692 Node rhs,
2693 arg) {
2694 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SET,
2695 element: field, rhs: rhs));
2696 apply(rhs, arg);
2697 }
2698
2699 @override
2700 visitSuperMethodGet(
2701 Send node,
2702 MethodElement method,
2703 arg) {
2704 visits.add(new Visit(VisitKind.VISIT_SUPER_METHOD_GET, element: method));
2705 }
2706
2707 @override
2708 visitSuperMethodInvoke(
2709 Send node,
2710 MethodElement method,
2711 NodeList arguments,
2712 Selector selector,
2713 arg) {
2714 visits.add(new Visit(VisitKind.VISIT_SUPER_METHOD_INVOKE,
2715 element: method, arguments: arguments));
2716 apply(arguments, arg);
2717 }
2718
2719 @override
2720 visitSuperGetterGet(
2721 Send node,
2722 FunctionElement getter,
2723 arg) {
2724 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_GET, element: getter));
2725 }
2726
2727 @override
2728 visitSuperGetterInvoke(
2729 Send node,
2730 FunctionElement getter,
2731 NodeList arguments,
2732 Selector selector,
2733 arg) {
2734 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_INVOKE,
2735 element: getter, arguments: arguments));
2736 apply(arguments, arg);
2737 }
2738
2739 @override
2740 visitSuperSetterSet(
2741 SendSet node,
2742 FunctionElement setter,
2743 Node rhs,
2744 arg) {
2745 visits.add(new Visit(VisitKind.VISIT_SUPER_SETTER_SET,
2746 element: setter, rhs: rhs));
2747 apply(rhs, arg);
2748 }
2749
2750 @override
2751 visitSuperUnary(
2752 Send node,
2753 UnaryOperator operator,
2754 FunctionElement function,
2755 arg) {
2756 visits.add(new Visit(VisitKind.VISIT_SUPER_UNARY,
2757 element: function, operator: operator));
2758 }
2759
2760 @override
2761 visitEquals(
2762 Send node,
2763 Node left,
2764 Node right,
2765 arg) {
2766 visits.add(new Visit(VisitKind.VISIT_EQUALS, left: left, right: right));
2767 apply(left, arg);
2768 apply(right, arg);
2769 }
2770
2771 @override
2772 visitSuperEquals(
2773 Send node,
2774 FunctionElement function,
2775 Node argument,
2776 arg) {
2777 visits.add(new Visit(VisitKind.VISIT_SUPER_EQUALS,
2778 element: function, right: argument));
2779 apply(argument, arg);
2780 }
2781
2782 @override
2783 visitIndexSet(
2784 Send node,
2785 Node receiver,
2786 Node index,
2787 Node rhs,
2788 arg) {
2789 visits.add(new Visit(VisitKind.VISIT_INDEX_SET,
2790 receiver: receiver, index: index, rhs: rhs));
2791 apply(receiver, arg);
2792 apply(index, arg);
2793 apply(rhs, arg);
2794 }
2795
2796 @override
2797 visitSuperIndexSet(
2798 Send node,
2799 FunctionElement function,
2800 Node index,
2801 Node rhs,
2802 arg) {
2803 visits.add(new Visit(VisitKind.VISIT_SUPER_INDEX_SET,
2804 element: function, index: index, rhs: rhs));
2805 apply(index, arg);
2806 apply(rhs, arg);
2807 }
2808
2809 @override
2810 errorFinalLocalVariableSet(
2811 SendSet node,
2812 LocalVariableElement variable,
2813 Node rhs,
2814 arg) {
2815 // TODO: implement errorFinalLocalVariableSet
2816 }
2817
2818 @override
2819 errorFinalParameterSet(
2820 SendSet node,
2821 ParameterElement parameter,
2822 Node rhs,
2823 arg) {
2824 // TODO: implement errorFinalParameterSet
2825 }
2826
2827 @override
2828 errorFinalStaticFieldSet(
2829 SendSet node,
2830 FieldElement field,
2831 Node rhs,
2832 arg) {
2833 // TODO: implement errorFinalStaticFieldSet
2834 }
2835
2836 @override
2837 errorFinalSuperFieldSet(
2838 SendSet node,
2839 FieldElement field,
2840 Node rhs,
2841 arg) {
2842 // TODO: implement errorFinalSuperFieldSet
2843 }
2844
2845 @override
2846 errorFinalTopLevelFieldSet(
2847 SendSet node,
2848 FieldElement field,
2849 Node rhs,
2850 arg) {
2851 // TODO: implement errorFinalTopLevelFieldSet
2852 }
2853
2854 @override
2855 errorLocalFunctionSet(
2856 SendSet node,
2857 LocalFunctionElement function,
2858 Node rhs,
2859 arg) {
2860 // TODO: implement errorLocalFunctionSet
2861 }
2862
2863 @override
2864 errorStaticFunctionSet(
2865 Send node,
2866 MethodElement function,
2867 Node rhs,
2868 arg) {
2869 // TODO: implement errorStaticFunctionSet
2870 }
2871
2872 @override
2873 errorStaticGetterSet(
2874 SendSet node,
2875 FunctionElement getter,
2876 Node rhs,
2877 arg) {
2878 // TODO: implement errorStaticGetterSet
2879 }
2880
2881 @override
2882 errorStaticSetterGet(
2883 Send node,
2884 FunctionElement setter,
2885 arg) {
2886 // TODO: implement errorStaticSetterGet
2887 }
2888
2889 @override
2890 errorStaticSetterInvoke(
2891 Send node,
2892 FunctionElement setter,
2893 NodeList arguments,
2894 Selector selector,
2895 arg) {
2896 // TODO: implement errorStaticSetterInvoke
2897 }
2898
2899 @override
2900 errorSuperGetterSet(
2901 SendSet node,
2902 FunctionElement getter,
2903 Node rhs,
2904 arg) {
2905 // TODO: implement errorSuperGetterSet
2906 }
2907
2908 @override
2909 errorSuperMethodSet(
2910 Send node,
2911 MethodElement method,
2912 Node rhs,
2913 arg) {
2914 // TODO: implement errorSuperMethodSet
2915 }
2916
2917 @override
2918 errorSuperSetterGet(
2919 Send node,
2920 FunctionElement setter,
2921 arg) {
2922 // TODO: implement errorSuperSetterGet
2923 }
2924
2925 @override
2926 errorSuperSetterInvoke(
2927 Send node,
2928 FunctionElement setter,
2929 NodeList arguments,
2930 Selector selector,
2931 arg) {
2932 // TODO: implement errorSuperSetterInvoke
2933 }
2934
2935 @override
2936 errorTopLevelFunctionSet(
2937 Send node,
2938 MethodElement function,
2939 Node rhs,
2940 arg) {
2941 // TODO: implement errorTopLevelFunctionSet
2942 }
2943
2944 @override
2945 errorTopLevelGetterSet(
2946 SendSet node,
2947 FunctionElement getter,
2948 Node rhs,
2949 arg) {
2950 // TODO: implement errorTopLevelGetterSet
2951 }
2952
2953 @override
2954 errorTopLevelSetterGet(
2955 Send node,
2956 FunctionElement setter,
2957 arg) {
2958 // TODO: implement errorTopLevelSetterGet
2959 }
2960
2961 @override
2962 errorTopLevelSetterInvoke(
2963 Send node,
2964 FunctionElement setter,
2965 NodeList arguments,
2966 Selector selector,
2967 arg) {
2968 // TODO: implement errorTopLevelSetterInvoke
2969 }
2970
2971 @override
2972 visitDynamicPropertyCompound(
2973 Send node,
2974 Node receiver,
2975 AssignmentOperator operator,
2976 Node rhs,
2977 Selector getterSelector,
2978 Selector setterSelector,
2979 arg) {
2980 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND,
2981 receiver: receiver, operator: operator, rhs: rhs,
2982 getter: getterSelector, setter: setterSelector));
2983 apply(receiver, arg);
2984 apply(rhs, arg);
2985 }
2986
2987 @override
2988 errorFinalLocalVariableCompound(
2989 Send node,
2990 LocalVariableElement variable,
2991 AssignmentOperator operator,
2992 Node rhs,
2993 arg) {
2994 // TODO: implement errorFinalLocalVariableCompound
2995 }
2996
2997 @override
2998 errorFinalParameterCompound(
2999 Send node,
3000 ParameterElement parameter,
3001 AssignmentOperator operator,
3002 Node rhs,
3003 arg) {
3004 // TODO: implement errorFinalParameterCompound
3005 }
3006
3007 @override
3008 errorFinalStaticFieldCompound(
3009 Send node,
3010 FieldElement field,
3011 AssignmentOperator operator,
3012 Node rhs,
3013 arg) {
3014 // TODO: implement errorFinalStaticFieldCompound
3015 }
3016
3017 @override
3018 errorFinalSuperFieldCompound(
3019 Send node,
3020 FieldElement field,
3021 AssignmentOperator operator,
3022 Node rhs,
3023 arg) {
3024 // TODO: implement errorFinalSuperFieldCompound
3025 }
3026
3027 @override
3028 errorFinalTopLevelFieldCompound(
3029 Send node,
3030 FieldElement field,
3031 AssignmentOperator operator,
3032 Node rhs,
3033 arg) {
3034 // TODO: implement errorFinalTopLevelFieldCompound
3035 }
3036
3037 @override
3038 errorLocalFunctionCompound(
3039 Send node,
3040 LocalFunctionElement function,
3041 AssignmentOperator operator,
3042 Node rhs,
3043 arg) {
3044 // TODO: implement errorLocalFunctionCompound
3045 }
3046
3047 @override
3048 visitLocalVariableCompound(
3049 Send node,
3050 LocalVariableElement variable,
3051 AssignmentOperator operator,
3052 Node rhs,
3053 arg) {
3054 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_COMPOUND,
3055 element: variable, operator: operator, rhs: rhs));
3056 apply(rhs, arg);
3057 }
3058
3059 @override
3060 visitParameterCompound(
3061 Send node,
3062 ParameterElement parameter,
3063 AssignmentOperator operator,
3064 Node rhs,
3065 arg) {
3066 visits.add(new Visit(VisitKind.VISIT_PARAMETER_COMPOUND,
3067 element: parameter, operator: operator, rhs: rhs));
3068 apply(rhs, arg);
3069 }
3070
3071 @override
3072 visitStaticFieldCompound(
3073 Send node,
3074 FieldElement field,
3075 AssignmentOperator operator,
3076 Node rhs,
3077 arg) {
3078 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
3079 element: field, operator: operator, rhs: rhs));
3080 apply(rhs, arg);
3081 }
3082
3083 @override
3084 visitStaticGetterSetterCompound(
3085 Send node,
3086 FunctionElement getter,
3087 FunctionElement setter,
3088 AssignmentOperator operator,
3089 Node rhs,
3090 arg) {
3091 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
3092 operator: operator, rhs: rhs,
3093 getter: getter, setter: setter));
3094 apply(rhs, arg);
3095 }
3096
3097 @override
3098 visitSuperFieldCompound(
3099 Send node,
3100 FieldElement field,
3101 AssignmentOperator operator,
3102 Node rhs,
3103 arg) {
3104 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_COMPOUND,
3105 element: field, operator: operator, rhs: rhs));
3106 apply(rhs, arg);
3107 }
3108
3109 @override
3110 visitSuperGetterSetterCompound(
3111 Send node,
3112 FunctionElement getter,
3113 FunctionElement setter,
3114 AssignmentOperator operator,
3115 Node rhs,
3116 arg) {
3117 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND,
3118 operator: operator, rhs: rhs,
3119 getter: getter, setter: setter));
3120 apply(rhs, arg);
3121 }
3122
3123 @override
3124 visitThisPropertyCompound(
3125 Send node,
3126 AssignmentOperator operator,
3127 Node rhs,
3128 Selector getterSelector,
3129 Selector setterSelector,
3130 arg) {
3131 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_COMPOUND,
3132 operator: operator, rhs: rhs,
3133 getter: getterSelector, setter: setterSelector));
3134 apply(rhs, arg);
3135 }
3136
3137 @override
3138 visitTopLevelFieldCompound(
3139 Send node,
3140 FieldElement field,
3141 AssignmentOperator operator,
3142 Node rhs,
3143 arg) {
3144 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_COMPOUND,
3145 element: field, operator: operator, rhs: rhs));
3146 apply(rhs, arg);
3147 }
3148
3149 @override
3150 visitTopLevelGetterSetterCompound(
3151 Send node,
3152 FunctionElement getter,
3153 FunctionElement setter,
3154 AssignmentOperator operator,
3155 Node rhs,
3156 arg) {
3157 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND,
3158 operator: operator, rhs: rhs,
3159 getter: getter, setter: setter));
3160 apply(rhs, arg);
3161 }
3162
3163 @override
3164 visitStaticMethodSetterCompound(
3165 Send node,
3166 FunctionElement method,
3167 FunctionElement setter,
3168 AssignmentOperator operator,
3169 Node rhs,
3170 arg) {
3171 visits.add(new Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
3172 operator: operator, rhs: rhs,
3173 getter: method, setter: setter));
3174 apply(rhs, arg);
3175 }
3176
3177 @override
3178 visitSuperFieldSetterCompound(
3179 Send node,
3180 FieldElement field,
3181 FunctionElement setter,
3182 AssignmentOperator operator,
3183 Node rhs,
3184 arg) {
3185 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_COMPOUND,
3186 operator: operator, rhs: rhs,
3187 getter: field, setter: setter));
3188 apply(rhs, arg);
3189 }
3190
3191 @override
3192 visitSuperGetterFieldCompound(
3193 Send node,
3194 FunctionElement getter,
3195 FieldElement field,
3196 AssignmentOperator operator,
3197 Node rhs,
3198 arg) {
3199 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_COMPOUND,
3200 operator: operator, rhs: rhs,
3201 getter: getter, setter: field));
3202 apply(rhs, arg);
3203 }
3204
3205 @override
3206 visitSuperMethodSetterCompound(
3207 Send node,
3208 FunctionElement method,
3209 FunctionElement setter,
3210 AssignmentOperator operator,
3211 Node rhs,
3212 arg) {
3213 // TODO: implement visitSuperMethodSetterCompound
3214 }
3215
3216 @override
3217 visitTopLevelMethodSetterCompound(
3218 Send node,
3219 FunctionElement method,
3220 FunctionElement setter,
3221 AssignmentOperator operator,
3222 Node rhs,
3223 arg) {
3224 // TODO: implement visitTopLevelMethodSetterCompound
3225 }
3226
3227 @override
3228 visitCompoundIndexSet(
3229 Send node,
3230 Node receiver,
3231 Node index,
3232 AssignmentOperator operator,
3233 Node rhs,
3234 arg) {
3235 visits.add(new Visit(VisitKind.VISIT_COMPOUND_INDEX_SET,
3236 receiver: receiver, index: index, rhs: rhs, operator: operator));
3237 apply(receiver, arg);
3238 apply(index, arg);
3239 apply(rhs, arg);
3240 }
3241
3242 @override
3243 visitSuperCompoundIndexSet(
3244 Send node,
3245 FunctionElement getter,
3246 FunctionElement setter,
3247 Node index,
3248 AssignmentOperator operator,
3249 Node rhs,
3250 arg) {
3251 visits.add(new Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET,
3252 getter: getter, setter: setter,
3253 index: index, rhs: rhs, operator: operator));
3254 apply(index, arg);
3255 apply(rhs, arg);
3256 }
3257
3258 @override
3259 visitClassTypeLiteralCompound(
3260 Send node,
3261 TypeConstantExpression constant,
3262 AssignmentOperator operator,
3263 Node rhs,
3264 arg) {
3265 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND,
3266 constant: constant.getText(), operator: operator, rhs: rhs));
3267 apply(rhs, arg);
3268 }
3269
3270 @override
3271 visitDynamicTypeLiteralCompound(
3272 Send node,
3273 TypeConstantExpression constant,
3274 AssignmentOperator operator,
3275 Node rhs,
3276 arg) {
3277 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND,
3278 constant: constant.getText(), operator: operator, rhs: rhs));
3279 apply(rhs, arg);
3280 }
3281
3282 @override
3283 visitTypeVariableTypeLiteralCompound(
3284 Send node,
3285 TypeVariableElement element,
3286 AssignmentOperator operator,
3287 Node rhs,
3288 arg) {
3289 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND,
3290 element: element, operator: operator, rhs: rhs));
3291 apply(rhs, arg);
3292 }
3293
3294 @override
3295 visitTypedefTypeLiteralCompound(
3296 Send node,
3297 TypeConstantExpression constant,
3298 AssignmentOperator operator,
3299 Node rhs,
3300 arg) {
3301 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND,
3302 constant: constant.getText(), operator: operator, rhs: rhs));
3303 apply(rhs, arg);
3304 }
3305
3306 @override
3307 errorLocalFunctionPrefix(
3308 Send node,
3309 LocalFunctionElement function,
3310 IncDecOperator operator,
3311 arg) {
3312 // TODO: implement errorLocalFunctionPrefix
3313 }
3314
3315 @override
3316 visitClassTypeLiteralPrefix(
3317 Send node,
3318 TypeConstantExpression constant,
3319 IncDecOperator operator,
3320 arg) {
3321 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_PREFIX,
3322 constant: constant.getText(), operator: operator));
3323 }
3324
3325 @override
3326 visitDynamicTypeLiteralPrefix(
3327 Send node,
3328 TypeConstantExpression constant,
3329 IncDecOperator operator,
3330 arg) {
3331 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_PREFIX,
3332 constant: constant.getText(), operator: operator));
3333 }
3334
3335 @override
3336 visitLocalVariablePrefix(
3337 Send node,
3338 LocalVariableElement variable,
3339 IncDecOperator operator,
3340 arg) {
3341 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_PREFIX,
3342 element: variable, operator: operator));
3343 }
3344
3345 @override
3346 visitParameterPrefix(
3347 Send node,
3348 ParameterElement parameter,
3349 IncDecOperator operator,
3350 arg) {
3351 visits.add(new Visit(VisitKind.VISIT_PARAMETER_PREFIX,
3352 element: parameter, operator: operator));
3353 }
3354
3355 @override
3356 visitStaticFieldPrefix(
3357 Send node,
3358 FieldElement field,
3359 IncDecOperator operator,
3360 arg) {
3361 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
3362 element: field, operator: operator));
3363 }
3364
3365 @override
3366 visitStaticGetterSetterPrefix(
3367 Send node,
3368 FunctionElement getter,
3369 FunctionElement setter,
3370 IncDecOperator operator,
3371 arg) {
3372 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
3373 getter: getter, setter: setter, operator: operator));
3374 }
3375
3376 @override
3377 visitStaticMethodSetterPrefix(
3378 Send node,
3379 FunctionElement getter,
3380 FunctionElement setter,
3381 IncDecOperator operator,
3382 arg) {
3383 // TODO: implement visitStaticMethodSetterPrefix
3384 }
3385
3386 @override
3387 visitSuperFieldFieldPrefix(
3388 Send node,
3389 FieldElement readField,
3390 FieldElement writtenField,
3391 IncDecOperator operator,
3392 arg) {
3393 // TODO: implement visitSuperFieldFieldPrefix
3394 }
3395
3396 @override
3397 visitSuperFieldPrefix(
3398 Send node,
3399 FieldElement field,
3400 IncDecOperator operator,
3401 arg) {
3402 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_PREFIX,
3403 element: field, operator: operator));
3404 }
3405
3406 @override
3407 visitSuperFieldSetterPrefix(
3408 Send node,
3409 FieldElement field,
3410 FunctionElement setter,
3411 IncDecOperator operator,
3412 arg) {
3413 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_PREFIX,
3414 getter: field, setter: setter, operator: operator));
3415 }
3416
3417 @override
3418 visitSuperGetterFieldPrefix(
3419 Send node,
3420 FunctionElement getter,
3421 FieldElement field,
3422 IncDecOperator operator,
3423 arg) {
3424 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_PREFIX,
3425 getter: getter, setter: field, operator: operator));
3426 }
3427
3428 @override
3429 visitSuperGetterSetterPrefix(
3430 Send node,
3431 FunctionElement getter,
3432 FunctionElement setter,
3433 IncDecOperator operator,
3434 arg) {
3435 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX,
3436 getter: getter, setter: setter, operator: operator));
3437 }
3438
3439 @override
3440 visitSuperMethodSetterPrefix(
3441 Send node,
3442 FunctionElement method,
3443 FunctionElement setter,
3444 IncDecOperator operator,
3445 arg) {
3446 // TODO: implement visitSuperMethodSetterPrefix
3447 }
3448
3449 @override
3450 visitThisPropertyPrefix(
3451 Send node,
3452 IncDecOperator operator,
3453 Selector getterSelector,
3454 Selector setterSelector,
3455 arg) {
3456 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX,
3457 operator: operator,
3458 getter: getterSelector, setter: setterSelector));
3459 }
3460
3461 @override
3462 visitTopLevelFieldPrefix(
3463 Send node,
3464 FieldElement field,
3465 IncDecOperator operator,
3466 arg) {
3467 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_PREFIX,
3468 element: field, operator: operator));
3469 }
3470
3471 @override
3472 visitTopLevelGetterSetterPrefix(
3473 Send node,
3474 FunctionElement getter,
3475 FunctionElement setter,
3476 IncDecOperator operator,
3477 arg) {
3478 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX,
3479 getter: getter, setter: setter, operator: operator));
3480 }
3481
3482 @override
3483 visitTopLevelMethodSetterPrefix(
3484 Send node,
3485 FunctionElement method,
3486 FunctionElement setter,
3487 IncDecOperator operator,
3488 arg) {
3489 // TODO: implement visitTopLevelMethodSetterPrefix
3490 }
3491
3492 @override
3493 visitTypeVariableTypeLiteralPrefix(
3494 Send node,
3495 TypeVariableElement element,
3496 IncDecOperator operator,
3497 arg) {
3498 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX,
3499 element: element, operator: operator));
3500 }
3501
3502 @override
3503 visitTypedefTypeLiteralPrefix(
3504 Send node,
3505 TypeConstantExpression constant,
3506 IncDecOperator operator,
3507 arg) {
3508 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_PREFIX,
3509 constant: constant.getText(), operator: operator));
3510 }
3511
3512 @override
3513 errorLocalFunctionPostfix(
3514 Send node,
3515 LocalFunctionElement function,
3516 IncDecOperator operator,
3517 arg) {
3518 // TODO: implement errorLocalFunctionPostfix
3519 }
3520
3521 @override
3522 visitClassTypeLiteralPostfix(
3523 Send node,
3524 TypeConstantExpression constant,
3525 IncDecOperator operator,
3526 arg) {
3527 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_POSTFIX,
3528 constant: constant.getText(), operator: operator));
3529 }
3530
3531 @override
3532 visitDynamicTypeLiteralPostfix(
3533 Send node,
3534 TypeConstantExpression constant,
3535 IncDecOperator operator,
3536 arg) {
3537 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX,
3538 constant: constant.getText(), operator: operator));
3539 }
3540
3541 @override
3542 visitLocalVariablePostfix(
3543 Send node,
3544 LocalVariableElement variable,
3545 IncDecOperator operator,
3546 arg) {
3547 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_POSTFIX,
3548 element: variable, operator: operator));
3549 }
3550
3551 @override
3552 visitParameterPostfix(
3553 Send node,
3554 ParameterElement parameter,
3555 IncDecOperator operator,
3556 arg) {
3557 visits.add(new Visit(VisitKind.VISIT_PARAMETER_POSTFIX,
3558 element: parameter, operator: operator));
3559 }
3560
3561 @override
3562 visitStaticFieldPostfix(
3563 Send node,
3564 FieldElement field,
3565 IncDecOperator operator,
3566 arg) {
3567 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
3568 element: field, operator: operator));
3569 }
3570
3571 @override
3572 visitStaticGetterSetterPostfix(
3573 Send node,
3574 FunctionElement getter,
3575 FunctionElement setter,
3576 IncDecOperator operator,
3577 arg) {
3578 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
3579 getter: getter, setter: setter, operator: operator));
3580 }
3581
3582 @override
3583 visitStaticMethodSetterPostfix(
3584 Send node,
3585 FunctionElement getter,
3586 FunctionElement setter,
3587 IncDecOperator operator,
3588 arg) {
3589 // TODO: implement visitStaticMethodSetterPostfix
3590 }
3591
3592 @override
3593 visitSuperFieldFieldPostfix(
3594 Send node,
3595 FieldElement readField,
3596 FieldElement writtenField,
3597 IncDecOperator operator,
3598 arg) {
3599 // TODO: implement visitSuperFieldFieldPostfix
3600 }
3601
3602 @override
3603 visitSuperFieldPostfix(
3604 Send node,
3605 FieldElement field,
3606 IncDecOperator operator,
3607 arg) {
3608 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_POSTFIX,
3609 element: field, operator: operator));
3610 }
3611
3612 @override
3613 visitSuperFieldSetterPostfix(
3614 Send node,
3615 FieldElement field,
3616 FunctionElement setter,
3617 IncDecOperator operator,
3618 arg) {
3619 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_POSTFIX,
3620 getter: field, setter: setter, operator: operator));
3621 }
3622
3623 @override
3624 visitSuperGetterFieldPostfix(
3625 Send node,
3626 FunctionElement getter,
3627 FieldElement field,
3628 IncDecOperator operator,
3629 arg) {
3630 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_POSTFIX,
3631 getter: getter, setter: field, operator: operator));
3632 }
3633
3634 @override
3635 visitSuperGetterSetterPostfix(
3636 Send node,
3637 FunctionElement getter,
3638 FunctionElement setter,
3639 IncDecOperator operator,
3640 arg) {
3641 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX,
3642 getter: getter, setter: setter, operator: operator));
3643 }
3644
3645 @override
3646 visitSuperMethodSetterPostfix(
3647 Send node,
3648 FunctionElement method,
3649 FunctionElement setter,
3650 IncDecOperator operator,
3651 arg) {
3652 // TODO: implement visitSuperMethodSetterPostfix
3653 }
3654
3655 @override
3656 visitThisPropertyPostfix(
3657 Send node,
3658 IncDecOperator operator,
3659 Selector getterSelector,
3660 Selector setterSelector,
3661 arg) {
3662 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX,
3663 operator: operator,
3664 getter: getterSelector, setter: setterSelector));
3665 }
3666
3667 @override
3668 visitTopLevelFieldPostfix(
3669 Send node,
3670 FieldElement field,
3671 IncDecOperator operator,
3672 arg) {
3673 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_POSTFIX,
3674 element: field, operator: operator));
3675 }
3676
3677 @override
3678 visitTopLevelGetterSetterPostfix(
3679 Send node,
3680 FunctionElement getter,
3681 FunctionElement setter,
3682 IncDecOperator operator,
3683 arg) {
3684 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX,
3685 getter: getter, setter: setter, operator: operator));
3686 }
3687
3688 @override
3689 visitTopLevelMethodSetterPostfix(
3690 Send node,
3691 FunctionElement method,
3692 FunctionElement setter,
3693 IncDecOperator operator,
3694 arg) {
3695 // TODO: implement visitTopLevelMethodSetterPostfix
3696 }
3697
3698 @override
3699 visitTypeVariableTypeLiteralPostfix(
3700 Send node,
3701 TypeVariableElement element,
3702 IncDecOperator operator,
3703 arg) {
3704 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX,
3705 element: element, operator: operator));
3706 }
3707
3708 @override
3709 visitTypedefTypeLiteralPostfix(
3710 Send node,
3711 TypeConstantExpression constant,
3712 IncDecOperator operator,
3713 arg) {
3714 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_POSTFIX,
3715 constant: constant.getText(), operator: operator));
3716 }
3717
3718 @override
3719 visitConstantGet(
3720 Send node,
3721 ConstantExpression constant,
3722 arg) {
3723 // TODO: implement visitConstantGet
3724 }
3725
3726 @override
3727 visitConstantInvoke(
3728 Send node,
3729 ConstantExpression constant,
3730 NodeList arguments,
3731 Selector selector,
3732 arg) {
3733 // TODO: implement visitConstantInvoke
3734 }
3735
3736 @override
3737 errorUnresolvedCompound(
3738 Send node,
3739 ErroneousElement element,
3740 AssignmentOperator operator,
3741 Node rhs,
3742 arg) {
3743 // TODO: implement errorUnresolvedCompound
3744 }
3745
3746 @override
3747 errorUnresolvedGet(
3748 Send node,
3749 ErroneousElement element,
3750 arg) {
3751 // TODO: implement errorUnresolvedGet
3752 }
3753
3754 @override
3755 errorUnresolvedInvoke(
3756 Send node,
3757 ErroneousElement element,
3758 NodeList arguments,
3759 Selector selector,
3760 arg) {
3761 // TODO: implement errorUnresolvedInvoke
3762 }
3763
3764 @override
3765 errorUnresolvedPostfix(
3766 Send node,
3767 ErroneousElement element,
3768 IncDecOperator operator,
3769 arg) {
3770 // TODO: implement errorUnresolvedPostfix
3771 }
3772
3773 @override
3774 errorUnresolvedPrefix(
3775 Send node,
3776 ErroneousElement element,
3777 IncDecOperator operator,
3778 arg) {
3779 // TODO: implement errorUnresolvedPrefix
3780 }
3781
3782 @override
3783 errorUnresolvedSet(
3784 Send node,
3785 ErroneousElement element,
3786 Node rhs,
3787 arg) {
3788 // TODO: implement errorUnresolvedSet
3789 }
3790
3791 @override
3792 errorUndefinedBinaryExpression(
3793 Send node,
3794 Node left,
3795 Operator operator,
3796 Node right,
3797 arg) {
3798 // TODO: implement errorUndefinedBinaryExpression
3799 }
3800
3801 @override
3802 errorUndefinedUnaryExpression(
3803 Send node,
3804 Operator operator,
3805 Node expression,
3806 arg) {
3807 // TODO: implement errorUndefinedUnaryExpression
3808 }
3809
3810 @override
3811 errorUnresolvedSuperBinary(
3812 Send node,
3813 ErroneousElement element,
3814 BinaryOperator operator,
3815 Node argument,
3816 arg) {
3817 // TODO: implement errorUnresolvedSuperBinary
3818 }
3819
3820 @override
3821 errorUnresolvedSuperCompoundIndexSet(
3822 Send node,
3823 ErroneousElement element,
3824 Node index,
3825 AssignmentOperator operator,
3826 Node rhs,
3827 arg) {
3828 // TODO: implement errorUnresolvedSuperCompoundIndexSet
3829 }
3830
3831 @override
3832 errorUnresolvedSuperIndexSet(
3833 Send node,
3834 ErroneousElement element,
3835 Node index,
3836 Node rhs,
3837 arg) {
3838 // TODO: implement errorUnresolvedSuperIndexSet
3839 }
3840
3841 @override
3842 errorUnresolvedSuperUnary(
3843 Send node,
3844 UnaryOperator operator,
3845 ErroneousElement element,
3846 arg) {
3847 // TODO: implement errorUnresolvedSuperUnary
3848 }
3849 }
3850
3851 enum VisitKind {
3852 VISIT_PARAMETER_GET,
3853 VISIT_PARAMETER_SET,
3854 VISIT_PARAMETER_INVOKE,
3855 VISIT_PARAMETER_COMPOUND,
3856 VISIT_PARAMETER_PREFIX,
3857 VISIT_PARAMETER_POSTFIX,
3858
3859 VISIT_LOCAL_VARIABLE_GET,
3860 VISIT_LOCAL_VARIABLE_SET,
3861 VISIT_LOCAL_VARIABLE_INVOKE,
3862 VISIT_LOCAL_VARIABLE_COMPOUND,
3863 VISIT_LOCAL_VARIABLE_PREFIX,
3864 VISIT_LOCAL_VARIABLE_POSTFIX,
3865
3866 VISIT_LOCAL_FUNCTION_GET,
3867 VISIT_LOCAL_FUNCTION_INVOKE,
3868
3869 VISIT_STATIC_FIELD_GET,
3870 VISIT_STATIC_FIELD_SET,
3871 VISIT_STATIC_FIELD_INVOKE,
3872 VISIT_STATIC_FIELD_COMPOUND,
3873 VISIT_STATIC_FIELD_PREFIX,
3874 VISIT_STATIC_FIELD_POSTFIX,
3875
3876 VISIT_STATIC_GETTER_GET,
3877 VISIT_STATIC_SETTER_SET,
3878 VISIT_STATIC_GETTER_INVOKE,
3879 VISIT_STATIC_GETTER_SETTER_COMPOUND,
3880 VISIT_STATIC_METHOD_SETTER_COMPOUND,
3881 VISIT_STATIC_GETTER_SETTER_PREFIX,
3882 VISIT_STATIC_GETTER_SETTER_POSTFIX,
3883
3884 VISIT_STATIC_FUNCTION_GET,
3885 VISIT_STATIC_FUNCTION_INVOKE,
3886
3887 VISIT_TOP_LEVEL_FIELD_GET,
3888 VISIT_TOP_LEVEL_FIELD_SET,
3889 VISIT_TOP_LEVEL_FIELD_INVOKE,
3890 VISIT_TOP_LEVEL_FIELD_COMPOUND,
3891 VISIT_TOP_LEVEL_FIELD_PREFIX,
3892 VISIT_TOP_LEVEL_FIELD_POSTFIX,
3893
3894 VISIT_TOP_LEVEL_GETTER_GET,
3895 VISIT_TOP_LEVEL_SETTER_SET,
3896 VISIT_TOP_LEVEL_GETTER_INVOKE,
3897 VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND,
3898 VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX,
3899 VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX,
3900
3901 VISIT_TOP_LEVEL_FUNCTION_GET,
3902 VISIT_TOP_LEVEL_FUNCTION_INVOKE,
3903
3904 VISIT_DYNAMIC_PROPERTY_GET,
3905 VISIT_DYNAMIC_PROPERTY_SET,
3906 VISIT_DYNAMIC_PROPERTY_INVOKE,
3907 VISIT_DYNAMIC_PROPERTY_COMPOUND,
3908 VISIT_DYNAMIC_PROPERTY_PREFIX,
3909 VISIT_DYNAMIC_PROPERTY_POSTFIX,
3910
3911 VISIT_THIS_GET,
3912 VISIT_THIS_INVOKE,
3913
3914 VISIT_THIS_PROPERTY_GET,
3915 VISIT_THIS_PROPERTY_SET,
3916 VISIT_THIS_PROPERTY_INVOKE,
3917 VISIT_THIS_PROPERTY_COMPOUND,
3918 VISIT_THIS_PROPERTY_PREFIX,
3919 VISIT_THIS_PROPERTY_POSTFIX,
3920
3921 VISIT_SUPER_FIELD_GET,
3922 VISIT_SUPER_FIELD_SET,
3923 VISIT_SUPER_FIELD_INVOKE,
3924 VISIT_SUPER_FIELD_COMPOUND,
3925 VISIT_SUPER_FIELD_PREFIX,
3926 VISIT_SUPER_FIELD_POSTFIX,
3927
3928 VISIT_SUPER_GETTER_GET,
3929 VISIT_SUPER_SETTER_SET,
3930 VISIT_SUPER_GETTER_INVOKE,
3931 VISIT_SUPER_GETTER_SETTER_COMPOUND,
3932 VISIT_SUPER_GETTER_FIELD_COMPOUND,
3933 VISIT_SUPER_FIELD_SETTER_COMPOUND,
3934 VISIT_SUPER_GETTER_SETTER_PREFIX,
3935 VISIT_SUPER_GETTER_FIELD_PREFIX,
3936 VISIT_SUPER_FIELD_SETTER_PREFIX,
3937 VISIT_SUPER_GETTER_SETTER_POSTFIX,
3938 VISIT_SUPER_GETTER_FIELD_POSTFIX,
3939 VISIT_SUPER_FIELD_SETTER_POSTFIX,
3940
3941 VISIT_SUPER_METHOD_GET,
3942 VISIT_SUPER_METHOD_INVOKE,
3943
3944 VISIT_BINARY,
3945 VISIT_EQUALS,
3946 VISIT_NOT_EQUALS,
3947
3948 VISIT_SUPER_BINARY,
3949 VISIT_SUPER_EQUALS,
3950 VISIT_SUPER_NOT_EQUALS,
3951
3952 VISIT_UNARY,
3953 VISIT_SUPER_UNARY,
3954 VISIT_NOT,
3955
3956 VISIT_EXPRESSION_INVOKE,
3957
3958 VISIT_CLASS_TYPE_LITERAL_GET,
3959 VISIT_CLASS_TYPE_LITERAL_SET,
3960 VISIT_CLASS_TYPE_LITERAL_INVOKE,
3961 VISIT_CLASS_TYPE_LITERAL_BINARY,
3962 VISIT_CLASS_TYPE_LITERAL_COMPOUND,
3963 VISIT_CLASS_TYPE_LITERAL_PREFIX,
3964 VISIT_CLASS_TYPE_LITERAL_POSTFIX,
3965
3966 VISIT_TYPEDEF_TYPE_LITERAL_GET,
3967 VISIT_TYPEDEF_TYPE_LITERAL_SET,
3968 VISIT_TYPEDEF_TYPE_LITERAL_INVOKE,
3969 VISIT_TYPEDEF_TYPE_LITERAL_BINARY,
3970 VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND,
3971 VISIT_TYPEDEF_TYPE_LITERAL_PREFIX,
3972 VISIT_TYPEDEF_TYPE_LITERAL_POSTFIX,
3973
3974 VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET,
3975 VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET,
3976 VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE,
3977 VISIT_TYPE_VARIABLE_TYPE_LITERAL_BINARY,
3978 VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND,
3979 VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX,
3980 VISIT_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX,
3981
3982 VISIT_DYNAMIC_TYPE_LITERAL_GET,
3983 VISIT_DYNAMIC_TYPE_LITERAL_SET,
3984 VISIT_DYNAMIC_TYPE_LITERAL_INVOKE,
3985 VISIT_DYNAMIC_TYPE_LITERAL_BINARY,
3986 VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND,
3987 VISIT_DYNAMIC_TYPE_LITERAL_PREFIX,
3988 VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX,
3989
3990 VISIT_INDEX_SET,
3991 VISIT_COMPOUND_INDEX_SET,
3992 VISIT_SUPER_INDEX_SET,
3993 VISIT_SUPER_COMPOUND_INDEX_SET,
3994
3995 VISIT_ASSERT,
3996 VISIT_LOGICAL_AND,
3997 VISIT_LOGICAL_OR,
3998 VISIT_IS,
3999 VISIT_IS_NOT,
4000 VISIT_AS,
4001
4002 // TODO(johnniwinther): Add tests for error cases.
4003 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/analyze_unused_dart2js_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698