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

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: Rebased on r43912 Created 5 years, 10 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
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/dart_types.dart';
10 import 'package:compiler/src/dart2jslib.dart';
11 import 'package:compiler/src/elements/elements.dart';
12 import 'package:compiler/src/resolution/resolution.dart';
13 import 'package:compiler/src/resolution/semantic_visitor.dart';
14 import 'package:compiler/src/resolution/operators.dart';
15 import 'package:compiler/src/tree/tree.dart';
16 import 'package:compiler/src/util/util.dart';
17 import 'memory_compiler.dart';
18
19 class Visit {
20 final VisitKind method;
21 final element;
22 final rhs;
23 final arguments;
24 final receiver;
25 final name;
26 final expression;
27 final left;
28 final right;
29 final type;
30 final operator;
31 final index;
32 final getter;
33 final setter;
34
35 const Visit(this.method,
36 {this.element,
37 this.rhs,
38 this.arguments,
39 this.receiver,
40 this.name,
41 this.expression,
42 this.left,
43 this.right,
44 this.type,
45 this.operator,
46 this.index,
47 this.getter,
48 this.setter});
49
50 int get hashCode => toString().hashCode;
51
52 bool operator ==(other) => '$this' == '$other';
53
54 String toString() {
55 StringBuffer sb = new StringBuffer();
56 sb.write('method=$method');
57 if (element != null) {
58 sb.write(',element=$element');
59 }
60 if (rhs != null) {
61 sb.write(',rhs=$rhs');
62 }
63 if (arguments != null) {
64 sb.write(',arguments=$arguments');
65 }
66 if (receiver != null) {
67 sb.write(',receiver=$receiver');
68 }
69 if (name != null) {
70 sb.write(',name=$name');
71 }
72 if (expression != null) {
73 sb.write(',expression=$expression');
74 }
75 if (left != null) {
76 sb.write(',left=$left');
77 }
78 if (right != null) {
79 sb.write(',right=$right');
80 }
81 if (type != null) {
82 sb.write(',type=$type');
83 }
84 if (operator != null) {
85 sb.write(',operator=$operator');
86 }
87 if (index != null) {
88 sb.write(',index=$index');
89 }
90 if (getter != null) {
91 sb.write(',getter=$getter');
92 }
93 if (setter != null) {
94 sb.write(',setter=$setter');
95 }
96 return sb.toString();
97 }
98 }
99
100 class Test {
101 final String codeByPrefix;
102 final String code;
103 final /*Visit | List<Visit>*/ expectedVisits;
104 final String cls;
105
106 const Test(this.code, this.expectedVisits)
107 : cls = null, codeByPrefix = null;
108 const Test.clazz(this.code, this.expectedVisits)
109 : cls = 'C', codeByPrefix = null;
110 const Test.prefix(this.codeByPrefix, this.code, this.expectedVisits)
111 : cls = null;
112
113 String get method => 'm';
114
115 String toString() {
116 StringBuffer sb = new StringBuffer();
117 sb.writeln();
118 sb.writeln(code);
119 if (codeByPrefix != null) {
120 sb.writeln('imported by prefix:');
121 sb.writeln(codeByPrefix);
122 }
123 return sb.toString();
124 }
125 }
126
127 const List<Test> TESTS = const [
128 // Parameters
129 const Test('m(o) => o;',
130 const Visit(VisitKind.VISIT_PARAMETER_GET,
131 element: 'parameter(m#o)')),
132 const Test('m(o) { o = 42; }',
133 const Visit(VisitKind.VISIT_PARAMETER_SET,
134 element: 'parameter(m#o)',
135 rhs:'42')),
136 const Test('m(o) { o(null, 42); }',
137 const Visit(VisitKind.VISIT_PARAMETER_INVOKE,
138 element: 'parameter(m#o)',
139 arguments: '(null,42)')),
140
141 // Local variables
142 const Test('m() { var o; return o; }',
143 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_GET,
144 element: 'variable(m#o)')),
145 const Test('m() { var o; o = 42; }',
146 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_SET,
147 element: 'variable(m#o)',
148 rhs:'42')),
149 const Test('m() { var o; o(null, 42); }',
150 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_INVOKE,
151 element: 'variable(m#o)',
152 arguments: '(null,42)')),
153
154 // Local functions
155 const Test('m() { o(a, b) {}; return o; }',
156 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_GET,
157 element: 'function(m#o)')),
158 const Test('m() { o(a, b) {}; o(null, 42); }',
159 const Visit(VisitKind.VISIT_LOCAL_FUNCTION_INVOKE,
160 element: 'function(m#o)',
161 arguments: '(null,42)')),
162
163 // Static fields
164 const Test(
165 '''
166 class C { static var o; }
167 m() => C.o;
168 ''',
169 const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
170 element: 'field(C#o)')),
171 const Test.clazz(
172 '''
173 class C {
174 static var o;
175 m() => o;
176 }
177 ''',
178 const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
179 element: 'field(C#o)')),
180 const Test.clazz(
181 '''
182 class C {
183 static var o;
184 m() => C.o;
185 }
186 ''',
187 const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
188 element: 'field(C#o)')),
189 const Test.prefix(
190 '''
191 class C {
192 static var o;
193 }
194 ''',
195 'm() => p.C.o;',
196 const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
197 element: 'field(C#o)')),
198 const Test(
199 '''
200 class C { static var o; }
201 m() { C.o = 42; }
202 ''',
203 const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
204 element: 'field(C#o)',
205 rhs: '42')),
206 const Test.clazz(
207 '''
208 class C {
209 static var o;
210 m() { o = 42; }
211 }
212 ''',
213 const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
214 element: 'field(C#o)',
215 rhs: '42')),
216 const Test.clazz(
217 '''
218 class C {
219 static var o;
220 m() { C.o = 42; }
221 }
222 ''',
223 const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
224 element: 'field(C#o)',
225 rhs: '42')),
226 const Test.prefix(
227 '''
228 class C {
229 static var o;
230 }
231 ''',
232 'm() { p.C.o = 42; }',
233 const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
234 element: 'field(C#o)',
235 rhs: '42')),
236 const Test(
237 '''
238 class C { static var o; }
239 m() { C.o(null, 42); }
240 ''',
241 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
242 element: 'field(C#o)',
243 arguments: '(null,42)')),
244 const Test.clazz(
245 '''
246 class C {
247 static var o;
248 m() { o(null, 42); }
249 }
250 ''',
251 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
252 element: 'field(C#o)',
253 arguments: '(null,42)')),
254 const Test.clazz(
255 '''
256 class C {
257 static var o;
258 m() { C.o(null, 42); }
259 }
260 ''',
261 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
262 element: 'field(C#o)',
263 arguments: '(null,42)')),
264 const Test.prefix(
265 '''
266 class C {
267 static var o;
268 }
269 ''',
270 'm() { p.C.o(null, 42); }',
271 const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
272 element: 'field(C#o)',
273 arguments: '(null,42)')),
274
275 // Static properties
276 const Test(
277 '''
278 class C {
279 static get o => null;
280 }
281 m() => C.o;
282 ''',
283 const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
284 element: 'getter(C#o)')),
285 const Test.clazz(
286 '''
287 class C {
288 static get o => null;
289 m() => o;
290 }
291 ''',
292 const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
293 element: 'getter(C#o)')),
294 const Test.clazz(
295 '''
296 class C {
297 static get o => null;
298 m() => C.o;
299 }
300 ''',
301 const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
302 element: 'getter(C#o)')),
303 const Test.prefix(
304 '''
305 class C {
306 static get o => null;
307 }
308 ''',
309 'm() => p.C.o;',
310 const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
311 element: 'getter(C#o)')),
312 const Test(
313 '''
314 class C { static set o(_) {} }
315 m() { C.o = 42; }
316 ''',
317 const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
318 element: 'setter(C#o)',
319 rhs: '42')),
320 const Test.clazz(
321 '''
322 class C {
323 static set o(_) {}
324 m() { o = 42; }
325 }
326 ''',
327 const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
328 element: 'setter(C#o)',
329 rhs: '42')),
330 const Test.clazz(
331 '''
332 class C {
333 static set o(_) {}
334 m() { C.o = 42; }
335 }
336 ''',
337 const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
338 element: 'setter(C#o)',
339 rhs: '42')),
340 const Test.prefix(
341 '''
342 class C {
343 static set o(_) {}
344 }
345 ''',
346 'm() { p.C.o = 42; }',
347 const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
348 element: 'setter(C#o)',
349 rhs: '42')),
350 const Test(
351 '''
352 class C { static get o => null; }
353 m() => C.o(null, 42);
354 ''',
355 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
356 element: 'getter(C#o)',
357 arguments: '(null,42)')),
358 const Test.clazz(
359 '''
360 class C {
361 static get o => null;
362 m() { o(null, 42); }
363 }
364 ''',
365 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
366 element: 'getter(C#o)',
367 arguments: '(null,42)')),
368 const Test.clazz(
369 '''
370 class C {
371 static get o => null;
372 m() { C.o(null, 42); }
373 }
374 ''',
375 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
376 element: 'getter(C#o)',
377 arguments: '(null,42)')),
378 const Test.prefix(
379 '''
380 class C {
381 static get o => null;
382 }
383 ''',
384 'm() { p.C.o(null, 42); }',
385 const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
386 element: 'getter(C#o)',
387 arguments: '(null,42)')),
388
389 // Static functions
390 const Test(
391 '''
392 class C { static o(a, b) {} }
393 m() => C.o;
394 ''',
395 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
396 element: 'function(C#o)')),
397 const Test.clazz(
398 '''
399 class C {
400 static o(a, b) {}
401 m() => o;
402 }
403 ''',
404 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
405 element: 'function(C#o)')),
406 const Test.clazz(
407 '''
408 class C {
409 static o(a, b) {}
410 m() => C.o;
411 }
412 ''',
413 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
414 element: 'function(C#o)')),
415 const Test.prefix(
416 '''
417 class C { static o(a, b) {} }
418 ''',
419 '''
420 m() => p.C.o;
421 ''',
422 const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
423 element: 'function(C#o)')),
424 const Test(
425 '''
426 class C { static o(a, b) {} }
427 m() => C.o(null, 42);
428 ''',
429 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
430 element: 'function(C#o)',
431 arguments: '(null,42)')),
432 const Test.clazz(
433 '''
434 class C {
435 static o(a, b) {}
436 m() { o(null, 42); }
437 }
438 ''',
439 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
440 element: 'function(C#o)',
441 arguments: '(null,42)')),
442 const Test.clazz(
443 '''
444 class C {
445 static o(a, b) {}
446 m() { C.o(null, 42); }
447 }
448 ''',
449 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
450 element: 'function(C#o)',
451 arguments: '(null,42)')),
452 const Test.prefix(
453 '''
454 class C {
455 static o(a, b) {}
456 }
457 ''',
458 'm() { p.C.o(null, 42); }',
459 const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
460 element: 'function(C#o)',
461 arguments: '(null,42)')),
462
463 // Top level fields
464 const Test(
465 '''
466 var o;
467 m() => o;
468 ''',
469 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET,
470 element: 'field(o)')),
471 const Test.prefix(
472 '''
473 var o;
474 ''',
475 'm() => p.o;',
476 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET,
477 element: 'field(o)')),
478 const Test(
479 '''
480 var o;
481 m() { o = 42; }
482 ''',
483 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET,
484 element: 'field(o)',
485 rhs: '42')),
486 const Test.prefix(
487 '''
488 var o;
489 ''',
490 'm() { p.o = 42; }',
491 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET,
492 element: 'field(o)',
493 rhs: '42')),
494 const Test(
495 '''
496 var o;
497 m() { o(null, 42); }
498 ''',
499 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE,
500 element: 'field(o)',
501 arguments: '(null,42)')),
502 const Test.prefix(
503 '''
504 var o;
505 ''',
506 'm() { p.o(null, 42); }',
507 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE,
508 element: 'field(o)',
509 arguments: '(null,42)')),
510
511 // Top level properties
512 const Test(
513 '''
514 get o => null;
515 m() => o;
516 ''',
517 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET,
518 element: 'getter(o)')),
519 const Test.prefix(
520 '''
521 get o => null;
522 ''',
523 '''
524 m() => p.o;
525 ''',
526 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET,
527 element: 'getter(o)')),
528 const Test(
529 '''
530 set o(_) {}
531 m() { o = 42; }
532 ''',
533 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET,
534 element: 'setter(o)',
535 rhs: '42')),
536 const Test.prefix(
537 '''
538 set o(_) {}
539 ''',
540 'm() { p.o = 42; }',
541 const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET,
542 element: 'setter(o)',
543 rhs: '42')),
544 const Test(
545 '''
546 get o => null;
547 m() => o(null, 42);
548 ''',
549 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE,
550 element: 'getter(o)',
551 arguments: '(null,42)')),
552 const Test.prefix(
553 '''
554 get o => null;
555 ''',
556 'm() { p.o(null, 42); }',
557 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE,
558 element: 'getter(o)',
559 arguments: '(null,42)')),
560
561 // Top level functions
562 const Test(
563 '''
564 o(a, b) {}
565 m() => o;
566 ''',
567 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_GET,
568 element: 'function(o)')),
569 const Test(
570 '''
571 o(a, b) {}
572 m() => o(null, 42);
573 ''',
574 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE,
575 element: 'function(o)',
576 arguments: '(null,42)')),
577 const Test.prefix(
578 '''
579 o(a, b) {}
580 ''',
581 'm() { p.o(null, 42); }',
582 const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE,
583 element: 'function(o)',
584 arguments: '(null,42)')),
585
586 // Dynamic properties
587 const Test('m(o) => o.foo;',
588 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET,
589 receiver: 'o',
590 name: 'foo')),
591 const Test('m(o) { o.foo = 42; }',
592 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET,
593 receiver: 'o',
594 name: 'foo',
595 rhs: '42')),
596 const Test('m(o) { o.foo(null, 42); }',
597 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE,
598 receiver: 'o',
599 name: 'foo',
600 arguments: '(null,42)')),
601
602 // This access
603 const Test.clazz(
604 '''
605 class C {
606 m() => this;
607 }
608 ''',
609 const Visit(VisitKind.VISIT_THIS_GET)),
610 const Test.clazz(
611 '''
612 class C {
613 call(a, b) {}
614 m() { this(null, 42); }
615 }
616 ''',
617 const Visit(VisitKind.VISIT_THIS_INVOKE,
618 arguments: '(null,42)')),
619
620 // This properties
621 const Test.clazz(
622 '''
623 class C {
624 var foo;
625 m() => this.foo;
626 }
627 ''',
628 const Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
629 name: 'foo')),
630 const Test.clazz(
631 '''
632 class C {
633 var foo;
634 m() { this.foo = 42; }
635 }
636 ''',
637 const Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
638 name: 'foo',
639 rhs: '42')),
640 const Test.clazz(
641 '''
642 class C {
643 var foo;
644 m() { this.foo(null, 42); }
645 }
646 ''',
647 const Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE,
648 name: 'foo',
649 arguments: '(null,42)')),
650
651 // Super fields
652 const Test.clazz(
653 '''
654 class B {
655 var o;
656 }
657 class C extends B {
658 m() => super.o;
659 }
660 ''',
661 const Visit(VisitKind.VISIT_SUPER_FIELD_GET,
662 element: 'field(B#o)')),
663 const Test.clazz(
664 '''
665 class B {
666 var o;
667 }
668 class C extends B {
669 m() { super.o = 42; }
670 }
671 ''',
672 const Visit(VisitKind.VISIT_SUPER_FIELD_SET,
673 element: 'field(B#o)',
674 rhs: '42')),
675 const Test.clazz(
676 '''
677 class B {
678 var o;
679 }
680 class C extends B {
681 m() { super.o(null, 42); }
682 }
683 ''',
684 const Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE,
685 element: 'field(B#o)',
686 arguments: '(null,42)')),
687
688 // Super properties
689 const Test.clazz(
690 '''
691 class B {
692 get o => null;
693 }
694 class C extends B {
695 m() => super.o;
696 }
697 ''',
698 const Visit(VisitKind.VISIT_SUPER_GETTER_GET,
699 element: 'getter(B#o)')),
700 const Test.clazz(
701 '''
702 class B {
703 set o(_) {}
704 }
705 class C extends B {
706 m() { super.o = 42; }
707 }
708 ''',
709 const Visit(VisitKind.VISIT_SUPER_SETTER_SET,
710 element: 'setter(B#o)',
711 rhs: '42')),
712 const Test.clazz(
713 '''
714 class B {
715 get o => null;
716 }
717 class C extends B {
718 m() { super.o(null, 42); }
719 }
720 ''',
721 const Visit(VisitKind.VISIT_SUPER_GETTER_INVOKE,
722 element: 'getter(B#o)',
723 arguments: '(null,42)')),
724
725 // Super methods
726 const Test.clazz(
727 '''
728 class B {
729 o(a, b) {}
730 }
731 class C extends B {
732 m() => super.o;
733 }
734 ''',
735 const Visit(VisitKind.VISIT_SUPER_METHOD_GET,
736 element: 'function(B#o)')),
737 const Test.clazz(
738 '''
739 class B {
740 o(a, b) {}
741 }
742 class C extends B {
743 m() { super.o(null, 42); }
744 }
745 ''',
746 const Visit(VisitKind.VISIT_SUPER_METHOD_INVOKE,
747 element: 'function(B#o)',
748 arguments: '(null,42)')),
749
750 // Expression invoke
751 const Test('m() => (a, b){}(null, 42);',
752 const Visit(VisitKind.VISIT_EXPRESSION_INVOKE,
753 receiver: '(a,b){}',
754 arguments: '(null,42)')),
755
756 // Class type literals
757 const Test(
758 '''
759 class C {}
760 m() => C;
761 ''',
762 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET,
763 element: 'class(C)')),
764 const Test(
765 '''
766 class C {}
767 m() => C(null, 42);
768 ''',
769 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE,
770 element: 'class(C)',
771 arguments: '(null,42)')),
772
773 // Typedef type literals
774 const Test(
775 '''
776 typedef F();
777 m() => F;
778 ''',
779 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET,
780 element: 'typedef(F)')),
781 const Test(
782 '''
783 typedef F();
784 m() => F(null, 42);
785 ''',
786 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE,
787 element: 'typedef(F)',
788 arguments: '(null,42)')),
789
790 // Type variable type literals
791 const Test.clazz(
792 '''
793 class C<T> {
794 m() => T;
795 }
796 ''',
797 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET,
798 element: 'type_variable(C#T)')),
799 const Test.clazz(
800 '''
801 class C<T> {
802 m() => T(null, 42);
803 }
804 ''',
805 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE,
806 element: 'type_variable(C#T)',
807 arguments: '(null,42)')),
808
809 // Dynamic type literals
810 const Test(
811 '''
812 m() => dynamic;
813 ''',
814 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET)),
815 const Test(
816 '''
817 m() { dynamic(null, 42); }
818 ''',
819 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE,
820 arguments: '(null,42)')),
821
822 // Assert
823 const Test(
824 '''
825 m() { assert(false); }
826 ''',
827 const Visit(VisitKind.VISIT_ASSERT, expression: 'false')),
828
829 // Lazy and
830 const Test(
831 '''
832 m() => true && false;
833 ''',
834 const Visit(VisitKind.VISIT_LAZY_AND, left: 'true', right: 'false')),
835
836 // Lazy or
837 const Test(
838 '''
839 m() => true || false;
840 ''',
841 const Visit(VisitKind.VISIT_LAZY_OR, left: 'true', right: 'false')),
842
843 // Is test
844 const Test(
845 '''
846 class C {}
847 m() => 0 is C;
848 ''',
849 const Visit(VisitKind.VISIT_IS, expression: '0', type: 'C')),
850
851 // Is not test
852 const Test(
853 '''
854 class C {}
855 m() => 0 is! C;
856 ''',
857 const Visit(VisitKind.VISIT_IS_NOT, expression: '0', type: 'C')),
858
859 // Is test
860 const Test(
861 '''
862 class C {}
863 m() => 0 as C;
864 ''',
865 const Visit(VisitKind.VISIT_AS, expression: '0', type: 'C')),
866
867 // Binary operators
868 const Test(
869 '''
870 m() => 2 + 3;
871 ''',
872 const Visit(VisitKind.VISIT_BINARY,
873 left: '2', operator: '+', right: '3')),
874 const Test(
875 '''
876 m() => 2 - 3;
877 ''',
878 const Visit(VisitKind.VISIT_BINARY,
879 left: '2', operator: '-', right: '3')),
880 const Test(
881 '''
882 m() => 2 * 3;
883 ''',
884 const Visit(VisitKind.VISIT_BINARY,
885 left: '2', operator: '*', right: '3')),
886 const Test(
887 '''
888 m() => 2 / 3;
889 ''',
890 const Visit(VisitKind.VISIT_BINARY,
891 left: '2', operator: '/', right: '3')),
892 const Test(
893 '''
894 m() => 2 ~/ 3;
895 ''',
896 const Visit(VisitKind.VISIT_BINARY,
897 left: '2', operator: '~/', right: '3')),
898 const Test(
899 '''
900 m() => 2 % 3;
901 ''',
902 const Visit(VisitKind.VISIT_BINARY,
903 left: '2', operator: '%', right: '3')),
904 const Test(
905 '''
906 m() => 2 << 3;
907 ''',
908 const Visit(VisitKind.VISIT_BINARY,
909 left: '2', operator: '<<', right: '3')),
910 const Test(
911 '''
912 m() => 2 >> 3;
913 ''',
914 const Visit(VisitKind.VISIT_BINARY,
915 left: '2', operator: '>>', right: '3')),
916 const Test(
917 '''
918 m() => 2 <= 3;
919 ''',
920 const Visit(VisitKind.VISIT_BINARY,
921 left: '2', operator: '<=', right: '3')),
922 const Test(
923 '''
924 m() => 2 < 3;
925 ''',
926 const Visit(VisitKind.VISIT_BINARY,
927 left: '2', operator: '<', right: '3')),
928 const Test(
929 '''
930 m() => 2 >= 3;
931 ''',
932 const Visit(VisitKind.VISIT_BINARY,
933 left: '2', operator: '>=', right: '3')),
934 const Test(
935 '''
936 m() => 2 > 3;
937 ''',
938 const Visit(VisitKind.VISIT_BINARY,
939 left: '2', operator: '>', right: '3')),
940 const Test(
941 '''
942 m() => 2 & 3;
943 ''',
944 const Visit(VisitKind.VISIT_BINARY,
945 left: '2', operator: '&', right: '3')),
946 const Test(
947 '''
948 m() => 2 | 3;
949 ''',
950 const Visit(VisitKind.VISIT_BINARY,
951 left: '2', operator: '|', right: '3')),
952 const Test(
953 '''
954 m() => 2 ^ 3;
955 ''',
956 const Visit(VisitKind.VISIT_BINARY,
957 left: '2', operator: '^', right: '3')),
958 const Test(
959 '''
960 m() => 2[3];
961 ''',
962 const Visit(VisitKind.VISIT_BINARY,
963 left: '2', operator: '[]', right: '3')),
964 const Test.clazz(
965 '''
966 class B {
967 operator +(_) => null;
968 }
969 class C extends B {
970 m() => super + 42;
971 }
972 ''',
973 const Visit(VisitKind.VISIT_SUPER_BINARY,
974 element: 'function(B#+)',
975 operator: '+',
976 right: '42')),
977
978 // Equals
979 const Test(
980 '''
981 m() => 2 == 3;
982 ''',
983 const Visit(VisitKind.VISIT_EQUALS,
984 left: '2', right: '3')),
985 const Test.clazz(
986 '''
987 class B {
988 operator ==(_) => null;
989 }
990 class C extends B {
991 m() => super == 42;
992 }
993 ''',
994 const Visit(VisitKind.VISIT_SUPER_EQUALS,
995 element: 'function(B#==)',
996 right: '42')),
997
998 // Not equals
999 const Test(
1000 '''
1001 m() => 2 != 3;
1002 ''',
1003 const Visit(VisitKind.VISIT_NOT_EQUALS,
1004 left: '2', right: '3')),
1005 // TODO(johnniwinther): Enable this. Resolution does not store the element.
1006 /*const Test.clazz(
1007 '''
1008 class B {
1009 operator ==(_) => null;
1010 }
1011 class C extends B {
1012 m() => super != 42;
1013 }
1014 ''',
1015 const Visit(VisitKind.VISIT_SUPER_NOT_EQUALS,
1016 element: 'function(B#==)',
1017 right: '42')),*/
1018
1019 // Unary expression
1020 const Test(
1021 '''
1022 m() => -false;
1023 ''',
1024 const Visit(VisitKind.VISIT_UNARY,
1025 expression: 'false', operator: '-')),
1026 const Test(
1027 '''
1028 m() => ~false;
1029 ''',
1030 const Visit(VisitKind.VISIT_UNARY,
1031 expression: 'false', operator: '~')),
1032 const Test.clazz(
1033 '''
1034 class B {
1035 operator -() => null;
1036 }
1037 class C extends B {
1038 m() => -super;
1039 }
1040 ''',
1041 const Visit(VisitKind.VISIT_SUPER_UNARY,
1042 element: 'function(B#unary-)', operator: '-')),
1043 const Test.clazz(
1044 '''
1045 class B {
1046 operator ~() => null;
1047 }
1048 class C extends B {
1049 m() => ~super;
1050 }
1051 ''',
1052 const Visit(VisitKind.VISIT_SUPER_UNARY,
1053 element: 'function(B#~)', operator: '~')),
1054 const Test(
1055 '''
1056 m() => !0;
1057 ''',
1058 const Visit(VisitKind.VISIT_NOT, expression: '0')),
1059
1060 // Index set
1061 const Test(
1062 '''
1063 m() => 0[1] = 2;
1064 ''',
1065 const Visit(VisitKind.VISIT_INDEX_SET,
1066 receiver: '0', index: '1', rhs: '2')),
1067 const Test.clazz(
1068 '''
1069 class B {
1070 operator []=(a, b) {}
1071 }
1072 class C extends B {
1073 m() => super[1] = 2;
1074 }
1075 ''',
1076 const Visit(VisitKind.VISIT_SUPER_INDEX_SET,
1077 element: 'function(B#[]=)', index: '1', rhs: '2')),
1078
1079 // Compound assignment
1080 const Test(
1081 '''
1082 m(a) => a.b += 42;
1083 ''',
1084 const [
1085 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND,
1086 receiver: 'a', operator: '+=', rhs: '42',
1087 getter: 'Selector(getter, b, arity=0)',
1088 setter: 'Selector(setter, b, arity=1)'),
1089 const Visit(VisitKind.VISIT_PARAMETER_GET,
1090 element: 'parameter(m#a)')
1091 ]),
1092 // TODO(johnniwinther): Enable this when type literals are recognized in
1093 // SendSet.
1094 /*const Test(
1095 '''
1096 class C {}
1097 m(a) => C += 42;
1098 ''',
1099 const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND,
1100 element: 'class(C)', operator: '+=', rhs: '42')),
1101 const Test(
1102 '''
1103 typedef F();
1104 m(a) => F += 42;
1105 ''',
1106 const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND,
1107 element: 'typedef(F)', operator: '+=', rhs: '42')),
1108 const Test.clazz(
1109 '''
1110 class C<T> {
1111 m(a) => T += 42;
1112 }
1113 ''',
1114 const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND,
1115 element: 'type_variable(C#T)', operator: '+=', rhs: '42')),
1116 const Test(
1117 '''
1118 m(a) => dynamic += 42;
1119 ''',
1120 const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND,
1121 operator: '+=', rhs: '42')),*/
1122 const Test(
1123 '''
1124 m(a) => a += 42;
1125 ''',
1126 const Visit(VisitKind.VISIT_PARAMETER_COMPOUND,
1127 element: 'parameter(m#a)', operator: '+=', rhs: '42')),
1128 const Test(
1129 '''
1130 m() {
1131 var a;
1132 a += 42;
1133 }
1134 ''',
1135 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_COMPOUND,
1136 element: 'variable(m#a)', operator: '+=', rhs: '42')),
1137 const Test(
1138 '''
1139 var a;
1140 m() => a += 42;
1141 ''',
1142 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_COMPOUND,
1143 element: 'field(a)', operator: '+=', rhs: '42')),
1144 const Test(
1145 '''
1146 get a => 0;
1147 set a(_) {}
1148 m() => a += 42;
1149 ''',
1150 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND,
1151 getter: 'getter(a)', setter: 'setter(a)',
1152 operator: '+=', rhs: '42')),
1153 const Test(
1154 '''
1155 class C {
1156 static var a;
1157 }
1158 m() => C.a += 42;
1159 ''',
1160 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
1161 element: 'field(C#a)', operator: '+=', rhs: '42')),
1162 const Test.clazz(
1163 '''
1164 class C {
1165 static var a;
1166 m() => C.a += 42;
1167 }
1168 ''',
1169 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
1170 element: 'field(C#a)', operator: '+=', rhs: '42')),
1171 const Test.clazz(
1172 '''
1173 class C {
1174 static var a;
1175 m() => a += 42;
1176 }
1177 ''',
1178 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
1179 element: 'field(C#a)', operator: '+=', rhs: '42')),
1180 const Test.prefix(
1181 '''
1182 class C {
1183 static var a;
1184 }
1185 ''',
1186 '''
1187 m() => p.C.a += 42;
1188 ''',
1189 const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
1190 element: 'field(C#a)', operator: '+=', rhs: '42')),
1191 const Test(
1192 '''
1193 class C {
1194 static get a => 0;
1195 static set a(_) {}
1196 }
1197 m() => C.a += 42;
1198 ''',
1199 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
1200 getter: 'getter(C#a)', setter: 'setter(C#a)',
1201 operator: '+=', rhs: '42')),
1202 const Test.clazz(
1203 '''
1204 class C {
1205 static get a => 0;
1206 static set a(_) {}
1207 m() => C.a += 42;
1208 }
1209 ''',
1210 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
1211 getter: 'getter(C#a)', setter: 'setter(C#a)',
1212 operator: '+=', rhs: '42')),
1213 const Test.clazz(
1214 '''
1215 class C {
1216 static get a => 0;
1217 static set a(_) {}
1218 m() => a += 42;
1219 }
1220 ''',
1221 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
1222 getter: 'getter(C#a)', setter: 'setter(C#a)',
1223 operator: '+=', rhs: '42')),
1224 const Test.prefix(
1225 '''
1226 class C {
1227 static get a => 0;
1228 static set a(_) {}
1229 }
1230 ''',
1231 '''
1232 m() => p.C.a += 42;
1233 ''',
1234 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
1235 getter: 'getter(C#a)', setter: 'setter(C#a)',
1236 operator: '+=', rhs: '42')),
1237 // TODO(johnniwinther): Enable these when dart2js supports method and setter
1238 // with the same name.
1239 /*const Test(
1240 '''
1241 class C {
1242 static a() {}
1243 static set a(_) {}
1244 }
1245 m() => C.a += 42;
1246 ''',
1247 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
1248 getter: 'function(C#a)', setter: 'setter(C#a)',
1249 operator: '+=', rhs: '42')),
1250 const Test.clazz(
1251 '''
1252 class C {
1253 static a() {}
1254 static set a(_) {}
1255 m() => C.a += 42;
1256 }
1257 ''',
1258 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
1259 getter: 'function(C#a)', setter: 'setter(C#a)',
1260 operator: '+=', rhs: '42')),
1261 const Test.clazz(
1262 '''
1263 class C {
1264 static a() {}
1265 static set a(_) {}
1266 m() => a += 42;
1267 }
1268 ''',
1269 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
1270 getter: 'function(C#a)', setter: 'setter(C#a)',
1271 operator: '+=', rhs: '42')),
1272 const Test.prefix(
1273 '''
1274 class C {
1275 static a() {}
1276 static set a(_) {}
1277 }
1278 ''',
1279 '''
1280 m() => p.C.a += 42;
1281 ''',
1282 const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
1283 getter: 'function(C#a)', setter: 'setter(C#a)',
1284 operator: '+=', rhs: '42')),*/
1285 const Test.clazz(
1286 '''
1287 class C {
1288 var a;
1289 m() => a += 42;
1290 }
1291 ''',
1292 const Visit(VisitKind.VISIT_THIS_PROPERTY_COMPOUND,
1293 operator: '+=', rhs: '42',
1294 getter: 'Selector(getter, a, arity=0)',
1295 setter: 'Selector(setter, a, arity=1)')),
1296 const Test.clazz(
1297 '''
1298 class C {
1299 var a = 0;
1300 m() => this.a += 42;
1301 }
1302 ''',
1303 const Visit(VisitKind.VISIT_THIS_PROPERTY_COMPOUND,
1304 operator: '+=', rhs: '42',
1305 getter: 'Selector(getter, a, arity=0)',
1306 setter: 'Selector(setter, a, arity=1)')),
1307 const Test.clazz(
1308 '''
1309 class B {
1310 var a = 0;
1311 }
1312 class C extends B {
1313 m() => super.a += 42;
1314 }
1315 ''',
1316 const Visit(VisitKind.VISIT_SUPER_FIELD_COMPOUND,
1317 element: 'field(B#a)', operator: '+=', rhs: '42')),
1318 const Test.clazz(
1319 '''
1320 class B {
1321 get a => 0;
1322 set a (_) {}
1323 }
1324 class C extends B {
1325 m() => super.a += 42;
1326 }
1327 ''',
1328 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND,
1329 getter: 'getter(B#a)', setter: 'setter(B#a)',
1330 operator: '+=', rhs: '42')),
1331 const Test.clazz(
1332 '''
1333 class A {
1334 get a => 0;
1335 }
1336 class B extends A {
1337 set a (_) {}
1338 }
1339 class C extends B {
1340 m() => super.a += 42;
1341 }
1342 ''',
1343 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND,
1344 getter: 'getter(A#a)', setter: 'setter(B#a)',
1345 operator: '+=', rhs: '42')),
1346 const Test.clazz(
1347 '''
1348 class A {
1349 var a;
1350 }
1351 class B extends A {
1352 get a => 0;
1353 }
1354
1355 class C extends B {
1356 m() => super.a += 42;
1357 }
1358 ''',
1359 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_COMPOUND,
1360 getter: 'getter(B#a)', setter: 'field(A#a)',
1361 operator: '+=', rhs: '42')),
1362 const Test.clazz(
1363 '''
1364 class A {
1365 var a;
1366 }
1367 class B extends A {
1368 set a(_) {}
1369 }
1370
1371 class C extends B {
1372 m() => super.a += 42;
1373 }
1374 ''',
1375 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_COMPOUND,
1376 getter: 'field(A#a)', setter: 'setter(B#a)',
1377 operator: '+=', rhs: '42')),
1378 // TODO(johnniwinther): Enable this when dart2js supports shadow setters.
1379 /*const Test.clazz(
1380 '''
1381 class A {
1382 var a;
1383 }
1384 class B extends A {
1385 final a;
1386 }
1387
1388 class C extends B {
1389 m() => super.a += 42;
1390 }
1391 ''',
1392 const Visit(VisitKind.VISIT_SUPER_FIELD_FIELD_COMPOUND,
1393 getter: 'field(B#a)', setter: 'field(A#a)',
1394 operator: '+=', rhs: '42')),*/
1395
1396 // Compound index assignment
1397 const Test(
1398 '''
1399 m() => 0[1] += 42;
1400 ''',
1401 const Visit(VisitKind.VISIT_COMPOUND_INDEX_SET,
1402 receiver: '0', index: '1', operator: '+=', rhs: '42')),
1403 // TODO(johnniwinther): Enable this when the getter element is stored.
1404 /*const Test.clazz(
1405 '''
1406 class B {
1407 operator [](_) {}
1408 operator []=(a, b) {}
1409 }
1410 class C extends B {
1411 m() => super[1] += 42;
1412 }
1413 ''',
1414 const Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET,
1415 getter: 'function(B#[])', setter: 'function(B#[]=)',
1416 index: '1', operator: '+=', rhs: '42')),*/
1417
1418 // Prefix expression
1419 const Test(
1420 '''
1421 m(a) => --a.b;
1422 ''',
1423 const [
1424 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX,
1425 receiver: 'a', operator: '--',
1426 getter: 'Selector(getter, b, arity=0)',
1427 setter: 'Selector(setter, b, arity=1)'),
1428 const Visit(VisitKind.VISIT_PARAMETER_GET,
1429 element: 'parameter(m#a)')
1430 ]),
1431 const Test(
1432 '''
1433 m(a) => ++a;
1434 ''',
1435 const Visit(VisitKind.VISIT_PARAMETER_PREFIX,
1436 element: 'parameter(m#a)', operator: '++')),
1437 const Test(
1438 '''
1439 m() {
1440 var a;
1441 --a;
1442 }
1443 ''',
1444 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_PREFIX,
1445 element: 'variable(m#a)', operator: '--')),
1446 const Test(
1447 '''
1448 var a;
1449 m() => ++a;
1450 ''',
1451 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_PREFIX,
1452 element: 'field(a)', operator: '++')),
1453 const Test(
1454 '''
1455 get a => 0;
1456 set a(_) {}
1457 m() => --a;
1458 ''',
1459 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX,
1460 getter: 'getter(a)', setter: 'setter(a)',
1461 operator: '--')),
1462 const Test(
1463 '''
1464 class C {
1465 static var a;
1466 }
1467 m() => ++C.a;
1468 ''',
1469 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
1470 element: 'field(C#a)', operator: '++')),
1471 const Test.clazz(
1472 '''
1473 class C {
1474 static var a;
1475 m() => ++C.a;
1476 }
1477 ''',
1478 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
1479 element: 'field(C#a)', operator: '++')),
1480 const Test.clazz(
1481 '''
1482 class C {
1483 static var a;
1484 m() => --a;
1485 }
1486 ''',
1487 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
1488 element: 'field(C#a)', operator: '--')),
1489 const Test.prefix(
1490 '''
1491 class C {
1492 static var a;
1493 }
1494 ''',
1495 '''
1496 m() => --p.C.a;
1497 ''',
1498 const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
1499 element: 'field(C#a)', operator: '--')),
1500 const Test(
1501 '''
1502 class C {
1503 static get a => 0;
1504 static set a(_) {}
1505 }
1506 m() => ++C.a;
1507 ''',
1508 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
1509 getter: 'getter(C#a)', setter: 'setter(C#a)',
1510 operator: '++')),
1511 const Test.clazz(
1512 '''
1513 class C {
1514 static get a => 0;
1515 static set a(_) {}
1516 m() => --C.a;
1517 }
1518 ''',
1519 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
1520 getter: 'getter(C#a)', setter: 'setter(C#a)',
1521 operator: '--')),
1522 const Test.clazz(
1523 '''
1524 class C {
1525 static get a => 0;
1526 static set a(_) {}
1527 m() => --a;
1528 }
1529 ''',
1530 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
1531 getter: 'getter(C#a)', setter: 'setter(C#a)',
1532 operator: '--')),
1533 const Test.prefix(
1534 '''
1535 class C {
1536 static get a => 0;
1537 static set a(_) {}
1538 }
1539 ''',
1540 '''
1541 m() => ++p.C.a;
1542 ''',
1543 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
1544 getter: 'getter(C#a)', setter: 'setter(C#a)',
1545 operator: '++')),
1546 const Test.clazz(
1547 '''
1548 class C {
1549 var a;
1550 m() => --a;
1551 }
1552 ''',
1553 const Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX,
1554 operator: '--',
1555 getter: 'Selector(getter, a, arity=0)',
1556 setter: 'Selector(setter, a, arity=1)')),
1557 const Test.clazz(
1558 '''
1559 class C {
1560 var a = 0;
1561 m() => ++this.a;
1562 }
1563 ''',
1564 const Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX,
1565 operator: '++',
1566 getter: 'Selector(getter, a, arity=0)',
1567 setter: 'Selector(setter, a, arity=1)')),
1568 const Test.clazz(
1569 '''
1570 class B {
1571 var a = 0;
1572 }
1573 class C extends B {
1574 m() => --super.a;
1575 }
1576 ''',
1577 const Visit(VisitKind.VISIT_SUPER_FIELD_PREFIX,
1578 element: 'field(B#a)', operator: '--')),
1579 const Test.clazz(
1580 '''
1581 class B {
1582 get a => 0;
1583 set a (_) {}
1584 }
1585 class C extends B {
1586 m() => --super.a;
1587 }
1588 ''',
1589 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX,
1590 getter: 'getter(B#a)', setter: 'setter(B#a)',
1591 operator: '--')),
1592 const Test.clazz(
1593 '''
1594 class A {
1595 get a => 0;
1596 }
1597 class B extends A {
1598 set a (_) {}
1599 }
1600 class C extends B {
1601 m() => ++super.a;
1602 }
1603 ''',
1604 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX,
1605 getter: 'getter(A#a)', setter: 'setter(B#a)',
1606 operator: '++')),
1607 const Test.clazz(
1608 '''
1609 class A {
1610 var a;
1611 }
1612 class B extends A {
1613 get a => 0;
1614 }
1615
1616 class C extends B {
1617 m() => --super.a;
1618 }
1619 ''',
1620 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_PREFIX,
1621 getter: 'getter(B#a)', setter: 'field(A#a)',
1622 operator: '--')),
1623 const Test.clazz(
1624 '''
1625 class A {
1626 var a;
1627 }
1628 class B extends A {
1629 set a(_) {}
1630 }
1631
1632 class C extends B {
1633 m() => ++super.a;
1634 }
1635 ''',
1636 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_PREFIX,
1637 getter: 'field(A#a)', setter: 'setter(B#a)',
1638 operator: '++')),
1639
1640 // Prefix expression
1641 const Test(
1642 '''
1643 m(a) => a.b--;
1644 ''',
1645 const [
1646 const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX,
1647 receiver: 'a', operator: '--',
1648 getter: 'Selector(getter, b, arity=0)',
1649 setter: 'Selector(setter, b, arity=1)'),
1650 const Visit(VisitKind.VISIT_PARAMETER_GET,
1651 element: 'parameter(m#a)')
1652 ]),
1653 const Test(
1654 '''
1655 m(a) => a++;
1656 ''',
1657 const Visit(VisitKind.VISIT_PARAMETER_POSTFIX,
1658 element: 'parameter(m#a)', operator: '++')),
1659 const Test(
1660 '''
1661 m() {
1662 var a;
1663 a--;
1664 }
1665 ''',
1666 const Visit(VisitKind.VISIT_LOCAL_VARIABLE_POSTFIX,
1667 element: 'variable(m#a)', operator: '--')),
1668 const Test(
1669 '''
1670 var a;
1671 m() => a++;
1672 ''',
1673 const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_POSTFIX,
1674 element: 'field(a)', operator: '++')),
1675 const Test(
1676 '''
1677 get a => 0;
1678 set a(_) {}
1679 m() => a--;
1680 ''',
1681 const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX,
1682 getter: 'getter(a)', setter: 'setter(a)',
1683 operator: '--')),
1684 const Test(
1685 '''
1686 class C {
1687 static var a;
1688 }
1689 m() => C.a++;
1690 ''',
1691 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
1692 element: 'field(C#a)', operator: '++')),
1693 const Test.clazz(
1694 '''
1695 class C {
1696 static var a;
1697 m() => C.a++;
1698 }
1699 ''',
1700 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
1701 element: 'field(C#a)', operator: '++')),
1702 const Test.clazz(
1703 '''
1704 class C {
1705 static var a;
1706 m() => a--;
1707 }
1708 ''',
1709 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
1710 element: 'field(C#a)', operator: '--')),
1711 const Test.prefix(
1712 '''
1713 class C {
1714 static var a;
1715 }
1716 ''',
1717 '''
1718 m() => p.C.a--;
1719 ''',
1720 const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
1721 element: 'field(C#a)', operator: '--')),
1722 const Test(
1723 '''
1724 class C {
1725 static get a => 0;
1726 static set a(_) {}
1727 }
1728 m() => C.a++;
1729 ''',
1730 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
1731 getter: 'getter(C#a)', setter: 'setter(C#a)',
1732 operator: '++')),
1733 const Test.clazz(
1734 '''
1735 class C {
1736 static get a => 0;
1737 static set a(_) {}
1738 m() => C.a--;
1739 }
1740 ''',
1741 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
1742 getter: 'getter(C#a)', setter: 'setter(C#a)',
1743 operator: '--')),
1744 const Test.clazz(
1745 '''
1746 class C {
1747 static get a => 0;
1748 static set a(_) {}
1749 m() => a--;
1750 }
1751 ''',
1752 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
1753 getter: 'getter(C#a)', setter: 'setter(C#a)',
1754 operator: '--')),
1755 const Test.prefix(
1756 '''
1757 class C {
1758 static get a => 0;
1759 static set a(_) {}
1760 }
1761 ''',
1762 '''
1763 m() => p.C.a++;
1764 ''',
1765 const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
1766 getter: 'getter(C#a)', setter: 'setter(C#a)',
1767 operator: '++')),
1768 const Test.clazz(
1769 '''
1770 class C {
1771 var a;
1772 m() => a--;
1773 }
1774 ''',
1775 const Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX,
1776 operator: '--',
1777 getter: 'Selector(getter, a, arity=0)',
1778 setter: 'Selector(setter, a, arity=1)')),
1779 const Test.clazz(
1780 '''
1781 class C {
1782 var a = 0;
1783 m() => this.a++;
1784 }
1785 ''',
1786 const Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX,
1787 operator: '++',
1788 getter: 'Selector(getter, a, arity=0)',
1789 setter: 'Selector(setter, a, arity=1)')),
1790 const Test.clazz(
1791 '''
1792 class B {
1793 var a = 0;
1794 }
1795 class C extends B {
1796 m() => super.a--;
1797 }
1798 ''',
1799 const Visit(VisitKind.VISIT_SUPER_FIELD_POSTFIX,
1800 element: 'field(B#a)', operator: '--')),
1801 const Test.clazz(
1802 '''
1803 class B {
1804 get a => 0;
1805 set a (_) {}
1806 }
1807 class C extends B {
1808 m() => super.a--;
1809 }
1810 ''',
1811 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX,
1812 getter: 'getter(B#a)', setter: 'setter(B#a)',
1813 operator: '--')),
1814 const Test.clazz(
1815 '''
1816 class A {
1817 get a => 0;
1818 }
1819 class B extends A {
1820 set a (_) {}
1821 }
1822 class C extends B {
1823 m() => super.a++;
1824 }
1825 ''',
1826 const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX,
1827 getter: 'getter(A#a)', setter: 'setter(B#a)',
1828 operator: '++')),
1829 const Test.clazz(
1830 '''
1831 class A {
1832 var a;
1833 }
1834 class B extends A {
1835 get a => 0;
1836 }
1837
1838 class C extends B {
1839 m() => super.a--;
1840 }
1841 ''',
1842 const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_POSTFIX,
1843 getter: 'getter(B#a)', setter: 'field(A#a)',
1844 operator: '--')),
1845 const Test.clazz(
1846 '''
1847 class A {
1848 var a;
1849 }
1850 class B extends A {
1851 set a(_) {}
1852 }
1853
1854 class C extends B {
1855 m() => super.a++;
1856 }
1857 ''',
1858 const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_POSTFIX,
1859 getter: 'field(A#a)', setter: 'setter(B#a)',
1860 operator: '++')),
1861
1862 ];
1863
1864 main() {
1865 Map<String, String> sourceFiles = {};
1866 Map<String, Test> testMap = {};
1867 StringBuffer mainSource = new StringBuffer();
1868 int index = 0;
1869 TESTS.forEach((Test test) {
1870 StringBuffer testSource = new StringBuffer();
1871 if (test.codeByPrefix != null) {
1872 String prefixFilename = 'pre$index.dart';
1873 sourceFiles[prefixFilename] = test.codeByPrefix;
1874 testSource.writeln("import '$prefixFilename' as p;");
1875 }
1876
1877 String filename = 'lib$index.dart';
1878 testSource.writeln(test.code);
1879 sourceFiles[filename] = testSource.toString();
1880 mainSource.writeln("import '$filename';");
1881 testMap[filename] = test;
1882 index++;
1883 });
1884 mainSource.writeln("main() {}");
1885 sourceFiles['main.dart'] = mainSource.toString();
1886
1887 asyncTest(() {
1888 Compiler compiler = compilerFor(sourceFiles,
1889 options: ['--analyze-all', '--analyze-only']);
1890 return compiler.run(Uri.parse('memory:main.dart')).then((_) {
1891 testMap.forEach((String filename, Test test) {
1892 LibraryElement library = compiler.libraryLoader.lookupLibrary(
1893 Uri.parse('memory:$filename'));
1894 var expectedVisits = test.expectedVisits;
1895 if (expectedVisits is! List) {
1896 expectedVisits = [expectedVisits];
1897 }
1898 AstElement element;
1899 String cls = test.cls;
1900 String method = test.method;
1901 if (cls == null) {
1902 element = library.find(method);
1903 } else {
1904 ClassElement classElement = library.find(cls);
1905 Expect.isNotNull(classElement,
1906 "Class '$cls' not found in:\n"
1907 "${library.compilationUnit.script.text}");
1908 element = classElement.localLookup(method);
1909 }
1910 Expect.isNotNull(element, "Element '$method' not found in:\n"
1911 "${library.compilationUnit.script.text}");
1912 ResolvedAst resolvedAst = element.resolvedAst;
1913 SemanticTestVisitor visitor =
1914 new SemanticTestVisitor(resolvedAst.elements);
1915 try {
1916 compiler.withCurrentElement(resolvedAst.element, () {
1917 //print(resolvedAst.node.toDebugString());
1918 resolvedAst.node.accept(visitor);
1919 });
1920 } catch (e, s) {
1921 Expect.fail("$e:\n$s\nIn test:\n"
1922 "${library.compilationUnit.script.text}");
1923 }
1924 Expect.listEquals(expectedVisits, visitor.visits,
1925 "In test:\n"
1926 "${library.compilationUnit.script.text}");
1927 });
1928 });
1929 });
1930 }
1931
1932
1933 class SemanticTestVisitor extends SemanticVisitor with SemanticSendVisitor {
1934 List<Visit> visits = <Visit>[];
1935
1936 SemanticTestVisitor(TreeElements elements) : super(elements);
1937
1938 apply(Node node, arg) => node.accept(this);
1939
1940 internalError(Spannable spannable, String message) {
1941 throw new SpannableAssertionFailure(spannable, message);
1942 }
1943
1944 SemanticSendVisitor get sendVisitor => this;
1945
1946 @override
1947 visitNode(Node node) {
1948 node.visitChildren(this);
1949 }
1950
1951 @override
1952 visitAs(Send node, Node expression, DartType type, arg) {
1953 visits.add(new Visit(VisitKind.VISIT_AS,
1954 expression: expression, type: type));
1955 apply(expression, arg);
1956 }
1957
1958 @override
1959 visitAssert(Send node, Node expression, arg) {
1960 visits.add(new Visit(VisitKind.VISIT_ASSERT, expression: expression));
1961 apply(expression, arg);
1962 }
1963
1964 @override
1965 visitBinary(Send node, Node left, BinaryOperator operator, Node right, arg) {
1966 visits.add(new Visit(VisitKind.VISIT_BINARY,
1967 left: left, operator: operator, right: right));
1968 apply(left, arg);
1969 apply(right, arg);
1970 }
1971
1972 @override
1973 visitClassTypeLiteralGet(Send node, ClassElement element, arg) {
1974 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET,
1975 element: element));
1976 }
1977
1978 @override
1979 visitClassTypeLiteralInvoke(Send node, ClassElement element, NodeList argument s, Selector selector, arg) {
Johnni Winther 2015/02/20 14:41:15 Generated long lines. Will Fix.
Johnni Winther 2015/03/11 09:14:47 Done.
1980 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE,
1981 element: element, arguments: arguments));
1982 apply(arguments, arg);
1983 }
1984
1985 @override
1986 errorClassTypeLiteralSet(SendSet node, ClassElement element, Node rhs, arg) {
1987 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE,
1988 element: element, rhs: rhs));
1989 apply(rhs, arg);
1990 }
1991
1992 @override
1993 visitNotEquals(Send node, Node left, Node right, arg) {
1994 visits.add(new Visit(VisitKind.VISIT_NOT_EQUALS,
1995 left: left, right: right));
1996 apply(left, arg);
1997 apply(right, arg);
1998 }
1999
2000 @override
2001 visitDynamicPropertyPrefix(Send node, Node receiver, IncDecOperator operator, Selector getterSelector, Selector setterSelector, arg) {
2002 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX,
2003 receiver: receiver, operator: operator,
2004 getter: getterSelector, setter: setterSelector));
2005 apply(receiver, arg);
2006 }
2007
2008 @override
2009 visitDynamicPropertyPostfix(Send node, Node receiver, IncDecOperator operator, Selector getterSelector, Selector setterSelector, arg) {
2010 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX,
2011 receiver: receiver, operator: operator,
2012 getter: getterSelector, setter: setterSelector));
2013 apply(receiver, arg);
2014 }
2015
2016 @override
2017 visitDynamicPropertyGet(Send node, Node receiver, Selector selector, arg) {
2018 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET,
2019 receiver: receiver, name: selector.name));
2020 }
2021
2022 @override
2023 visitDynamicPropertyInvoke(Send node, Node receiver, NodeList arguments, Selec tor selector, arg) {
2024 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE,
2025 receiver: receiver, name: selector.name, arguments: arguments));
2026 apply(arguments, arg);
2027 }
2028
2029 @override
2030 visitDynamicPropertySet(SendSet node, Node receiver, Selector selector, Node r hs, arg) {
2031 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET,
2032 receiver: receiver, name: selector.name, rhs: rhs));
2033 }
2034
2035 @override
2036 visitDynamicTypeLiteralGet(Send node, arg) {
2037 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET));
2038 }
2039
2040 @override
2041 visitDynamicTypeLiteralInvoke(Send node, NodeList arguments, Selector selector , arg) {
2042 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE,
2043 arguments: arguments));
2044 }
2045
2046 @override
2047 errorDynamicTypeLiteralSet(Send node, Node rhs, arg) {
2048 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET,
2049 rhs: rhs));
2050 apply(rhs, arg);
2051 }
2052
2053 @override
2054 visitExpressionInvoke(Send node, Node expression, NodeList arguments, Selector selector, arg) {
2055 visits.add(new Visit(VisitKind.VISIT_EXPRESSION_INVOKE,
2056 receiver: expression, arguments: arguments));
2057 }
2058
2059 @override
2060 visitIs(Send node, Node expression, DartType type, arg) {
2061 visits.add(new Visit(VisitKind.VISIT_IS,
2062 expression: expression, type: type));
2063 apply(expression, arg);
2064 }
2065
2066 @override
2067 visitIsNot(Send node, Node expression, DartType type, arg) {
2068 visits.add(new Visit(VisitKind.VISIT_IS_NOT,
2069 expression: expression, type: type));
2070 apply(expression, arg);
2071 }
2072
2073 @override
2074 visitLazyAnd(Send node, Node left, Node right, arg) {
2075 visits.add(new Visit(VisitKind.VISIT_LAZY_AND,
2076 left: left, right: right));
2077 apply(left, arg);
2078 apply(right, arg);
2079 }
2080
2081 @override
2082 visitLazyOr(Send node, Node left, Node right, arg) {
2083 visits.add(new Visit(VisitKind.VISIT_LAZY_OR,
2084 left: left, right: right));
2085 apply(left, arg);
2086 apply(right, arg);
2087 }
2088
2089 @override
2090 visitLocalFunctionGet(Send node, LocalFunctionElement function, arg) {
2091 visits.add(new Visit(VisitKind.VISIT_LOCAL_FUNCTION_GET, element: function)) ;
2092 }
2093
2094 @override
2095 visitLocalFunctionInvoke(Send node, LocalFunctionElement function, NodeList ar guments, Selector selector, arg) {
2096 visits.add(new Visit(VisitKind.VISIT_LOCAL_FUNCTION_INVOKE,
2097 element: function, arguments: arguments));
2098 apply(arguments, arg);
2099 }
2100
2101 @override
2102 visitLocalVariableGet(Send node, LocalVariableElement variable, arg) {
2103 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_GET, element: variable)) ;
2104 }
2105
2106 @override
2107 visitLocalVariableInvoke(Send node, LocalVariableElement variable, NodeList ar guments, Selector selector, arg) {
2108 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_INVOKE,
2109 element: variable, arguments: arguments));
2110 apply(arguments, arg);
2111 }
2112
2113 @override
2114 visitLocalVariableSet(SendSet node, LocalVariableElement variable, Node rhs, a rg) {
2115 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_SET,
2116 element: variable, rhs: rhs));
2117 apply(rhs, arg);
2118 }
2119
2120 @override
2121 visitParameterGet(Send node, ParameterElement parameter, arg) {
2122 visits.add(new Visit(VisitKind.VISIT_PARAMETER_GET, element: parameter));
2123 }
2124
2125 @override
2126 visitParameterInvoke(Send node, ParameterElement parameter, NodeList arguments , Selector selector, arg) {
2127 visits.add(new Visit(VisitKind.VISIT_PARAMETER_INVOKE,
2128 element: parameter, arguments: arguments));
2129 apply(arguments, arg);
2130 }
2131
2132 @override
2133 visitParameterSet(SendSet node, ParameterElement parameter, Node rhs, arg) {
2134 visits.add(new Visit(VisitKind.VISIT_PARAMETER_SET, element: parameter, rhs: rhs));
2135 apply(rhs, arg);
2136 }
2137
2138 @override
2139 visitStaticFieldGet(Send node, FieldElement field, arg) {
2140 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: field));
2141 }
2142
2143 @override
2144 visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments, Sele ctor selector, arg) {
2145 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
2146 element: field, arguments: arguments));
2147 apply(arguments, arg);
2148 }
2149
2150 @override
2151 visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
2152 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_SET,
2153 element: field, rhs: rhs));
2154 apply(rhs, arg);
2155 }
2156
2157 @override
2158 visitStaticFunctionGet(Send node, MethodElement function, arg) {
2159 visits.add(new Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
2160 element: function));
2161 }
2162
2163 @override
2164 visitStaticFunctionInvoke(Send node, MethodElement function, NodeList argument s, Selector selector, arg) {
2165 visits.add(new Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
2166 element: function, arguments: arguments));
2167 apply(arguments, arg);
2168 }
2169
2170 @override
2171 visitStaticGetterGet(Send node, FunctionElement getter, arg) {
2172 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_GET,
2173 element: getter));
2174 }
2175
2176 @override
2177 visitStaticGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, arg) {
2178 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
2179 element: getter, arguments: arguments));
2180 apply(arguments, arg);
2181 }
2182
2183 @override
2184 visitStaticSetterSet(SendSet node, FunctionElement setter, Node rhs, arg) {
2185 visits.add(new Visit(VisitKind.VISIT_STATIC_SETTER_SET,
2186 element: setter, rhs: rhs));
2187 apply(rhs, arg);
2188 }
2189
2190 @override
2191 visitSuperBinary(Send node, FunctionElement function, BinaryOperator operator, Node argument, arg) {
2192 visits.add(new Visit(VisitKind.VISIT_SUPER_BINARY,
2193 element: function, operator: operator, right: argument));
2194 apply(argument, arg);
2195 }
2196
2197 @override
2198 visitSuperNotEquals(Send node, FunctionElement function, Node argument, arg) {
2199 visits.add(new Visit(VisitKind.VISIT_SUPER_NOT_EQUALS,
2200 element: function, right: argument));
2201 apply(argument, arg);
2202 }
2203
2204 @override
2205 visitThisGet(Identifier node, arg) {
2206 visits.add(new Visit(VisitKind.VISIT_THIS_GET));
2207 }
2208
2209 @override
2210 visitThisInvoke(Send node, NodeList arguments, Selector selector, arg) {
2211 visits.add(new Visit(VisitKind.VISIT_THIS_INVOKE, arguments: arguments));
2212 apply(arguments, arg);
2213 }
2214
2215 @override
2216 visitThisPropertyGet(Send node, Selector selector, arg) {
2217 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
2218 name: selector.name));
2219 }
2220
2221 @override
2222 visitThisPropertyInvoke(Send node, NodeList arguments, Selector selector, arg) {
2223 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE,
2224 name: selector.name, arguments: arguments));
2225 apply(arguments, arg);
2226 }
2227
2228 @override
2229 visitThisPropertySet(SendSet node, Selector selector, Node rhs, arg) {
2230 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
2231 name: selector.name, rhs: rhs));
2232 apply(rhs, arg);
2233 }
2234
2235 @override
2236 visitTopLevelFieldGet(Send node, FieldElement field, arg) {
2237 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: field));
2238 }
2239
2240 @override
2241 visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments, Se lector selector, arg) {
2242 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE,
2243 element: field, arguments: arguments));
2244 apply(arguments, arg);
2245 }
2246
2247 @override
2248 visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
2249 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET,
2250 element: field, rhs: rhs));
2251 apply(rhs, arg);
2252 }
2253
2254 @override
2255 visitTopLevelFunctionGet(Send node, MethodElement function, arg) {
2256 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_GET,
2257 element: function));
2258 }
2259
2260 @override
2261 visitTopLevelFunctionInvoke(Send node, MethodElement function, NodeList argume nts, Selector selector, arg) {
2262 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE,
2263 element: function, arguments: arguments));
2264 apply(arguments, arg);
2265 }
2266
2267 @override
2268 visitTopLevelGetterGet(Send node, FunctionElement getter, arg) {
2269 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET,
2270 element: getter));
2271 }
2272
2273 @override
2274 visitTopLevelGetterInvoke(Send node, FunctionElement getter, NodeList argument s, Selector selector, arg) {
2275 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE,
2276 element: getter, arguments: arguments));
2277 apply(arguments, arg);
2278 }
2279
2280 @override
2281 visitTopLevelSetterSet(SendSet node, FunctionElement setter, Node rhs, arg) {
2282 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET,
2283 element: setter, rhs: rhs));
2284 apply(rhs, arg);
2285 }
2286
2287 @override
2288 visitTypeVariableTypeLiteralGet(Send node, TypeVariableElement element, arg) {
2289 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET,
2290 element: element));
2291 }
2292
2293 @override
2294 visitTypeVariableTypeLiteralInvoke(Send node, TypeVariableElement element, Nod eList arguments, Selector selector, arg) {
2295 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE,
2296 element: element, arguments: arguments));
2297 apply(arguments, arg);
2298 }
2299
2300 @override
2301 errorTypeVariableTypeLiteralSet(SendSet node, TypeVariableElement element, Nod e rhs, arg) {
2302 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET,
2303 element: element, rhs: rhs));
2304 apply(rhs, arg);
2305 }
2306
2307 @override
2308 visitTypedefTypeLiteralGet(Send node, TypedefElement element, arg) {
2309 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET,
2310 element: element));
2311 }
2312
2313 @override
2314 visitTypedefTypeLiteralInvoke(Send node, TypedefElement element, NodeList argu ments, Selector selector, arg) {
2315 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE,
2316 element: element, arguments: arguments));
2317 apply(arguments, arg);
2318 }
2319
2320 @override
2321 errorTypedefTypeLiteralSet(SendSet node, TypedefElement element, Node rhs, arg ) {
2322 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET,
2323 element: element, rhs: rhs));
2324 apply(rhs, arg);
2325 }
2326
2327 @override
2328 visitUnary(Send node, UnaryOperator operator, Node expression, arg) {
2329 visits.add(new Visit(VisitKind.VISIT_UNARY,
2330 expression: expression, operator: operator));
2331 apply(expression, arg);
2332 }
2333
2334 @override
2335 visitNot(Send node, Node expression, arg) {
2336 visits.add(new Visit(VisitKind.VISIT_NOT, expression: expression));
2337 apply(expression, arg);
2338 }
2339
2340 @override
2341 visitSuperFieldGet(Send node, FieldElement field, arg) {
2342 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_GET, element: field));
2343 }
2344
2345 @override
2346 visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments, Selec tor selector, arg) {
2347 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE,
2348 element: field, arguments: arguments));
2349 apply(arguments, arg);
2350 }
2351
2352 @override
2353 visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
2354 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SET,
2355 element: field, rhs: rhs));
2356 apply(rhs, arg);
2357 }
2358
2359 @override
2360 visitSuperMethodGet(Send node, MethodElement method, arg) {
2361 visits.add(new Visit(VisitKind.VISIT_SUPER_METHOD_GET, element: method));
2362 }
2363
2364 @override
2365 visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments, Se lector selector, arg) {
2366 visits.add(new Visit(VisitKind.VISIT_SUPER_METHOD_INVOKE,
2367 element: method, arguments: arguments));
2368 apply(arguments, arg);
2369 }
2370
2371 @override
2372 visitSuperGetterGet(Send node, FunctionElement getter, arg) {
2373 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_GET, element: getter));
2374 }
2375
2376 @override
2377 visitSuperGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, arg) {
2378 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_INVOKE,
2379 element: getter, arguments: arguments));
2380 apply(arguments, arg);
2381 }
2382
2383 @override
2384 visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, arg) {
2385 visits.add(new Visit(VisitKind.VISIT_SUPER_SETTER_SET,
2386 element: setter, rhs: rhs));
2387 apply(rhs, arg);
2388 }
2389
2390 @override
2391 visitSuperUnary(Send node, UnaryOperator operator, FunctionElement function, a rg) {
2392 visits.add(new Visit(VisitKind.VISIT_SUPER_UNARY,
2393 element: function, operator: operator));
2394 }
2395
2396 @override
2397 visitEquals(Send node, Node left, Node right, arg) {
2398 visits.add(new Visit(VisitKind.VISIT_EQUALS, left: left, right: right));
2399 apply(left, arg);
2400 apply(right, arg);
2401 }
2402
2403 @override
2404 visitSuperEquals(Send node, FunctionElement function, Node argument, arg) {
2405 visits.add(new Visit(VisitKind.VISIT_SUPER_EQUALS,
2406 element: function, right: argument));
2407 apply(argument, arg);
2408 }
2409
2410 @override
2411 visitIndexSet(Send node, Node receiver, Node index, Node rhs, arg) {
2412 visits.add(new Visit(VisitKind.VISIT_INDEX_SET,
2413 receiver: receiver, index: index, rhs: rhs));
2414 apply(receiver, arg);
2415 apply(index, arg);
2416 apply(rhs, arg);
2417 }
2418
2419 @override
2420 visitSuperIndexSet(Send node, FunctionElement function, Node index, Node rhs, arg) {
2421 visits.add(new Visit(VisitKind.VISIT_SUPER_INDEX_SET,
2422 element: function, index: index, rhs: rhs));
2423 apply(index, arg);
2424 apply(rhs, arg);
2425 }
2426
2427 @override
2428 errorFinalLocalVariableSet(SendSet node, LocalVariableElement variable, Node r hs, arg) {
2429 // TODO: implement errorFinalLocalVariableSet
2430 }
2431
2432 @override
2433 errorFinalParameterSet(SendSet node, ParameterElement parameter, Node rhs, arg ) {
2434 // TODO: implement errorFinalParameterSet
2435 }
2436
2437 @override
2438 errorFinalStaticFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
2439 // TODO: implement errorFinalStaticFieldSet
2440 }
2441
2442 @override
2443 errorFinalSuperFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
2444 // TODO: implement errorFinalSuperFieldSet
2445 }
2446
2447 @override
2448 errorFinalTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
2449 // TODO: implement errorFinalTopLevelFieldSet
2450 }
2451
2452 @override
2453 errorLocalFunctionSet(SendSet node, LocalFunctionElement function, Node rhs, a rg) {
2454 // TODO: implement errorLocalFunctionSet
2455 }
2456
2457 @override
2458 errorStaticFunctionSet(Send node, MethodElement function, Node rhs, arg) {
2459 // TODO: implement errorStaticFunctionSet
2460 }
2461
2462 @override
2463 errorStaticGetterSet(SendSet node, FunctionElement getter, Node rhs, arg) {
2464 // TODO: implement errorStaticGetterSet
2465 }
2466
2467 @override
2468 errorStaticSetterGet(Send node, FunctionElement setter, arg) {
2469 // TODO: implement errorStaticSetterGet
2470 }
2471
2472 @override
2473 errorStaticSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, arg) {
2474 // TODO: implement errorStaticSetterInvoke
2475 }
2476
2477 @override
2478 errorSuperGetterSet(SendSet node, FunctionElement getter, Node rhs, arg) {
2479 // TODO: implement errorSuperGetterSet
2480 }
2481
2482 @override
2483 errorSuperMethodSet(Send node, MethodElement method, Node rhs, arg) {
2484 // TODO: implement errorSuperMethodSet
2485 }
2486
2487 @override
2488 errorSuperSetterGet(Send node, FunctionElement setter, arg) {
2489 // TODO: implement errorSuperSetterGet
2490 }
2491
2492 @override
2493 errorSuperSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, arg) {
2494 // TODO: implement errorSuperSetterInvoke
2495 }
2496
2497 @override
2498 errorTopLevelFunctionSet(Send node, MethodElement function, Node rhs, arg) {
2499 // TODO: implement errorTopLevelFunctionSet
2500 }
2501
2502 @override
2503 errorTopLevelGetterSet(SendSet node, FunctionElement getter, Node rhs, arg) {
2504 // TODO: implement errorTopLevelGetterSet
2505 }
2506
2507 @override
2508 errorTopLevelSetterGet(Send node, FunctionElement setter, arg) {
2509 // TODO: implement errorTopLevelSetterGet
2510 }
2511
2512 @override
2513 errorTopLevelSetterInvoke(Send node, FunctionElement setter, NodeList argument s, Selector selector, arg) {
2514 // TODO: implement errorTopLevelSetterInvoke
2515 }
2516
2517 @override
2518 visitDynamicPropertyCompound(Send node, Node receiver, AssignmentOperator oper ator, Node rhs, Selector getterSelector, Selector setterSelector, arg) {
2519 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND,
2520 receiver: receiver, operator: operator, rhs: rhs,
2521 getter: getterSelector, setter: setterSelector));
2522 apply(receiver, arg);
2523 apply(rhs, arg);
2524 }
2525
2526 @override
2527 errorFinalLocalVariableCompound(Send node, LocalVariableElement variable, Assi gnmentOperator operator, Node rhs, arg) {
2528 // TODO: implement errorFinalLocalVariableCompound
2529 }
2530
2531 @override
2532 errorFinalParameterCompound(Send node, ParameterElement parameter, AssignmentO perator operator, Node rhs, arg) {
2533 // TODO: implement errorFinalParameterCompound
2534 }
2535
2536 @override
2537 errorFinalStaticFieldCompound(Send node, FieldElement field, AssignmentOperato r operator, Node rhs, arg) {
2538 // TODO: implement errorFinalStaticFieldCompound
2539 }
2540
2541 @override
2542 errorFinalSuperFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, arg) {
2543 // TODO: implement errorFinalSuperFieldCompound
2544 }
2545
2546 @override
2547 errorFinalTopLevelFieldCompound(Send node, FieldElement field, AssignmentOpera tor operator, Node rhs, arg) {
2548 // TODO: implement errorFinalTopLevelFieldCompound
2549 }
2550
2551 @override
2552 errorLocalFunctionCompound(Send node, LocalFunctionElement function, Assignmen tOperator operator, Node rhs, arg) {
2553 // TODO: implement errorLocalFunctionCompound
2554 }
2555
2556 @override
2557 visitLocalVariableCompound(Send node, LocalVariableElement variable, Assignmen tOperator operator, Node rhs, arg) {
2558 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_COMPOUND,
2559 element: variable, operator: operator, rhs: rhs));
2560 apply(rhs, arg);
2561 }
2562
2563 @override
2564 visitParameterCompound(Send node, ParameterElement parameter, AssignmentOperat or operator, Node rhs, arg) {
2565 visits.add(new Visit(VisitKind.VISIT_PARAMETER_COMPOUND,
2566 element: parameter, operator: operator, rhs: rhs));
2567 apply(rhs, arg);
2568 }
2569
2570 @override
2571 visitStaticFieldCompound(Send node, FieldElement field, AssignmentOperator ope rator, Node rhs, arg) {
2572 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
2573 element: field, operator: operator, rhs: rhs));
2574 apply(rhs, arg);
2575 }
2576
2577 @override
2578 visitStaticGetterSetterCompound(Send node, FunctionElement getter, FunctionEle ment setter, AssignmentOperator operator, Node rhs, arg) {
2579 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
2580 operator: operator, rhs: rhs,
2581 getter: getter, setter: setter));
2582 apply(rhs, arg);
2583 }
2584
2585 @override
2586 visitSuperFieldCompound(Send node, FieldElement field, AssignmentOperator oper ator, Node rhs, arg) {
2587 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_COMPOUND,
2588 element: field, operator: operator, rhs: rhs));
2589 apply(rhs, arg);
2590 }
2591
2592 @override
2593 visitSuperGetterSetterCompound(Send node, FunctionElement getter, FunctionElem ent setter, AssignmentOperator operator, Node rhs, arg) {
2594 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND,
2595 operator: operator, rhs: rhs,
2596 getter: getter, setter: setter));
2597 apply(rhs, arg);
2598 }
2599
2600 @override
2601 visitThisPropertyCompound(Send node, AssignmentOperator operator, Node rhs, Se lector getterSelector, Selector setterSelector, arg) {
2602 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_COMPOUND,
2603 operator: operator, rhs: rhs,
2604 getter: getterSelector, setter: setterSelector));
2605 apply(rhs, arg);
2606 }
2607
2608 @override
2609 visitTopLevelFieldCompound(Send node, FieldElement field, AssignmentOperator o perator, Node rhs, arg) {
2610 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_COMPOUND,
2611 element: field, operator: operator, rhs: rhs));
2612 apply(rhs, arg);
2613 }
2614
2615 @override
2616 visitTopLevelGetterSetterCompound(Send node, FunctionElement getter, FunctionE lement setter, AssignmentOperator operator, Node rhs, arg) {
2617 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND,
2618 operator: operator, rhs: rhs,
2619 getter: getter, setter: setter));
2620 apply(rhs, arg);
2621 }
2622
2623 @override
2624 visitStaticMethodSetterCompound(Send node, FunctionElement method, FunctionEle ment setter, AssignmentOperator operator, Node rhs, arg) {
2625 visits.add(new Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
2626 operator: operator, rhs: rhs,
2627 getter: method, setter: setter));
2628 apply(rhs, arg);
2629 }
2630
2631 @override
2632 visitSuperFieldSetterCompound(Send node, FieldElement field, FunctionElement s etter, AssignmentOperator operator, Node rhs, arg) {
2633 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_COMPOUND,
2634 operator: operator, rhs: rhs,
2635 getter: field, setter: setter));
2636 apply(rhs, arg);
2637 }
2638
2639 @override
2640 visitSuperGetterFieldCompound(Send node, FunctionElement getter, FieldElement field, AssignmentOperator operator, Node rhs, arg) {
2641 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_COMPOUND,
2642 operator: operator, rhs: rhs,
2643 getter: getter, setter: field));
2644 apply(rhs, arg);
2645 }
2646
2647 @override
2648 visitSuperMethodSetterCompound(Send node, FunctionElement method, FunctionElem ent setter, AssignmentOperator operator, Node rhs, arg) {
2649 // TODO: implement visitSuperMethodSetterCompound
2650 }
2651
2652 @override
2653 visitTopLevelMethodSetterCompound(Send node, FunctionElement method, FunctionE lement setter, AssignmentOperator operator, Node rhs, arg) {
2654 // TODO: implement visitTopLevelMethodSetterCompound
2655 }
2656
2657 @override
2658 visitCompoundIndexSet(Send node, Node receiver, Node index, AssignmentOperator operator, Node rhs, arg) {
2659 visits.add(new Visit(VisitKind.VISIT_COMPOUND_INDEX_SET,
2660 receiver: receiver, index: index, rhs: rhs, operator: operator));
2661 apply(receiver, arg);
2662 apply(index, arg);
2663 apply(rhs, arg);
2664 }
2665
2666 @override
2667 visitSuperCompoundIndexSet(Send node, FunctionElement getter, FunctionElement setter, Node index, AssignmentOperator operator, Node rhs, arg) {
2668 visits.add(new Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET,
2669 getter: getter, setter: setter,
2670 index: index, rhs: rhs, operator: operator));
2671 apply(index, arg);
2672 apply(rhs, arg);
2673 }
2674
2675 @override
2676 visitClassTypeLiteralCompound(Send node, ClassElement element, AssignmentOpera tor operator, Node rhs, arg) {
2677 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND,
2678 element: element, operator: operator, rhs: rhs));
2679 apply(rhs, arg);
2680 }
2681
2682 @override
2683 visitDynamicTypeLiteralCompound(Send node, AssignmentOperator operator, Node r hs, arg) {
2684 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND,
2685 operator: operator, rhs: rhs));
2686 apply(rhs, arg);
2687 }
2688
2689 @override
2690 visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element, A ssignmentOperator operator, Node rhs, arg) {
2691 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND,
2692 element: element, operator: operator, rhs: rhs));
2693 apply(rhs, arg);
2694 }
2695
2696 @override
2697 visitTypedefTypeLiteralCompound(Send node, TypedefElement element, AssignmentO perator operator, Node rhs, arg) {
2698 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND,
2699 element: element, operator: operator, rhs: rhs));
2700 apply(rhs, arg);
2701 }
2702
2703 @override
2704 errorLocalFunctionPrefix(Send node, LocalFunctionElement function, IncDecOpera tor operator, arg) {
2705 // TODO: implement errorLocalFunctionPrefix
2706 }
2707
2708 @override
2709 visitClassTypeLiteralPrefix(Send node, ClassElement element, IncDecOperator op erator, arg) {
2710 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_PREFIX,
2711 element: element, operator: operator));
2712 }
2713
2714 @override
2715 visitDynamicTypeLiteralPrefix(Send node, IncDecOperator operator, arg) {
2716 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_PREFIX,
2717 operator: operator));
2718 }
2719
2720 @override
2721 visitLocalVariablePrefix(Send node, LocalVariableElement variable, IncDecOpera tor operator, arg) {
2722 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_PREFIX,
2723 element: variable, operator: operator));
2724 }
2725
2726 @override
2727 visitParameterPrefix(Send node, ParameterElement parameter, IncDecOperator ope rator, arg) {
2728 visits.add(new Visit(VisitKind.VISIT_PARAMETER_PREFIX,
2729 element: parameter, operator: operator));
2730 }
2731
2732 @override
2733 visitStaticFieldPrefix(Send node, FieldElement field, IncDecOperator operator, arg) {
2734 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
2735 element: field, operator: operator));
2736 }
2737
2738 @override
2739 visitStaticGetterSetterPrefix(Send node, FunctionElement getter, FunctionEleme nt setter, IncDecOperator operator, arg) {
2740 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
2741 getter: getter, setter: setter, operator: operator));
2742 }
2743
2744 @override
2745 visitStaticMethodSetterPrefix(Send node, FunctionElement getter, FunctionEleme nt setter, IncDecOperator operator, arg) {
2746 // TODO: implement visitStaticMethodSetterPrefix
2747 }
2748
2749 @override
2750 visitSuperFieldFieldPrefix(Send node, FieldElement readField, FieldElement wri ttenField, IncDecOperator operator, arg) {
2751 // TODO: implement visitSuperFieldFieldPrefix
2752 }
2753
2754 @override
2755 visitSuperFieldPrefix(Send node, FieldElement field, IncDecOperator operator, arg) {
2756 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_PREFIX,
2757 element: field, operator: operator));
2758 }
2759
2760 @override
2761 visitSuperFieldSetterPrefix(Send node, FieldElement field, FunctionElement set ter, IncDecOperator operator, arg) {
2762 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_PREFIX,
2763 getter: field, setter: setter, operator: operator));
2764 }
2765
2766 @override
2767 visitSuperGetterFieldPrefix(Send node, FunctionElement getter, FieldElement fi eld, IncDecOperator operator, arg) {
2768 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_PREFIX,
2769 getter: getter, setter: field, operator: operator));
2770 }
2771
2772 @override
2773 visitSuperGetterSetterPrefix(Send node, FunctionElement getter, FunctionElemen t setter, IncDecOperator operator, arg) {
2774 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX,
2775 getter: getter, setter: setter, operator: operator));
2776 }
2777
2778 @override
2779 visitSuperMethodSetterPrefix(Send node, FunctionElement method, FunctionElemen t setter, IncDecOperator operator, arg) {
2780 // TODO: implement visitSuperMethodSetterPrefix
2781 }
2782
2783 @override
2784 visitThisPropertyPrefix(Send node, IncDecOperator operator, Selector getterSel ector, Selector setterSelector, arg) {
2785 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX,
2786 operator: operator,
2787 getter: getterSelector, setter: setterSelector));
2788 }
2789
2790 @override
2791 visitTopLevelFieldPrefix(Send node, FieldElement field, IncDecOperator operato r, arg) {
2792 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_PREFIX,
2793 element: field, operator: operator));
2794 }
2795
2796 @override
2797 visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter, FunctionEle ment setter, IncDecOperator operator, arg) {
2798 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX,
2799 getter: getter, setter: setter, operator: operator));
2800 }
2801
2802 @override
2803 visitTopLevelMethodSetterPrefix(Send node, FunctionElement method, FunctionEle ment setter, IncDecOperator operator, arg) {
2804 // TODO: implement visitTopLevelMethodSetterPrefix
2805 }
2806
2807 @override
2808 visitTypeVariableTypeLiteralPrefix(Send node, TypeVariableElement element, Inc DecOperator operator, arg) {
2809 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX,
2810 element: element, operator: operator));
2811 }
2812
2813 @override
2814 visitTypedefTypeLiteralPrefix(Send node, TypedefElement element, IncDecOperato r operator, arg) {
2815 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_PREFIX,
2816 element: element, operator: operator));
2817 }
2818
2819 @override
2820 errorLocalFunctionPostfix(Send node, LocalFunctionElement function, IncDecOper ator operator, arg) {
2821 // TODO: implement errorLocalFunctionPostfix
2822 }
2823
2824 @override
2825 visitClassTypeLiteralPostfix(Send node, ClassElement element, IncDecOperator o perator, arg) {
2826 visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_POSTFIX,
2827 element: element, operator: operator));
2828 }
2829
2830 @override
2831 visitDynamicTypeLiteralPostfix(Send node, IncDecOperator operator, arg) {
2832 visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX,
2833 operator: operator));
2834 }
2835
2836 @override
2837 visitLocalVariablePostfix(Send node, LocalVariableElement variable, IncDecOper ator operator, arg) {
2838 visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_POSTFIX,
2839 element: variable, operator: operator));
2840 }
2841
2842 @override
2843 visitParameterPostfix(Send node, ParameterElement parameter, IncDecOperator op erator, arg) {
2844 visits.add(new Visit(VisitKind.VISIT_PARAMETER_POSTFIX,
2845 element: parameter, operator: operator));
2846 }
2847
2848 @override
2849 visitStaticFieldPostfix(Send node, FieldElement field, IncDecOperator operator , arg) {
2850 visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
2851 element: field, operator: operator));
2852 }
2853
2854 @override
2855 visitStaticGetterSetterPostfix(Send node, FunctionElement getter, FunctionElem ent setter, IncDecOperator operator, arg) {
2856 visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
2857 getter: getter, setter: setter, operator: operator));
2858 }
2859
2860 @override
2861 visitStaticMethodSetterPostfix(Send node, FunctionElement getter, FunctionElem ent setter, IncDecOperator operator, arg) {
2862 // TODO: implement visitStaticMethodSetterPostfix
2863 }
2864
2865 @override
2866 visitSuperFieldFieldPostfix(Send node, FieldElement readField, FieldElement wr ittenField, IncDecOperator operator, arg) {
2867 // TODO: implement visitSuperFieldFieldPostfix
2868 }
2869
2870 @override
2871 visitSuperFieldPostfix(Send node, FieldElement field, IncDecOperator operator, arg) {
2872 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_POSTFIX,
2873 element: field, operator: operator));
2874 }
2875
2876 @override
2877 visitSuperFieldSetterPostfix(Send node, FieldElement field, FunctionElement se tter, IncDecOperator operator, arg) {
2878 visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_POSTFIX,
2879 getter: field, setter: setter, operator: operator));
2880 }
2881
2882 @override
2883 visitSuperGetterFieldPostfix(Send node, FunctionElement getter, FieldElement f ield, IncDecOperator operator, arg) {
2884 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_POSTFIX,
2885 getter: getter, setter: field, operator: operator));
2886 }
2887
2888 @override
2889 visitSuperGetterSetterPostfix(Send node, FunctionElement getter, FunctionEleme nt setter, IncDecOperator operator, arg) {
2890 visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX,
2891 getter: getter, setter: setter, operator: operator));
2892 }
2893
2894 @override
2895 visitSuperMethodSetterPostfix(Send node, FunctionElement method, FunctionEleme nt setter, IncDecOperator operator, arg) {
2896 // TODO: implement visitSuperMethodSetterPostfix
2897 }
2898
2899 @override
2900 visitThisPropertyPostfix(Send node, IncDecOperator operator, Selector getterSe lector, Selector setterSelector, arg) {
2901 visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX,
2902 operator: operator,
2903 getter: getterSelector, setter: setterSelector));
2904 }
2905
2906 @override
2907 visitTopLevelFieldPostfix(Send node, FieldElement field, IncDecOperator operat or, arg) {
2908 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_POSTFIX,
2909 element: field, operator: operator));
2910 }
2911
2912 @override
2913 visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter, FunctionEl ement setter, IncDecOperator operator, arg) {
2914 visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX,
2915 getter: getter, setter: setter, operator: operator));
2916 }
2917
2918 @override
2919 visitTopLevelMethodSetterPostfix(Send node, FunctionElement method, FunctionEl ement setter, IncDecOperator operator, arg) {
2920 // TODO: implement visitTopLevelMethodSetterPostfix
2921 }
2922
2923 @override
2924 visitTypeVariableTypeLiteralPostfix(Send node, TypeVariableElement element, In cDecOperator operator, arg) {
2925 visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX,
2926 element: element, operator: operator));
2927 }
2928
2929 @override
2930 visitTypedefTypeLiteralPostfix(Send node, TypedefElement element, IncDecOperat or operator, arg) {
2931 visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_POSTFIX,
2932 element: element, operator: operator));
2933 }
2934 }
2935
2936 enum VisitKind {
2937 VISIT_PARAMETER_GET,
2938 VISIT_PARAMETER_SET,
2939 VISIT_PARAMETER_INVOKE,
2940 VISIT_PARAMETER_COMPOUND,
2941 VISIT_PARAMETER_PREFIX,
2942 VISIT_PARAMETER_POSTFIX,
2943
2944 VISIT_LOCAL_VARIABLE_GET,
2945 VISIT_LOCAL_VARIABLE_SET,
2946 VISIT_LOCAL_VARIABLE_INVOKE,
2947 VISIT_LOCAL_VARIABLE_COMPOUND,
2948 VISIT_LOCAL_VARIABLE_PREFIX,
2949 VISIT_LOCAL_VARIABLE_POSTFIX,
2950
2951 VISIT_LOCAL_FUNCTION_GET,
2952 VISIT_LOCAL_FUNCTION_INVOKE,
2953
2954 VISIT_STATIC_FIELD_GET,
2955 VISIT_STATIC_FIELD_SET,
2956 VISIT_STATIC_FIELD_INVOKE,
2957 VISIT_STATIC_FIELD_COMPOUND,
2958 VISIT_STATIC_FIELD_PREFIX,
2959 VISIT_STATIC_FIELD_POSTFIX,
2960
2961 VISIT_STATIC_GETTER_GET,
2962 VISIT_STATIC_SETTER_SET,
2963 VISIT_STATIC_GETTER_INVOKE,
2964 VISIT_STATIC_GETTER_SETTER_COMPOUND,
2965 VISIT_STATIC_METHOD_SETTER_COMPOUND,
2966 VISIT_STATIC_GETTER_SETTER_PREFIX,
2967 VISIT_STATIC_GETTER_SETTER_POSTFIX,
2968
2969 VISIT_STATIC_FUNCTION_GET,
2970 VISIT_STATIC_FUNCTION_INVOKE,
2971
2972 VISIT_TOP_LEVEL_FIELD_GET,
2973 VISIT_TOP_LEVEL_FIELD_SET,
2974 VISIT_TOP_LEVEL_FIELD_INVOKE,
2975 VISIT_TOP_LEVEL_FIELD_COMPOUND,
2976 VISIT_TOP_LEVEL_FIELD_PREFIX,
2977 VISIT_TOP_LEVEL_FIELD_POSTFIX,
2978
2979 VISIT_TOP_LEVEL_GETTER_GET,
2980 VISIT_TOP_LEVEL_SETTER_SET,
2981 VISIT_TOP_LEVEL_GETTER_INVOKE,
2982 VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND,
2983 VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX,
2984 VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX,
2985
2986 VISIT_TOP_LEVEL_FUNCTION_GET,
2987 VISIT_TOP_LEVEL_FUNCTION_INVOKE,
2988
2989 VISIT_DYNAMIC_PROPERTY_GET,
2990 VISIT_DYNAMIC_PROPERTY_SET,
2991 VISIT_DYNAMIC_PROPERTY_INVOKE,
2992 VISIT_DYNAMIC_PROPERTY_COMPOUND,
2993 VISIT_DYNAMIC_PROPERTY_PREFIX,
2994 VISIT_DYNAMIC_PROPERTY_POSTFIX,
2995
2996 VISIT_THIS_GET,
2997 VISIT_THIS_INVOKE,
2998
2999 VISIT_THIS_PROPERTY_GET,
3000 VISIT_THIS_PROPERTY_SET,
3001 VISIT_THIS_PROPERTY_INVOKE,
3002 VISIT_THIS_PROPERTY_COMPOUND,
3003 VISIT_THIS_PROPERTY_PREFIX,
3004 VISIT_THIS_PROPERTY_POSTFIX,
3005
3006 VISIT_SUPER_FIELD_GET,
3007 VISIT_SUPER_FIELD_SET,
3008 VISIT_SUPER_FIELD_INVOKE,
3009 VISIT_SUPER_FIELD_COMPOUND,
3010 VISIT_SUPER_FIELD_PREFIX,
3011 VISIT_SUPER_FIELD_POSTFIX,
3012
3013 VISIT_SUPER_GETTER_GET,
3014 VISIT_SUPER_SETTER_SET,
3015 VISIT_SUPER_GETTER_INVOKE,
3016 VISIT_SUPER_GETTER_SETTER_COMPOUND,
3017 VISIT_SUPER_GETTER_FIELD_COMPOUND,
3018 VISIT_SUPER_FIELD_SETTER_COMPOUND,
3019 VISIT_SUPER_GETTER_SETTER_PREFIX,
3020 VISIT_SUPER_GETTER_FIELD_PREFIX,
3021 VISIT_SUPER_FIELD_SETTER_PREFIX,
3022 VISIT_SUPER_GETTER_SETTER_POSTFIX,
3023 VISIT_SUPER_GETTER_FIELD_POSTFIX,
3024 VISIT_SUPER_FIELD_SETTER_POSTFIX,
3025
3026 VISIT_SUPER_METHOD_GET,
3027 VISIT_SUPER_METHOD_INVOKE,
3028
3029 VISIT_BINARY,
3030 VISIT_EQUALS,
3031 VISIT_NOT_EQUALS,
3032
3033 VISIT_SUPER_BINARY,
3034 VISIT_SUPER_EQUALS,
3035 VISIT_SUPER_NOT_EQUALS,
3036
3037 VISIT_UNARY,
3038 VISIT_SUPER_UNARY,
3039 VISIT_NOT,
3040
3041 VISIT_EXPRESSION_INVOKE,
3042
3043 VISIT_CLASS_TYPE_LITERAL_GET,
3044 VISIT_CLASS_TYPE_LITERAL_SET,
3045 VISIT_CLASS_TYPE_LITERAL_INVOKE,
3046 VISIT_CLASS_TYPE_LITERAL_BINARY,
3047 VISIT_CLASS_TYPE_LITERAL_COMPOUND,
3048 VISIT_CLASS_TYPE_LITERAL_PREFIX,
3049 VISIT_CLASS_TYPE_LITERAL_POSTFIX,
3050
3051 VISIT_TYPEDEF_TYPE_LITERAL_GET,
3052 VISIT_TYPEDEF_TYPE_LITERAL_SET,
3053 VISIT_TYPEDEF_TYPE_LITERAL_INVOKE,
3054 VISIT_TYPEDEF_TYPE_LITERAL_BINARY,
3055 VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND,
3056 VISIT_TYPEDEF_TYPE_LITERAL_PREFIX,
3057 VISIT_TYPEDEF_TYPE_LITERAL_POSTFIX,
3058
3059 VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET,
3060 VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET,
3061 VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE,
3062 VISIT_TYPE_VARIABLE_TYPE_LITERAL_BINARY,
3063 VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND,
3064 VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX,
3065 VISIT_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX,
3066
3067 VISIT_DYNAMIC_TYPE_LITERAL_GET,
3068 VISIT_DYNAMIC_TYPE_LITERAL_SET,
3069 VISIT_DYNAMIC_TYPE_LITERAL_INVOKE,
3070 VISIT_DYNAMIC_TYPE_LITERAL_BINARY,
3071 VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND,
3072 VISIT_DYNAMIC_TYPE_LITERAL_PREFIX,
3073 VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX,
3074
3075 VISIT_INDEX_SET,
3076 VISIT_COMPOUND_INDEX_SET,
3077 VISIT_SUPER_INDEX_SET,
3078 VISIT_SUPER_COMPOUND_INDEX_SET,
3079
3080 VISIT_ASSERT,
3081 VISIT_LAZY_AND,
3082 VISIT_LAZY_OR,
3083 VISIT_IS,
3084 VISIT_IS_NOT,
3085 VISIT_AS,
3086 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698