| Index: tests/compiler/dart2js/semantic_visitor_test.dart
|
| diff --git a/tests/compiler/dart2js/semantic_visitor_test.dart b/tests/compiler/dart2js/semantic_visitor_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3dc0c0aeee68075f64ecdf5b29d057a59ad3cf3a
|
| --- /dev/null
|
| +++ b/tests/compiler/dart2js/semantic_visitor_test.dart
|
| @@ -0,0 +1,3242 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library dart2js.semantics_visitor_test;
|
| +
|
| +import 'package:async_helper/async_helper.dart';
|
| +import 'package:expect/expect.dart';
|
| +import 'package:compiler/src/constants/expressions.dart';
|
| +import 'package:compiler/src/dart_types.dart';
|
| +import 'package:compiler/src/dart2jslib.dart';
|
| +import 'package:compiler/src/elements/elements.dart';
|
| +import 'package:compiler/src/resolution/resolution.dart';
|
| +import 'package:compiler/src/resolution/semantic_visitor.dart';
|
| +import 'package:compiler/src/resolution/operators.dart';
|
| +import 'package:compiler/src/tree/tree.dart';
|
| +import 'package:compiler/src/util/util.dart';
|
| +import 'memory_compiler.dart';
|
| +
|
| +class Visit {
|
| + final VisitKind method;
|
| + final element;
|
| + final rhs;
|
| + final arguments;
|
| + final receiver;
|
| + final name;
|
| + final expression;
|
| + final left;
|
| + final right;
|
| + final type;
|
| + final operator;
|
| + final index;
|
| + final getter;
|
| + final setter;
|
| + final constant;
|
| +
|
| + const Visit(this.method,
|
| + {this.element,
|
| + this.rhs,
|
| + this.arguments,
|
| + this.receiver,
|
| + this.name,
|
| + this.expression,
|
| + this.left,
|
| + this.right,
|
| + this.type,
|
| + this.operator,
|
| + this.index,
|
| + this.getter,
|
| + this.setter,
|
| + this.constant});
|
| +
|
| + int get hashCode => toString().hashCode;
|
| +
|
| + bool operator ==(other) => '$this' == '$other';
|
| +
|
| + String toString() {
|
| + StringBuffer sb = new StringBuffer();
|
| + sb.write('method=$method');
|
| + if (element != null) {
|
| + sb.write(',element=$element');
|
| + }
|
| + if (rhs != null) {
|
| + sb.write(',rhs=$rhs');
|
| + }
|
| + if (arguments != null) {
|
| + sb.write(',arguments=$arguments');
|
| + }
|
| + if (receiver != null) {
|
| + sb.write(',receiver=$receiver');
|
| + }
|
| + if (name != null) {
|
| + sb.write(',name=$name');
|
| + }
|
| + if (expression != null) {
|
| + sb.write(',expression=$expression');
|
| + }
|
| + if (left != null) {
|
| + sb.write(',left=$left');
|
| + }
|
| + if (right != null) {
|
| + sb.write(',right=$right');
|
| + }
|
| + if (type != null) {
|
| + sb.write(',type=$type');
|
| + }
|
| + if (operator != null) {
|
| + sb.write(',operator=$operator');
|
| + }
|
| + if (index != null) {
|
| + sb.write(',index=$index');
|
| + }
|
| + if (getter != null) {
|
| + sb.write(',getter=$getter');
|
| + }
|
| + if (setter != null) {
|
| + sb.write(',setter=$setter');
|
| + }
|
| + if (constant != null) {
|
| + sb.write(',constant=$constant');
|
| + }
|
| + return sb.toString();
|
| + }
|
| +}
|
| +
|
| +class Test {
|
| + final String codeByPrefix;
|
| + final String code;
|
| + final /*Visit | List<Visit>*/ expectedVisits;
|
| + final String cls;
|
| +
|
| + const Test(this.code, this.expectedVisits)
|
| + : cls = null, codeByPrefix = null;
|
| + const Test.clazz(this.code, this.expectedVisits)
|
| + : cls = 'C', codeByPrefix = null;
|
| + const Test.prefix(this.codeByPrefix, this.code, this.expectedVisits)
|
| + : cls = null;
|
| +
|
| + String get method => 'm';
|
| +
|
| + String toString() {
|
| + StringBuffer sb = new StringBuffer();
|
| + sb.writeln();
|
| + sb.writeln(code);
|
| + if (codeByPrefix != null) {
|
| + sb.writeln('imported by prefix:');
|
| + sb.writeln(codeByPrefix);
|
| + }
|
| + return sb.toString();
|
| + }
|
| +}
|
| +
|
| +const List<Test> TESTS = const [
|
| + // Parameters
|
| + const Test('m(o) => o;',
|
| + const Visit(VisitKind.VISIT_PARAMETER_GET,
|
| + element: 'parameter(m#o)')),
|
| + const Test('m(o) { o = 42; }',
|
| + const Visit(VisitKind.VISIT_PARAMETER_SET,
|
| + element: 'parameter(m#o)',
|
| + rhs:'42')),
|
| + const Test('m(o) { o(null, 42); }',
|
| + const Visit(VisitKind.VISIT_PARAMETER_INVOKE,
|
| + element: 'parameter(m#o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Local variables
|
| + const Test('m() { var o; return o; }',
|
| + const Visit(VisitKind.VISIT_LOCAL_VARIABLE_GET,
|
| + element: 'variable(m#o)')),
|
| + const Test('m() { var o; o = 42; }',
|
| + const Visit(VisitKind.VISIT_LOCAL_VARIABLE_SET,
|
| + element: 'variable(m#o)',
|
| + rhs:'42')),
|
| + const Test('m() { var o; o(null, 42); }',
|
| + const Visit(VisitKind.VISIT_LOCAL_VARIABLE_INVOKE,
|
| + element: 'variable(m#o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Local functions
|
| + const Test('m() { o(a, b) {}; return o; }',
|
| + const Visit(VisitKind.VISIT_LOCAL_FUNCTION_GET,
|
| + element: 'function(m#o)')),
|
| + const Test('m() { o(a, b) {}; o(null, 42); }',
|
| + const Visit(VisitKind.VISIT_LOCAL_FUNCTION_INVOKE,
|
| + element: 'function(m#o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Static fields
|
| + const Test(
|
| + '''
|
| + class C { static var o; }
|
| + m() => C.o;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
|
| + element: 'field(C#o)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var o;
|
| + m() => o;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
|
| + element: 'field(C#o)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var o;
|
| + m() => C.o;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
|
| + element: 'field(C#o)')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static var o;
|
| + }
|
| + ''',
|
| + 'm() => p.C.o;',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_GET,
|
| + element: 'field(C#o)')),
|
| + const Test(
|
| + '''
|
| + class C { static var o; }
|
| + m() { C.o = 42; }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
|
| + element: 'field(C#o)',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var o;
|
| + m() { o = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
|
| + element: 'field(C#o)',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var o;
|
| + m() { C.o = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
|
| + element: 'field(C#o)',
|
| + rhs: '42')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static var o;
|
| + }
|
| + ''',
|
| + 'm() { p.C.o = 42; }',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_SET,
|
| + element: 'field(C#o)',
|
| + rhs: '42')),
|
| + const Test(
|
| + '''
|
| + class C { static var o; }
|
| + m() { C.o(null, 42); }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
|
| + element: 'field(C#o)',
|
| + arguments: '(null,42)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var o;
|
| + m() { o(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
|
| + element: 'field(C#o)',
|
| + arguments: '(null,42)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var o;
|
| + m() { C.o(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
|
| + element: 'field(C#o)',
|
| + arguments: '(null,42)')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static var o;
|
| + }
|
| + ''',
|
| + 'm() { p.C.o(null, 42); }',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
|
| + element: 'field(C#o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Static properties
|
| + const Test(
|
| + '''
|
| + class C {
|
| + static get o => null;
|
| + }
|
| + m() => C.o;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
|
| + element: 'getter(C#o)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get o => null;
|
| + m() => o;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
|
| + element: 'getter(C#o)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get o => null;
|
| + m() => C.o;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
|
| + element: 'getter(C#o)')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static get o => null;
|
| + }
|
| + ''',
|
| + 'm() => p.C.o;',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_GET,
|
| + element: 'getter(C#o)')),
|
| + const Test(
|
| + '''
|
| + class C { static set o(_) {} }
|
| + m() { C.o = 42; }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
|
| + element: 'setter(C#o)',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static set o(_) {}
|
| + m() { o = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
|
| + element: 'setter(C#o)',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static set o(_) {}
|
| + m() { C.o = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
|
| + element: 'setter(C#o)',
|
| + rhs: '42')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static set o(_) {}
|
| + }
|
| + ''',
|
| + 'm() { p.C.o = 42; }',
|
| + const Visit(VisitKind.VISIT_STATIC_SETTER_SET,
|
| + element: 'setter(C#o)',
|
| + rhs: '42')),
|
| + const Test(
|
| + '''
|
| + class C { static get o => null; }
|
| + m() => C.o(null, 42);
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
|
| + element: 'getter(C#o)',
|
| + arguments: '(null,42)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get o => null;
|
| + m() { o(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
|
| + element: 'getter(C#o)',
|
| + arguments: '(null,42)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get o => null;
|
| + m() { C.o(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
|
| + element: 'getter(C#o)',
|
| + arguments: '(null,42)')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static get o => null;
|
| + }
|
| + ''',
|
| + 'm() { p.C.o(null, 42); }',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
|
| + element: 'getter(C#o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Static functions
|
| + const Test(
|
| + '''
|
| + class C { static o(a, b) {} }
|
| + m() => C.o;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
|
| + element: 'function(C#o)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static o(a, b) {}
|
| + m() => o;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
|
| + element: 'function(C#o)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static o(a, b) {}
|
| + m() => C.o;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
|
| + element: 'function(C#o)')),
|
| + const Test.prefix(
|
| + '''
|
| + class C { static o(a, b) {} }
|
| + ''',
|
| + '''
|
| + m() => p.C.o;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
|
| + element: 'function(C#o)')),
|
| + const Test(
|
| + '''
|
| + class C { static o(a, b) {} }
|
| + m() => C.o(null, 42);
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
|
| + element: 'function(C#o)',
|
| + arguments: '(null,42)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static o(a, b) {}
|
| + m() { o(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
|
| + element: 'function(C#o)',
|
| + arguments: '(null,42)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static o(a, b) {}
|
| + m() { C.o(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
|
| + element: 'function(C#o)',
|
| + arguments: '(null,42)')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static o(a, b) {}
|
| + }
|
| + ''',
|
| + 'm() { p.C.o(null, 42); }',
|
| + const Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
|
| + element: 'function(C#o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Top level fields
|
| + const Test(
|
| + '''
|
| + var o;
|
| + m() => o;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET,
|
| + element: 'field(o)')),
|
| + const Test.prefix(
|
| + '''
|
| + var o;
|
| + ''',
|
| + 'm() => p.o;',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET,
|
| + element: 'field(o)')),
|
| + const Test(
|
| + '''
|
| + var o;
|
| + m() { o = 42; }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET,
|
| + element: 'field(o)',
|
| + rhs: '42')),
|
| + const Test.prefix(
|
| + '''
|
| + var o;
|
| + ''',
|
| + 'm() { p.o = 42; }',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET,
|
| + element: 'field(o)',
|
| + rhs: '42')),
|
| + const Test(
|
| + '''
|
| + var o;
|
| + m() { o(null, 42); }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE,
|
| + element: 'field(o)',
|
| + arguments: '(null,42)')),
|
| + const Test.prefix(
|
| + '''
|
| + var o;
|
| + ''',
|
| + 'm() { p.o(null, 42); }',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE,
|
| + element: 'field(o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Top level properties
|
| + const Test(
|
| + '''
|
| + get o => null;
|
| + m() => o;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET,
|
| + element: 'getter(o)')),
|
| + const Test.prefix(
|
| + '''
|
| + get o => null;
|
| + ''',
|
| + '''
|
| + m() => p.o;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET,
|
| + element: 'getter(o)')),
|
| + const Test(
|
| + '''
|
| + set o(_) {}
|
| + m() { o = 42; }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET,
|
| + element: 'setter(o)',
|
| + rhs: '42')),
|
| + const Test.prefix(
|
| + '''
|
| + set o(_) {}
|
| + ''',
|
| + 'm() { p.o = 42; }',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET,
|
| + element: 'setter(o)',
|
| + rhs: '42')),
|
| + const Test(
|
| + '''
|
| + get o => null;
|
| + m() => o(null, 42);
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE,
|
| + element: 'getter(o)',
|
| + arguments: '(null,42)')),
|
| + const Test.prefix(
|
| + '''
|
| + get o => null;
|
| + ''',
|
| + 'm() { p.o(null, 42); }',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE,
|
| + element: 'getter(o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Top level functions
|
| + const Test(
|
| + '''
|
| + o(a, b) {}
|
| + m() => o;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_GET,
|
| + element: 'function(o)')),
|
| + const Test(
|
| + '''
|
| + o(a, b) {}
|
| + m() => o(null, 42);
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE,
|
| + element: 'function(o)',
|
| + arguments: '(null,42)')),
|
| + const Test.prefix(
|
| + '''
|
| + o(a, b) {}
|
| + ''',
|
| + 'm() { p.o(null, 42); }',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE,
|
| + element: 'function(o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Dynamic properties
|
| + const Test('m(o) => o.foo;',
|
| + const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET,
|
| + receiver: 'o',
|
| + name: 'foo')),
|
| + const Test('m(o) { o.foo = 42; }',
|
| + const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET,
|
| + receiver: 'o',
|
| + name: 'foo',
|
| + rhs: '42')),
|
| + const Test('m(o) { o.foo(null, 42); }',
|
| + const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE,
|
| + receiver: 'o',
|
| + name: 'foo',
|
| + arguments: '(null,42)')),
|
| +
|
| + // This access
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + m() => this;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_GET)),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + call(a, b) {}
|
| + m() { this(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_INVOKE,
|
| + arguments: '(null,42)')),
|
| +
|
| + // This properties
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var foo;
|
| + m() => foo;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
|
| + name: 'foo')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var foo;
|
| + m() => this.foo;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
|
| + name: 'foo')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + get foo => null;
|
| + m() => foo;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
|
| + name: 'foo')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + get foo => null;
|
| + m() => this.foo;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
|
| + name: 'foo')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var foo;
|
| + m() { foo = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
|
| + name: 'foo',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var foo;
|
| + m() { this.foo = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
|
| + name: 'foo',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + set foo(_) {}
|
| + m() { foo = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
|
| + name: 'foo',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + set foo(_) {}
|
| + m() { this.foo = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
|
| + name: 'foo',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var foo;
|
| + m() { foo(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE,
|
| + name: 'foo',
|
| + arguments: '(null,42)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var foo;
|
| + m() { this.foo(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE,
|
| + name: 'foo',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Super fields
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + var o;
|
| + }
|
| + class C extends B {
|
| + m() => super.o;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_GET,
|
| + element: 'field(B#o)')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + var o;
|
| + }
|
| + class C extends B {
|
| + m() { super.o = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_SET,
|
| + element: 'field(B#o)',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + var o;
|
| + }
|
| + class C extends B {
|
| + m() { super.o(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE,
|
| + element: 'field(B#o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Super properties
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + get o => null;
|
| + }
|
| + class C extends B {
|
| + m() => super.o;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_GET,
|
| + element: 'getter(B#o)')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + set o(_) {}
|
| + }
|
| + class C extends B {
|
| + m() { super.o = 42; }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_SETTER_SET,
|
| + element: 'setter(B#o)',
|
| + rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + get o => null;
|
| + }
|
| + class C extends B {
|
| + m() { super.o(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_INVOKE,
|
| + element: 'getter(B#o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Super methods
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + o(a, b) {}
|
| + }
|
| + class C extends B {
|
| + m() => super.o;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_METHOD_GET,
|
| + element: 'function(B#o)')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + o(a, b) {}
|
| + }
|
| + class C extends B {
|
| + m() { super.o(null, 42); }
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_METHOD_INVOKE,
|
| + element: 'function(B#o)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Expression invoke
|
| + const Test('m() => (a, b){}(null, 42);',
|
| + const Visit(VisitKind.VISIT_EXPRESSION_INVOKE,
|
| + receiver: '(a,b){}',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Class type literals
|
| + const Test(
|
| + '''
|
| + class C {}
|
| + m() => C;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET,
|
| + constant: 'C')),
|
| + const Test(
|
| + '''
|
| + class C {}
|
| + m() => C(null, 42);
|
| + ''',
|
| + const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE,
|
| + constant: 'C',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Typedef type literals
|
| + const Test(
|
| + '''
|
| + typedef F();
|
| + m() => F;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET,
|
| + constant: 'F')),
|
| + const Test(
|
| + '''
|
| + typedef F();
|
| + m() => F(null, 42);
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE,
|
| + constant: 'F',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Type variable type literals
|
| + const Test.clazz(
|
| + '''
|
| + class C<T> {
|
| + m() => T;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET,
|
| + element: 'type_variable(C#T)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C<T> {
|
| + m() => T(null, 42);
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE,
|
| + element: 'type_variable(C#T)',
|
| + arguments: '(null,42)')),
|
| +
|
| + // Dynamic type literals
|
| + const Test(
|
| + '''
|
| + m() => dynamic;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET,
|
| + constant: 'dynamic')),
|
| + // TODO(johnniwinther): Enable this when we pass the right constant.
|
| + // Currently we generated the constant for `Type` instead of `dynamic`.
|
| + /*const Test(
|
| + '''
|
| + m() { dynamic(null, 42); }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE,
|
| + constant: 'dynamic',
|
| + arguments: '(null,42)')),*/
|
| +
|
| + // Assert
|
| + const Test(
|
| + '''
|
| + m() { assert(false); }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_ASSERT, expression: 'false')),
|
| +
|
| + // Logical and
|
| + const Test(
|
| + '''
|
| + m() => true && false;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_LOGICAL_AND, left: 'true', right: 'false')),
|
| +
|
| + // Logical or
|
| + const Test(
|
| + '''
|
| + m() => true || false;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_LOGICAL_OR, left: 'true', right: 'false')),
|
| +
|
| + // Is test
|
| + const Test(
|
| + '''
|
| + class C {}
|
| + m() => 0 is C;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_IS, expression: '0', type: 'C')),
|
| +
|
| + // Is not test
|
| + const Test(
|
| + '''
|
| + class C {}
|
| + m() => 0 is! C;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_IS_NOT, expression: '0', type: 'C')),
|
| +
|
| + // Is test
|
| + const Test(
|
| + '''
|
| + class C {}
|
| + m() => 0 as C;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_AS, expression: '0', type: 'C')),
|
| +
|
| + // Binary operators
|
| + const Test(
|
| + '''
|
| + m() => 2 + 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '+', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 - 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '-', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 * 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '*', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 / 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '/', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 ~/ 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '~/', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 % 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '%', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 << 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '<<', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 >> 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '>>', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 <= 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '<=', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 < 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '<', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 >= 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '>=', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 > 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '>', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 & 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '&', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 | 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '|', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2 ^ 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '^', right: '3')),
|
| + const Test(
|
| + '''
|
| + m() => 2[3];
|
| + ''',
|
| + const Visit(VisitKind.VISIT_BINARY,
|
| + left: '2', operator: '[]', right: '3')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + operator +(_) => null;
|
| + }
|
| + class C extends B {
|
| + m() => super + 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_BINARY,
|
| + element: 'function(B#+)',
|
| + operator: '+',
|
| + right: '42')),
|
| +
|
| + // Equals
|
| + const Test(
|
| + '''
|
| + m() => 2 == 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_EQUALS,
|
| + left: '2', right: '3')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + operator ==(_) => null;
|
| + }
|
| + class C extends B {
|
| + m() => super == 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_EQUALS,
|
| + element: 'function(B#==)',
|
| + right: '42')),
|
| +
|
| + // Not equals
|
| + const Test(
|
| + '''
|
| + m() => 2 != 3;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_NOT_EQUALS,
|
| + left: '2', right: '3')),
|
| + // TODO(johnniwinther): Enable this. Resolution does not store the element.
|
| + /*const Test.clazz(
|
| + '''
|
| + class B {
|
| + operator ==(_) => null;
|
| + }
|
| + class C extends B {
|
| + m() => super != 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_NOT_EQUALS,
|
| + element: 'function(B#==)',
|
| + right: '42')),*/
|
| +
|
| + // Unary expression
|
| + const Test(
|
| + '''
|
| + m() => -false;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_UNARY,
|
| + expression: 'false', operator: '-')),
|
| + const Test(
|
| + '''
|
| + m() => ~false;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_UNARY,
|
| + expression: 'false', operator: '~')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + operator -() => null;
|
| + }
|
| + class C extends B {
|
| + m() => -super;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_UNARY,
|
| + element: 'function(B#unary-)', operator: '-')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + operator ~() => null;
|
| + }
|
| + class C extends B {
|
| + m() => ~super;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_UNARY,
|
| + element: 'function(B#~)', operator: '~')),
|
| + const Test(
|
| + '''
|
| + m() => !0;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_NOT, expression: '0')),
|
| +
|
| + // Index set
|
| + const Test(
|
| + '''
|
| + m() => 0[1] = 2;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_INDEX_SET,
|
| + receiver: '0', index: '1', rhs: '2')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + operator []=(a, b) {}
|
| + }
|
| + class C extends B {
|
| + m() => super[1] = 2;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_INDEX_SET,
|
| + element: 'function(B#[]=)', index: '1', rhs: '2')),
|
| +
|
| + // Compound assignment
|
| + const Test(
|
| + '''
|
| + m(a) => a.b += 42;
|
| + ''',
|
| + const [
|
| + const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND,
|
| + receiver: 'a', operator: '+=', rhs: '42',
|
| + getter: 'Selector(getter, b, arity=0)',
|
| + setter: 'Selector(setter, b, arity=1)'),
|
| + const Visit(VisitKind.VISIT_PARAMETER_GET,
|
| + element: 'parameter(m#a)')
|
| + ]),
|
| + // TODO(johnniwinther): Enable this when type literals are recognized in
|
| + // SendSet.
|
| + /*const Test(
|
| + '''
|
| + class C {}
|
| + m(a) => C += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND,
|
| + constant: 'C', operator: '+=', rhs: '42')),
|
| + const Test(
|
| + '''
|
| + typedef F();
|
| + m(a) => F += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND,
|
| + constant: 'F', operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C<T> {
|
| + m(a) => T += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND,
|
| + element: 'type_variable(C#T)', operator: '+=', rhs: '42')),
|
| + const Test(
|
| + '''
|
| + m(a) => dynamic += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND,
|
| + constant: 'dynamic',
|
| + operator: '+=', rhs: '42')),*/
|
| + const Test(
|
| + '''
|
| + m(a) => a += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_PARAMETER_COMPOUND,
|
| + element: 'parameter(m#a)', operator: '+=', rhs: '42')),
|
| + const Test(
|
| + '''
|
| + m() {
|
| + var a;
|
| + a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_LOCAL_VARIABLE_COMPOUND,
|
| + element: 'variable(m#a)', operator: '+=', rhs: '42')),
|
| + const Test(
|
| + '''
|
| + var a;
|
| + m() => a += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_COMPOUND,
|
| + element: 'field(a)', operator: '+=', rhs: '42')),
|
| + const Test(
|
| + '''
|
| + get a => 0;
|
| + set a(_) {}
|
| + m() => a += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND,
|
| + getter: 'getter(a)', setter: 'setter(a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + }
|
| + m() => C.a += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
|
| + element: 'field(C#a)', operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + m() => C.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
|
| + element: 'field(C#a)', operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + m() => a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
|
| + element: 'field(C#a)', operator: '+=', rhs: '42')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + }
|
| + ''',
|
| + '''
|
| + m() => p.C.a += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
|
| + element: 'field(C#a)', operator: '+=', rhs: '42')),
|
| + const Test(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + }
|
| + m() => C.a += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + m() => C.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + m() => a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + }
|
| + ''',
|
| + '''
|
| + m() => p.C.a += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '+=', rhs: '42')),
|
| + // TODO(johnniwinther): Enable these when dart2js supports method and setter
|
| + // with the same name.
|
| + /*const Test(
|
| + '''
|
| + class C {
|
| + static a() {}
|
| + static set a(_) {}
|
| + }
|
| + m() => C.a += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
|
| + getter: 'function(C#a)', setter: 'setter(C#a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static a() {}
|
| + static set a(_) {}
|
| + m() => C.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
|
| + getter: 'function(C#a)', setter: 'setter(C#a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static a() {}
|
| + static set a(_) {}
|
| + m() => a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
|
| + getter: 'function(C#a)', setter: 'setter(C#a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static a() {}
|
| + static set a(_) {}
|
| + }
|
| + ''',
|
| + '''
|
| + m() => p.C.a += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
|
| + getter: 'function(C#a)', setter: 'setter(C#a)',
|
| + operator: '+=', rhs: '42')),*/
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var a;
|
| + m() => a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_COMPOUND,
|
| + operator: '+=', rhs: '42',
|
| + getter: 'Selector(getter, a, arity=0)',
|
| + setter: 'Selector(setter, a, arity=1)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var a = 0;
|
| + m() => this.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_COMPOUND,
|
| + operator: '+=', rhs: '42',
|
| + getter: 'Selector(getter, a, arity=0)',
|
| + setter: 'Selector(setter, a, arity=1)')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + var a = 0;
|
| + }
|
| + class C extends B {
|
| + m() => super.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_COMPOUND,
|
| + element: 'field(B#a)', operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + get a => 0;
|
| + set a (_) {}
|
| + }
|
| + class C extends B {
|
| + m() => super.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND,
|
| + getter: 'getter(B#a)', setter: 'setter(B#a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class A {
|
| + get a => 0;
|
| + }
|
| + class B extends A {
|
| + set a (_) {}
|
| + }
|
| + class C extends B {
|
| + m() => super.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND,
|
| + getter: 'getter(A#a)', setter: 'setter(B#a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class A {
|
| + var a;
|
| + }
|
| + class B extends A {
|
| + get a => 0;
|
| + }
|
| +
|
| + class C extends B {
|
| + m() => super.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_COMPOUND,
|
| + getter: 'getter(B#a)', setter: 'field(A#a)',
|
| + operator: '+=', rhs: '42')),
|
| + const Test.clazz(
|
| + '''
|
| + class A {
|
| + var a;
|
| + }
|
| + class B extends A {
|
| + set a(_) {}
|
| + }
|
| +
|
| + class C extends B {
|
| + m() => super.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_COMPOUND,
|
| + getter: 'field(A#a)', setter: 'setter(B#a)',
|
| + operator: '+=', rhs: '42')),
|
| + // TODO(johnniwinther): Enable this when dart2js supports shadow setters.
|
| + /*const Test.clazz(
|
| + '''
|
| + class A {
|
| + var a;
|
| + }
|
| + class B extends A {
|
| + final a;
|
| + }
|
| +
|
| + class C extends B {
|
| + m() => super.a += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_FIELD_COMPOUND,
|
| + getter: 'field(B#a)', setter: 'field(A#a)',
|
| + operator: '+=', rhs: '42')),*/
|
| +
|
| + // Compound index assignment
|
| + const Test(
|
| + '''
|
| + m() => 0[1] += 42;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_COMPOUND_INDEX_SET,
|
| + receiver: '0', index: '1', operator: '+=', rhs: '42')),
|
| + // TODO(johnniwinther): Enable this when the getter element is stored.
|
| + /*const Test.clazz(
|
| + '''
|
| + class B {
|
| + operator [](_) {}
|
| + operator []=(a, b) {}
|
| + }
|
| + class C extends B {
|
| + m() => super[1] += 42;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET,
|
| + getter: 'function(B#[])', setter: 'function(B#[]=)',
|
| + index: '1', operator: '+=', rhs: '42')),*/
|
| +
|
| + // Prefix expression
|
| + const Test(
|
| + '''
|
| + m(a) => --a.b;
|
| + ''',
|
| + const [
|
| + const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX,
|
| + receiver: 'a', operator: '--',
|
| + getter: 'Selector(getter, b, arity=0)',
|
| + setter: 'Selector(setter, b, arity=1)'),
|
| + const Visit(VisitKind.VISIT_PARAMETER_GET,
|
| + element: 'parameter(m#a)')
|
| + ]),
|
| + const Test(
|
| + '''
|
| + m(a) => ++a;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_PARAMETER_PREFIX,
|
| + element: 'parameter(m#a)', operator: '++')),
|
| + const Test(
|
| + '''
|
| + m() {
|
| + var a;
|
| + --a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_LOCAL_VARIABLE_PREFIX,
|
| + element: 'variable(m#a)', operator: '--')),
|
| + const Test(
|
| + '''
|
| + var a;
|
| + m() => ++a;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_PREFIX,
|
| + element: 'field(a)', operator: '++')),
|
| + const Test(
|
| + '''
|
| + get a => 0;
|
| + set a(_) {}
|
| + m() => --a;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX,
|
| + getter: 'getter(a)', setter: 'setter(a)',
|
| + operator: '--')),
|
| + const Test(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + }
|
| + m() => ++C.a;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
|
| + element: 'field(C#a)', operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + m() => ++C.a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
|
| + element: 'field(C#a)', operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + m() => --a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
|
| + element: 'field(C#a)', operator: '--')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + }
|
| + ''',
|
| + '''
|
| + m() => --p.C.a;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
|
| + element: 'field(C#a)', operator: '--')),
|
| + const Test(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + }
|
| + m() => ++C.a;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + m() => --C.a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '--')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + m() => --a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '--')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + }
|
| + ''',
|
| + '''
|
| + m() => ++p.C.a;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var a;
|
| + m() => --a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX,
|
| + operator: '--',
|
| + getter: 'Selector(getter, a, arity=0)',
|
| + setter: 'Selector(setter, a, arity=1)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var a = 0;
|
| + m() => ++this.a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX,
|
| + operator: '++',
|
| + getter: 'Selector(getter, a, arity=0)',
|
| + setter: 'Selector(setter, a, arity=1)')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + var a = 0;
|
| + }
|
| + class C extends B {
|
| + m() => --super.a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_PREFIX,
|
| + element: 'field(B#a)', operator: '--')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + get a => 0;
|
| + set a (_) {}
|
| + }
|
| + class C extends B {
|
| + m() => --super.a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX,
|
| + getter: 'getter(B#a)', setter: 'setter(B#a)',
|
| + operator: '--')),
|
| + const Test.clazz(
|
| + '''
|
| + class A {
|
| + get a => 0;
|
| + }
|
| + class B extends A {
|
| + set a (_) {}
|
| + }
|
| + class C extends B {
|
| + m() => ++super.a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX,
|
| + getter: 'getter(A#a)', setter: 'setter(B#a)',
|
| + operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class A {
|
| + var a;
|
| + }
|
| + class B extends A {
|
| + get a => 0;
|
| + }
|
| +
|
| + class C extends B {
|
| + m() => --super.a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_PREFIX,
|
| + getter: 'getter(B#a)', setter: 'field(A#a)',
|
| + operator: '--')),
|
| + const Test.clazz(
|
| + '''
|
| + class A {
|
| + var a;
|
| + }
|
| + class B extends A {
|
| + set a(_) {}
|
| + }
|
| +
|
| + class C extends B {
|
| + m() => ++super.a;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_PREFIX,
|
| + getter: 'field(A#a)', setter: 'setter(B#a)',
|
| + operator: '++')),
|
| +
|
| + // Prefix expression
|
| + const Test(
|
| + '''
|
| + m(a) => a.b--;
|
| + ''',
|
| + const [
|
| + const Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX,
|
| + receiver: 'a', operator: '--',
|
| + getter: 'Selector(getter, b, arity=0)',
|
| + setter: 'Selector(setter, b, arity=1)'),
|
| + const Visit(VisitKind.VISIT_PARAMETER_GET,
|
| + element: 'parameter(m#a)')
|
| + ]),
|
| + const Test(
|
| + '''
|
| + m(a) => a++;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_PARAMETER_POSTFIX,
|
| + element: 'parameter(m#a)', operator: '++')),
|
| + const Test(
|
| + '''
|
| + m() {
|
| + var a;
|
| + a--;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_LOCAL_VARIABLE_POSTFIX,
|
| + element: 'variable(m#a)', operator: '--')),
|
| + const Test(
|
| + '''
|
| + var a;
|
| + m() => a++;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_POSTFIX,
|
| + element: 'field(a)', operator: '++')),
|
| + const Test(
|
| + '''
|
| + get a => 0;
|
| + set a(_) {}
|
| + m() => a--;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX,
|
| + getter: 'getter(a)', setter: 'setter(a)',
|
| + operator: '--')),
|
| + const Test(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + }
|
| + m() => C.a++;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
|
| + element: 'field(C#a)', operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + m() => C.a++;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
|
| + element: 'field(C#a)', operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + m() => a--;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
|
| + element: 'field(C#a)', operator: '--')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static var a;
|
| + }
|
| + ''',
|
| + '''
|
| + m() => p.C.a--;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
|
| + element: 'field(C#a)', operator: '--')),
|
| + const Test(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + }
|
| + m() => C.a++;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + m() => C.a--;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '--')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + m() => a--;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '--')),
|
| + const Test.prefix(
|
| + '''
|
| + class C {
|
| + static get a => 0;
|
| + static set a(_) {}
|
| + }
|
| + ''',
|
| + '''
|
| + m() => p.C.a++;
|
| + ''',
|
| + const Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
|
| + getter: 'getter(C#a)', setter: 'setter(C#a)',
|
| + operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var a;
|
| + m() => a--;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX,
|
| + operator: '--',
|
| + getter: 'Selector(getter, a, arity=0)',
|
| + setter: 'Selector(setter, a, arity=1)')),
|
| + const Test.clazz(
|
| + '''
|
| + class C {
|
| + var a = 0;
|
| + m() => this.a++;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX,
|
| + operator: '++',
|
| + getter: 'Selector(getter, a, arity=0)',
|
| + setter: 'Selector(setter, a, arity=1)')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + var a = 0;
|
| + }
|
| + class C extends B {
|
| + m() => super.a--;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_POSTFIX,
|
| + element: 'field(B#a)', operator: '--')),
|
| + const Test.clazz(
|
| + '''
|
| + class B {
|
| + get a => 0;
|
| + set a (_) {}
|
| + }
|
| + class C extends B {
|
| + m() => super.a--;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX,
|
| + getter: 'getter(B#a)', setter: 'setter(B#a)',
|
| + operator: '--')),
|
| + const Test.clazz(
|
| + '''
|
| + class A {
|
| + get a => 0;
|
| + }
|
| + class B extends A {
|
| + set a (_) {}
|
| + }
|
| + class C extends B {
|
| + m() => super.a++;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX,
|
| + getter: 'getter(A#a)', setter: 'setter(B#a)',
|
| + operator: '++')),
|
| + const Test.clazz(
|
| + '''
|
| + class A {
|
| + var a;
|
| + }
|
| + class B extends A {
|
| + get a => 0;
|
| + }
|
| +
|
| + class C extends B {
|
| + m() => super.a--;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_POSTFIX,
|
| + getter: 'getter(B#a)', setter: 'field(A#a)',
|
| + operator: '--')),
|
| + const Test.clazz(
|
| + '''
|
| + class A {
|
| + var a;
|
| + }
|
| + class B extends A {
|
| + set a(_) {}
|
| + }
|
| +
|
| + class C extends B {
|
| + m() => super.a++;
|
| + }
|
| + ''',
|
| + const Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_POSTFIX,
|
| + getter: 'field(A#a)', setter: 'setter(B#a)',
|
| + operator: '++')),
|
| +
|
| +];
|
| +
|
| +main() {
|
| + Map<String, String> sourceFiles = {};
|
| + Map<String, Test> testMap = {};
|
| + StringBuffer mainSource = new StringBuffer();
|
| + int index = 0;
|
| + TESTS.forEach((Test test) {
|
| + StringBuffer testSource = new StringBuffer();
|
| + if (test.codeByPrefix != null) {
|
| + String prefixFilename = 'pre$index.dart';
|
| + sourceFiles[prefixFilename] = test.codeByPrefix;
|
| + testSource.writeln("import '$prefixFilename' as p;");
|
| + }
|
| +
|
| + String filename = 'lib$index.dart';
|
| + testSource.writeln(test.code);
|
| + sourceFiles[filename] = testSource.toString();
|
| + mainSource.writeln("import '$filename';");
|
| + testMap[filename] = test;
|
| + index++;
|
| + });
|
| + mainSource.writeln("main() {}");
|
| + sourceFiles['main.dart'] = mainSource.toString();
|
| +
|
| + asyncTest(() {
|
| + Compiler compiler = compilerFor(sourceFiles,
|
| + options: ['--analyze-all', '--analyze-only']);
|
| + return compiler.run(Uri.parse('memory:main.dart')).then((_) {
|
| + testMap.forEach((String filename, Test test) {
|
| + LibraryElement library = compiler.libraryLoader.lookupLibrary(
|
| + Uri.parse('memory:$filename'));
|
| + var expectedVisits = test.expectedVisits;
|
| + if (expectedVisits is! List) {
|
| + expectedVisits = [expectedVisits];
|
| + }
|
| + AstElement element;
|
| + String cls = test.cls;
|
| + String method = test.method;
|
| + if (cls == null) {
|
| + element = library.find(method);
|
| + } else {
|
| + ClassElement classElement = library.find(cls);
|
| + Expect.isNotNull(classElement,
|
| + "Class '$cls' not found in:\n"
|
| + "${library.compilationUnit.script.text}");
|
| + element = classElement.localLookup(method);
|
| + }
|
| + Expect.isNotNull(element, "Element '$method' not found in:\n"
|
| + "${library.compilationUnit.script.text}");
|
| + ResolvedAst resolvedAst = element.resolvedAst;
|
| + SemanticTestVisitor visitor =
|
| + new SemanticTestVisitor(resolvedAst.elements);
|
| + try {
|
| + compiler.withCurrentElement(resolvedAst.element, () {
|
| + //print(resolvedAst.node.toDebugString());
|
| + resolvedAst.node.accept(visitor);
|
| + });
|
| + } catch (e, s) {
|
| + Expect.fail("$e:\n$s\nIn test:\n"
|
| + "${library.compilationUnit.script.text}");
|
| + }
|
| + Expect.listEquals(expectedVisits, visitor.visits,
|
| + "In test:\n"
|
| + "${library.compilationUnit.script.text}");
|
| + });
|
| + });
|
| + });
|
| +}
|
| +
|
| +
|
| +class SemanticTestVisitor extends SemanticVisitor with SemanticSendVisitor {
|
| + List<Visit> visits = <Visit>[];
|
| +
|
| + SemanticTestVisitor(TreeElements elements) : super(elements);
|
| +
|
| + apply(Node node, arg) => node.accept(this);
|
| +
|
| + internalError(Spannable spannable, String message) {
|
| + throw new SpannableAssertionFailure(spannable, message);
|
| + }
|
| +
|
| + SemanticSendVisitor get sendVisitor => this;
|
| +
|
| + @override
|
| + visitNode(Node node) {
|
| + node.visitChildren(this);
|
| + }
|
| +
|
| + @override
|
| + visitAs(Send node, Node expression, DartType type, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_AS,
|
| + expression: expression, type: type));
|
| + apply(expression, arg);
|
| + }
|
| +
|
| + @override
|
| + visitAssert(Send node, Node expression, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_ASSERT, expression: expression));
|
| + apply(expression, arg);
|
| + }
|
| +
|
| + @override
|
| + errorInvalidAssert(Send node, NodeList arguments, arg) {
|
| + // TODO: implement errorAssert
|
| + }
|
| +
|
| + @override
|
| + visitBinary(Send node, Node left, BinaryOperator operator, Node right, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_BINARY,
|
| + left: left, operator: operator, right: right));
|
| + apply(left, arg);
|
| + apply(right, arg);
|
| + }
|
| +
|
| + @override
|
| + visitClassTypeLiteralGet(Send node, TypeConstantExpression constant, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_GET,
|
| + constant: constant.getText()));
|
| + }
|
| +
|
| + @override
|
| + visitClassTypeLiteralInvoke(Send node, TypeConstantExpression constant, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE,
|
| + constant: constant.getText(), arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + errorClassTypeLiteralSet(SendSet node, TypeConstantExpression constant, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_INVOKE,
|
| + constant: constant.getText(), rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitNotEquals(Send node, Node left, Node right, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_NOT_EQUALS,
|
| + left: left, right: right));
|
| + apply(left, arg);
|
| + apply(right, arg);
|
| + }
|
| +
|
| + @override
|
| + visitDynamicPropertyPrefix(Send node, Node receiver, IncDecOperator operator, Selector getterSelector, Selector setterSelector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_PREFIX,
|
| + receiver: receiver, operator: operator,
|
| + getter: getterSelector, setter: setterSelector));
|
| + apply(receiver, arg);
|
| + }
|
| +
|
| + @override
|
| + visitDynamicPropertyPostfix(Send node, Node receiver, IncDecOperator operator, Selector getterSelector, Selector setterSelector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_POSTFIX,
|
| + receiver: receiver, operator: operator,
|
| + getter: getterSelector, setter: setterSelector));
|
| + apply(receiver, arg);
|
| + }
|
| +
|
| + @override
|
| + visitDynamicPropertyGet(Send node, Node receiver, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_GET,
|
| + receiver: receiver, name: selector.name));
|
| + }
|
| +
|
| + @override
|
| + visitDynamicPropertyInvoke(Send node, Node receiver, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_INVOKE,
|
| + receiver: receiver, name: selector.name, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitDynamicPropertySet(SendSet node, Node receiver, Selector selector, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_SET,
|
| + receiver: receiver, name: selector.name, rhs: rhs));
|
| + }
|
| +
|
| + @override
|
| + visitDynamicTypeLiteralGet(Send node, TypeConstantExpression constant, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_GET,
|
| + constant: constant.getText()));
|
| + }
|
| +
|
| + @override
|
| + visitDynamicTypeLiteralInvoke(Send node, TypeConstantExpression constant, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_INVOKE,
|
| + constant: constant.getText(), arguments: arguments));
|
| + }
|
| +
|
| + @override
|
| + errorDynamicTypeLiteralSet(Send node, TypeConstantExpression constant, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_SET,
|
| + rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitExpressionInvoke(Send node, Node expression, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_EXPRESSION_INVOKE,
|
| + receiver: expression, arguments: arguments));
|
| + }
|
| +
|
| + @override
|
| + visitIs(Send node, Node expression, DartType type, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_IS,
|
| + expression: expression, type: type));
|
| + apply(expression, arg);
|
| + }
|
| +
|
| + @override
|
| + visitIsNot(Send node, Node expression, DartType type, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_IS_NOT,
|
| + expression: expression, type: type));
|
| + apply(expression, arg);
|
| + }
|
| +
|
| + @override
|
| + visitLogicalAnd(Send node, Node left, Node right, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOGICAL_AND,
|
| + left: left, right: right));
|
| + apply(left, arg);
|
| + apply(right, arg);
|
| + }
|
| +
|
| + @override
|
| + visitLogicalOr(Send node, Node left, Node right, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOGICAL_OR,
|
| + left: left, right: right));
|
| + apply(left, arg);
|
| + apply(right, arg);
|
| + }
|
| +
|
| + @override
|
| + visitLocalFunctionGet(Send node, LocalFunctionElement function, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOCAL_FUNCTION_GET, element: function));
|
| + }
|
| +
|
| + @override
|
| + visitLocalFunctionInvoke(Send node, LocalFunctionElement function, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOCAL_FUNCTION_INVOKE,
|
| + element: function, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitLocalVariableGet(Send node, LocalVariableElement variable, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_GET, element: variable));
|
| + }
|
| +
|
| + @override
|
| + visitLocalVariableInvoke(Send node, LocalVariableElement variable, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_INVOKE,
|
| + element: variable, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitLocalVariableSet(SendSet node, LocalVariableElement variable, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_SET,
|
| + element: variable, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitParameterGet(Send node, ParameterElement parameter, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_PARAMETER_GET, element: parameter));
|
| + }
|
| +
|
| + @override
|
| + visitParameterInvoke(Send node, ParameterElement parameter, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_PARAMETER_INVOKE,
|
| + element: parameter, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitParameterSet(SendSet node, ParameterElement parameter, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_PARAMETER_SET, element: parameter, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitStaticFieldGet(Send node, FieldElement field, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_GET, element: field));
|
| + }
|
| +
|
| + @override
|
| + visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_INVOKE,
|
| + element: field, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_SET,
|
| + element: field, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitStaticFunctionGet(Send node, MethodElement function, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_FUNCTION_GET,
|
| + element: function));
|
| + }
|
| +
|
| + @override
|
| + visitStaticFunctionInvoke(Send node, MethodElement function, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_FUNCTION_INVOKE,
|
| + element: function, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitStaticGetterGet(Send node, FunctionElement getter, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_GET,
|
| + element: getter));
|
| + }
|
| +
|
| + @override
|
| + visitStaticGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_INVOKE,
|
| + element: getter, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitStaticSetterSet(SendSet node, FunctionElement setter, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_SETTER_SET,
|
| + element: setter, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperBinary(Send node, FunctionElement function, BinaryOperator operator, Node argument, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_BINARY,
|
| + element: function, operator: operator, right: argument));
|
| + apply(argument, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperNotEquals(Send node, FunctionElement function, Node argument, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_NOT_EQUALS,
|
| + element: function, right: argument));
|
| + apply(argument, arg);
|
| + }
|
| +
|
| + @override
|
| + visitThisGet(Identifier node, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_THIS_GET));
|
| + }
|
| +
|
| + @override
|
| + visitThisInvoke(Send node, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_THIS_INVOKE, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitThisPropertyGet(Send node, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_GET,
|
| + name: selector.name));
|
| + }
|
| +
|
| + @override
|
| + visitThisPropertyInvoke(Send node, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_INVOKE,
|
| + name: selector.name, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitThisPropertySet(SendSet node, Selector selector, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_SET,
|
| + name: selector.name, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelFieldGet(Send node, FieldElement field, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_GET, element: field));
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_INVOKE,
|
| + element: field, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_SET,
|
| + element: field, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelFunctionGet(Send node, MethodElement function, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_GET,
|
| + element: function));
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelFunctionInvoke(Send node, MethodElement function, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FUNCTION_INVOKE,
|
| + element: function, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelGetterGet(Send node, FunctionElement getter, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_GET,
|
| + element: getter));
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_INVOKE,
|
| + element: getter, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelSetterSet(SendSet node, FunctionElement setter, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_SETTER_SET,
|
| + element: setter, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTypeVariableTypeLiteralGet(Send node, TypeVariableElement element, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET,
|
| + element: element));
|
| + }
|
| +
|
| + @override
|
| + visitTypeVariableTypeLiteralInvoke(Send node, TypeVariableElement element, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE,
|
| + element: element, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + errorTypeVariableTypeLiteralSet(SendSet node, TypeVariableElement element, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET,
|
| + element: element, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTypedefTypeLiteralGet(Send node, TypeConstantExpression constant, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_GET,
|
| + constant: constant.getText()));
|
| + }
|
| +
|
| + @override
|
| + visitTypedefTypeLiteralInvoke(Send node, TypeConstantExpression constant, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_INVOKE,
|
| + constant: constant.getText(), arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + errorTypedefTypeLiteralSet(SendSet node, TypeConstantExpression constant, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_SET,
|
| + constant: constant.getText(), rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitUnary(Send node, UnaryOperator operator, Node expression, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_UNARY,
|
| + expression: expression, operator: operator));
|
| + apply(expression, arg);
|
| + }
|
| +
|
| + @override
|
| + visitNot(Send node, Node expression, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_NOT, expression: expression));
|
| + apply(expression, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldGet(Send node, FieldElement field, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_GET, element: field));
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_INVOKE,
|
| + element: field, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SET,
|
| + element: field, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperMethodGet(Send node, MethodElement method, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_METHOD_GET, element: method));
|
| + }
|
| +
|
| + @override
|
| + visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_METHOD_INVOKE,
|
| + element: method, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperGetterGet(Send node, FunctionElement getter, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_GET, element: getter));
|
| + }
|
| +
|
| + @override
|
| + visitSuperGetterInvoke(Send node, FunctionElement getter, NodeList arguments, Selector selector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_INVOKE,
|
| + element: getter, arguments: arguments));
|
| + apply(arguments, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_SETTER_SET,
|
| + element: setter, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperUnary(Send node, UnaryOperator operator, FunctionElement function, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_UNARY,
|
| + element: function, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitEquals(Send node, Node left, Node right, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_EQUALS, left: left, right: right));
|
| + apply(left, arg);
|
| + apply(right, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperEquals(Send node, FunctionElement function, Node argument, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_EQUALS,
|
| + element: function, right: argument));
|
| + apply(argument, arg);
|
| + }
|
| +
|
| + @override
|
| + visitIndexSet(Send node, Node receiver, Node index, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_INDEX_SET,
|
| + receiver: receiver, index: index, rhs: rhs));
|
| + apply(receiver, arg);
|
| + apply(index, arg);
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperIndexSet(Send node, FunctionElement function, Node index, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_INDEX_SET,
|
| + element: function, index: index, rhs: rhs));
|
| + apply(index, arg);
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + errorFinalLocalVariableSet(SendSet node, LocalVariableElement variable, Node rhs, arg) {
|
| + // TODO: implement errorFinalLocalVariableSet
|
| + }
|
| +
|
| + @override
|
| + errorFinalParameterSet(SendSet node, ParameterElement parameter, Node rhs, arg) {
|
| + // TODO: implement errorFinalParameterSet
|
| + }
|
| +
|
| + @override
|
| + errorFinalStaticFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
|
| + // TODO: implement errorFinalStaticFieldSet
|
| + }
|
| +
|
| + @override
|
| + errorFinalSuperFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
|
| + // TODO: implement errorFinalSuperFieldSet
|
| + }
|
| +
|
| + @override
|
| + errorFinalTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, arg) {
|
| + // TODO: implement errorFinalTopLevelFieldSet
|
| + }
|
| +
|
| + @override
|
| + errorLocalFunctionSet(SendSet node, LocalFunctionElement function, Node rhs, arg) {
|
| + // TODO: implement errorLocalFunctionSet
|
| + }
|
| +
|
| + @override
|
| + errorStaticFunctionSet(Send node, MethodElement function, Node rhs, arg) {
|
| + // TODO: implement errorStaticFunctionSet
|
| + }
|
| +
|
| + @override
|
| + errorStaticGetterSet(SendSet node, FunctionElement getter, Node rhs, arg) {
|
| + // TODO: implement errorStaticGetterSet
|
| + }
|
| +
|
| + @override
|
| + errorStaticSetterGet(Send node, FunctionElement setter, arg) {
|
| + // TODO: implement errorStaticSetterGet
|
| + }
|
| +
|
| + @override
|
| + errorStaticSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, arg) {
|
| + // TODO: implement errorStaticSetterInvoke
|
| + }
|
| +
|
| + @override
|
| + errorSuperGetterSet(SendSet node, FunctionElement getter, Node rhs, arg) {
|
| + // TODO: implement errorSuperGetterSet
|
| + }
|
| +
|
| + @override
|
| + errorSuperMethodSet(Send node, MethodElement method, Node rhs, arg) {
|
| + // TODO: implement errorSuperMethodSet
|
| + }
|
| +
|
| + @override
|
| + errorSuperSetterGet(Send node, FunctionElement setter, arg) {
|
| + // TODO: implement errorSuperSetterGet
|
| + }
|
| +
|
| + @override
|
| + errorSuperSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, arg) {
|
| + // TODO: implement errorSuperSetterInvoke
|
| + }
|
| +
|
| + @override
|
| + errorTopLevelFunctionSet(Send node, MethodElement function, Node rhs, arg) {
|
| + // TODO: implement errorTopLevelFunctionSet
|
| + }
|
| +
|
| + @override
|
| + errorTopLevelGetterSet(SendSet node, FunctionElement getter, Node rhs, arg) {
|
| + // TODO: implement errorTopLevelGetterSet
|
| + }
|
| +
|
| + @override
|
| + errorTopLevelSetterGet(Send node, FunctionElement setter, arg) {
|
| + // TODO: implement errorTopLevelSetterGet
|
| + }
|
| +
|
| + @override
|
| + errorTopLevelSetterInvoke(Send node, FunctionElement setter, NodeList arguments, Selector selector, arg) {
|
| + // TODO: implement errorTopLevelSetterInvoke
|
| + }
|
| +
|
| + @override
|
| + visitDynamicPropertyCompound(Send node, Node receiver, AssignmentOperator operator, Node rhs, Selector getterSelector, Selector setterSelector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_PROPERTY_COMPOUND,
|
| + receiver: receiver, operator: operator, rhs: rhs,
|
| + getter: getterSelector, setter: setterSelector));
|
| + apply(receiver, arg);
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + errorFinalLocalVariableCompound(Send node, LocalVariableElement variable, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement errorFinalLocalVariableCompound
|
| + }
|
| +
|
| + @override
|
| + errorFinalParameterCompound(Send node, ParameterElement parameter, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement errorFinalParameterCompound
|
| + }
|
| +
|
| + @override
|
| + errorFinalStaticFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement errorFinalStaticFieldCompound
|
| + }
|
| +
|
| + @override
|
| + errorFinalSuperFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement errorFinalSuperFieldCompound
|
| + }
|
| +
|
| + @override
|
| + errorFinalTopLevelFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement errorFinalTopLevelFieldCompound
|
| + }
|
| +
|
| + @override
|
| + errorLocalFunctionCompound(Send node, LocalFunctionElement function, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement errorLocalFunctionCompound
|
| + }
|
| +
|
| + @override
|
| + visitLocalVariableCompound(Send node, LocalVariableElement variable, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_COMPOUND,
|
| + element: variable, operator: operator, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitParameterCompound(Send node, ParameterElement parameter, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_PARAMETER_COMPOUND,
|
| + element: parameter, operator: operator, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitStaticFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_COMPOUND,
|
| + element: field, operator: operator, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitStaticGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_COMPOUND,
|
| + operator: operator, rhs: rhs,
|
| + getter: getter, setter: setter));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_COMPOUND,
|
| + element: field, operator: operator, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_COMPOUND,
|
| + operator: operator, rhs: rhs,
|
| + getter: getter, setter: setter));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitThisPropertyCompound(Send node, AssignmentOperator operator, Node rhs, Selector getterSelector, Selector setterSelector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_COMPOUND,
|
| + operator: operator, rhs: rhs,
|
| + getter: getterSelector, setter: setterSelector));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelFieldCompound(Send node, FieldElement field, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_COMPOUND,
|
| + element: field, operator: operator, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelGetterSetterCompound(Send node, FunctionElement getter, FunctionElement setter, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND,
|
| + operator: operator, rhs: rhs,
|
| + getter: getter, setter: setter));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitStaticMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_METHOD_SETTER_COMPOUND,
|
| + operator: operator, rhs: rhs,
|
| + getter: method, setter: setter));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldSetterCompound(Send node, FieldElement field, FunctionElement setter, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_COMPOUND,
|
| + operator: operator, rhs: rhs,
|
| + getter: field, setter: setter));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperGetterFieldCompound(Send node, FunctionElement getter, FieldElement field, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_COMPOUND,
|
| + operator: operator, rhs: rhs,
|
| + getter: getter, setter: field));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement visitSuperMethodSetterCompound
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelMethodSetterCompound(Send node, FunctionElement method, FunctionElement setter, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement visitTopLevelMethodSetterCompound
|
| + }
|
| +
|
| + @override
|
| + visitCompoundIndexSet(Send node, Node receiver, Node index, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_COMPOUND_INDEX_SET,
|
| + receiver: receiver, index: index, rhs: rhs, operator: operator));
|
| + apply(receiver, arg);
|
| + apply(index, arg);
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitSuperCompoundIndexSet(Send node, FunctionElement getter, FunctionElement setter, Node index, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_COMPOUND_INDEX_SET,
|
| + getter: getter, setter: setter,
|
| + index: index, rhs: rhs, operator: operator));
|
| + apply(index, arg);
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitClassTypeLiteralCompound(Send node, TypeConstantExpression constant, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_COMPOUND,
|
| + constant: constant.getText(), operator: operator, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitDynamicTypeLiteralCompound(Send node, TypeConstantExpression constant, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND,
|
| + constant: constant.getText(), operator: operator, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND,
|
| + element: element, operator: operator, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + visitTypedefTypeLiteralCompound(Send node, TypeConstantExpression constant, AssignmentOperator operator, Node rhs, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND,
|
| + constant: constant.getText(), operator: operator, rhs: rhs));
|
| + apply(rhs, arg);
|
| + }
|
| +
|
| + @override
|
| + errorLocalFunctionPrefix(Send node, LocalFunctionElement function, IncDecOperator operator, arg) {
|
| + // TODO: implement errorLocalFunctionPrefix
|
| + }
|
| +
|
| + @override
|
| + visitClassTypeLiteralPrefix(Send node, TypeConstantExpression constant, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_PREFIX,
|
| + constant: constant.getText(), operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitDynamicTypeLiteralPrefix(Send node, TypeConstantExpression constant, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_PREFIX,
|
| + constant: constant.getText(), operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitLocalVariablePrefix(Send node, LocalVariableElement variable, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_PREFIX,
|
| + element: variable, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitParameterPrefix(Send node, ParameterElement parameter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_PARAMETER_PREFIX,
|
| + element: parameter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitStaticFieldPrefix(Send node, FieldElement field, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_PREFIX,
|
| + element: field, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitStaticGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_PREFIX,
|
| + getter: getter, setter: setter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitStaticMethodSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, arg) {
|
| + // TODO: implement visitStaticMethodSetterPrefix
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldFieldPrefix(Send node, FieldElement readField, FieldElement writtenField, IncDecOperator operator, arg) {
|
| + // TODO: implement visitSuperFieldFieldPrefix
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldPrefix(Send node, FieldElement field, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_PREFIX,
|
| + element: field, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldSetterPrefix(Send node, FieldElement field, FunctionElement setter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_PREFIX,
|
| + getter: field, setter: setter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitSuperGetterFieldPrefix(Send node, FunctionElement getter, FieldElement field, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_PREFIX,
|
| + getter: getter, setter: field, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitSuperGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_PREFIX,
|
| + getter: getter, setter: setter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitSuperMethodSetterPrefix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, arg) {
|
| + // TODO: implement visitSuperMethodSetterPrefix
|
| + }
|
| +
|
| + @override
|
| + visitThisPropertyPrefix(Send node, IncDecOperator operator, Selector getterSelector, Selector setterSelector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_PREFIX,
|
| + operator: operator,
|
| + getter: getterSelector, setter: setterSelector));
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelFieldPrefix(Send node, FieldElement field, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_PREFIX,
|
| + element: field, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX,
|
| + getter: getter, setter: setter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelMethodSetterPrefix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, arg) {
|
| + // TODO: implement visitTopLevelMethodSetterPrefix
|
| + }
|
| +
|
| + @override
|
| + visitTypeVariableTypeLiteralPrefix(Send node, TypeVariableElement element, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX,
|
| + element: element, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitTypedefTypeLiteralPrefix(Send node, TypeConstantExpression constant, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_PREFIX,
|
| + constant: constant.getText(), operator: operator));
|
| + }
|
| +
|
| + @override
|
| + errorLocalFunctionPostfix(Send node, LocalFunctionElement function, IncDecOperator operator, arg) {
|
| + // TODO: implement errorLocalFunctionPostfix
|
| + }
|
| +
|
| + @override
|
| + visitClassTypeLiteralPostfix(Send node, TypeConstantExpression constant, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_CLASS_TYPE_LITERAL_POSTFIX,
|
| + constant: constant.getText(), operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitDynamicTypeLiteralPostfix(Send node, TypeConstantExpression constant, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX,
|
| + constant: constant.getText(), operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitLocalVariablePostfix(Send node, LocalVariableElement variable, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_LOCAL_VARIABLE_POSTFIX,
|
| + element: variable, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitParameterPostfix(Send node, ParameterElement parameter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_PARAMETER_POSTFIX,
|
| + element: parameter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitStaticFieldPostfix(Send node, FieldElement field, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_FIELD_POSTFIX,
|
| + element: field, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitStaticGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_STATIC_GETTER_SETTER_POSTFIX,
|
| + getter: getter, setter: setter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitStaticMethodSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, arg) {
|
| + // TODO: implement visitStaticMethodSetterPostfix
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldFieldPostfix(Send node, FieldElement readField, FieldElement writtenField, IncDecOperator operator, arg) {
|
| + // TODO: implement visitSuperFieldFieldPostfix
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldPostfix(Send node, FieldElement field, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_POSTFIX,
|
| + element: field, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitSuperFieldSetterPostfix(Send node, FieldElement field, FunctionElement setter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_FIELD_SETTER_POSTFIX,
|
| + getter: field, setter: setter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitSuperGetterFieldPostfix(Send node, FunctionElement getter, FieldElement field, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_FIELD_POSTFIX,
|
| + getter: getter, setter: field, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitSuperGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_SUPER_GETTER_SETTER_POSTFIX,
|
| + getter: getter, setter: setter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitSuperMethodSetterPostfix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, arg) {
|
| + // TODO: implement visitSuperMethodSetterPostfix
|
| + }
|
| +
|
| + @override
|
| + visitThisPropertyPostfix(Send node, IncDecOperator operator, Selector getterSelector, Selector setterSelector, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_THIS_PROPERTY_POSTFIX,
|
| + operator: operator,
|
| + getter: getterSelector, setter: setterSelector));
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelFieldPostfix(Send node, FieldElement field, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_FIELD_POSTFIX,
|
| + element: field, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter, FunctionElement setter, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX,
|
| + getter: getter, setter: setter, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitTopLevelMethodSetterPostfix(Send node, FunctionElement method, FunctionElement setter, IncDecOperator operator, arg) {
|
| + // TODO: implement visitTopLevelMethodSetterPostfix
|
| + }
|
| +
|
| + @override
|
| + visitTypeVariableTypeLiteralPostfix(Send node, TypeVariableElement element, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX,
|
| + element: element, operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitTypedefTypeLiteralPostfix(Send node, TypeConstantExpression constant, IncDecOperator operator, arg) {
|
| + visits.add(new Visit(VisitKind.VISIT_TYPEDEF_TYPE_LITERAL_POSTFIX,
|
| + constant: constant.getText(), operator: operator));
|
| + }
|
| +
|
| + @override
|
| + visitConstantGet(Send node, ConstantExpression constant, arg) {
|
| + // TODO: implement visitConstantGet
|
| + }
|
| +
|
| + @override
|
| + visitConstantInvoke(Send node, ConstantExpression constant, NodeList arguments, Selector selector, arg) {
|
| + // TODO: implement visitConstantInvoke
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedCompound(Send node, ErroneousElement element, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement errorUnresolvedCompound
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedGet(Send node, ErroneousElement element, arg) {
|
| + // TODO: implement errorUnresolvedGet
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedInvoke(Send node, ErroneousElement element, NodeList arguments, Selector selector, arg) {
|
| + // TODO: implement errorUnresolvedInvoke
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedPostfix(Send node, ErroneousElement element, IncDecOperator operator, arg) {
|
| + // TODO: implement errorUnresolvedPostfix
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedPrefix(Send node, ErroneousElement element, IncDecOperator operator, arg) {
|
| + // TODO: implement errorUnresolvedPrefix
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedSet(Send node, ErroneousElement element, Node rhs, arg) {
|
| + // TODO: implement errorUnresolvedSet
|
| + }
|
| +
|
| + @override
|
| + errorUndefinedBinaryExpression(Send node, Node left, Operator operator, Node right, arg) {
|
| + // TODO: implement errorUndefinedBinaryExpression
|
| + }
|
| +
|
| + @override
|
| + errorUndefinedUnaryExpression(Send node, Operator operator, Node expression, arg) {
|
| + // TODO: implement errorUndefinedUnaryExpression
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedSuperBinary(Send node, ErroneousElement element, BinaryOperator operator, Node argument, arg) {
|
| + // TODO: implement errorUnresolvedSuperBinary
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedSuperCompoundIndexSet(Send node, ErroneousElement element, Node index, AssignmentOperator operator, Node rhs, arg) {
|
| + // TODO: implement errorUnresolvedSuperCompoundIndexSet
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedSuperIndexSet(Send node, ErroneousElement element, Node index, Node rhs, arg) {
|
| + // TODO: implement errorUnresolvedSuperIndexSet
|
| + }
|
| +
|
| + @override
|
| + errorUnresolvedSuperUnary(Send node, UnaryOperator operator, ErroneousElement element, arg) {
|
| + // TODO: implement errorUnresolvedSuperUnary
|
| + }
|
| +}
|
| +
|
| +enum VisitKind {
|
| + VISIT_PARAMETER_GET,
|
| + VISIT_PARAMETER_SET,
|
| + VISIT_PARAMETER_INVOKE,
|
| + VISIT_PARAMETER_COMPOUND,
|
| + VISIT_PARAMETER_PREFIX,
|
| + VISIT_PARAMETER_POSTFIX,
|
| +
|
| + VISIT_LOCAL_VARIABLE_GET,
|
| + VISIT_LOCAL_VARIABLE_SET,
|
| + VISIT_LOCAL_VARIABLE_INVOKE,
|
| + VISIT_LOCAL_VARIABLE_COMPOUND,
|
| + VISIT_LOCAL_VARIABLE_PREFIX,
|
| + VISIT_LOCAL_VARIABLE_POSTFIX,
|
| +
|
| + VISIT_LOCAL_FUNCTION_GET,
|
| + VISIT_LOCAL_FUNCTION_INVOKE,
|
| +
|
| + VISIT_STATIC_FIELD_GET,
|
| + VISIT_STATIC_FIELD_SET,
|
| + VISIT_STATIC_FIELD_INVOKE,
|
| + VISIT_STATIC_FIELD_COMPOUND,
|
| + VISIT_STATIC_FIELD_PREFIX,
|
| + VISIT_STATIC_FIELD_POSTFIX,
|
| +
|
| + VISIT_STATIC_GETTER_GET,
|
| + VISIT_STATIC_SETTER_SET,
|
| + VISIT_STATIC_GETTER_INVOKE,
|
| + VISIT_STATIC_GETTER_SETTER_COMPOUND,
|
| + VISIT_STATIC_METHOD_SETTER_COMPOUND,
|
| + VISIT_STATIC_GETTER_SETTER_PREFIX,
|
| + VISIT_STATIC_GETTER_SETTER_POSTFIX,
|
| +
|
| + VISIT_STATIC_FUNCTION_GET,
|
| + VISIT_STATIC_FUNCTION_INVOKE,
|
| +
|
| + VISIT_TOP_LEVEL_FIELD_GET,
|
| + VISIT_TOP_LEVEL_FIELD_SET,
|
| + VISIT_TOP_LEVEL_FIELD_INVOKE,
|
| + VISIT_TOP_LEVEL_FIELD_COMPOUND,
|
| + VISIT_TOP_LEVEL_FIELD_PREFIX,
|
| + VISIT_TOP_LEVEL_FIELD_POSTFIX,
|
| +
|
| + VISIT_TOP_LEVEL_GETTER_GET,
|
| + VISIT_TOP_LEVEL_SETTER_SET,
|
| + VISIT_TOP_LEVEL_GETTER_INVOKE,
|
| + VISIT_TOP_LEVEL_GETTER_SETTER_COMPOUND,
|
| + VISIT_TOP_LEVEL_GETTER_SETTER_PREFIX,
|
| + VISIT_TOP_LEVEL_GETTER_SETTER_POSTFIX,
|
| +
|
| + VISIT_TOP_LEVEL_FUNCTION_GET,
|
| + VISIT_TOP_LEVEL_FUNCTION_INVOKE,
|
| +
|
| + VISIT_DYNAMIC_PROPERTY_GET,
|
| + VISIT_DYNAMIC_PROPERTY_SET,
|
| + VISIT_DYNAMIC_PROPERTY_INVOKE,
|
| + VISIT_DYNAMIC_PROPERTY_COMPOUND,
|
| + VISIT_DYNAMIC_PROPERTY_PREFIX,
|
| + VISIT_DYNAMIC_PROPERTY_POSTFIX,
|
| +
|
| + VISIT_THIS_GET,
|
| + VISIT_THIS_INVOKE,
|
| +
|
| + VISIT_THIS_PROPERTY_GET,
|
| + VISIT_THIS_PROPERTY_SET,
|
| + VISIT_THIS_PROPERTY_INVOKE,
|
| + VISIT_THIS_PROPERTY_COMPOUND,
|
| + VISIT_THIS_PROPERTY_PREFIX,
|
| + VISIT_THIS_PROPERTY_POSTFIX,
|
| +
|
| + VISIT_SUPER_FIELD_GET,
|
| + VISIT_SUPER_FIELD_SET,
|
| + VISIT_SUPER_FIELD_INVOKE,
|
| + VISIT_SUPER_FIELD_COMPOUND,
|
| + VISIT_SUPER_FIELD_PREFIX,
|
| + VISIT_SUPER_FIELD_POSTFIX,
|
| +
|
| + VISIT_SUPER_GETTER_GET,
|
| + VISIT_SUPER_SETTER_SET,
|
| + VISIT_SUPER_GETTER_INVOKE,
|
| + VISIT_SUPER_GETTER_SETTER_COMPOUND,
|
| + VISIT_SUPER_GETTER_FIELD_COMPOUND,
|
| + VISIT_SUPER_FIELD_SETTER_COMPOUND,
|
| + VISIT_SUPER_GETTER_SETTER_PREFIX,
|
| + VISIT_SUPER_GETTER_FIELD_PREFIX,
|
| + VISIT_SUPER_FIELD_SETTER_PREFIX,
|
| + VISIT_SUPER_GETTER_SETTER_POSTFIX,
|
| + VISIT_SUPER_GETTER_FIELD_POSTFIX,
|
| + VISIT_SUPER_FIELD_SETTER_POSTFIX,
|
| +
|
| + VISIT_SUPER_METHOD_GET,
|
| + VISIT_SUPER_METHOD_INVOKE,
|
| +
|
| + VISIT_BINARY,
|
| + VISIT_EQUALS,
|
| + VISIT_NOT_EQUALS,
|
| +
|
| + VISIT_SUPER_BINARY,
|
| + VISIT_SUPER_EQUALS,
|
| + VISIT_SUPER_NOT_EQUALS,
|
| +
|
| + VISIT_UNARY,
|
| + VISIT_SUPER_UNARY,
|
| + VISIT_NOT,
|
| +
|
| + VISIT_EXPRESSION_INVOKE,
|
| +
|
| + VISIT_CLASS_TYPE_LITERAL_GET,
|
| + VISIT_CLASS_TYPE_LITERAL_SET,
|
| + VISIT_CLASS_TYPE_LITERAL_INVOKE,
|
| + VISIT_CLASS_TYPE_LITERAL_BINARY,
|
| + VISIT_CLASS_TYPE_LITERAL_COMPOUND,
|
| + VISIT_CLASS_TYPE_LITERAL_PREFIX,
|
| + VISIT_CLASS_TYPE_LITERAL_POSTFIX,
|
| +
|
| + VISIT_TYPEDEF_TYPE_LITERAL_GET,
|
| + VISIT_TYPEDEF_TYPE_LITERAL_SET,
|
| + VISIT_TYPEDEF_TYPE_LITERAL_INVOKE,
|
| + VISIT_TYPEDEF_TYPE_LITERAL_BINARY,
|
| + VISIT_TYPEDEF_TYPE_LITERAL_COMPOUND,
|
| + VISIT_TYPEDEF_TYPE_LITERAL_PREFIX,
|
| + VISIT_TYPEDEF_TYPE_LITERAL_POSTFIX,
|
| +
|
| + VISIT_TYPE_VARIABLE_TYPE_LITERAL_GET,
|
| + VISIT_TYPE_VARIABLE_TYPE_LITERAL_SET,
|
| + VISIT_TYPE_VARIABLE_TYPE_LITERAL_INVOKE,
|
| + VISIT_TYPE_VARIABLE_TYPE_LITERAL_BINARY,
|
| + VISIT_TYPE_VARIABLE_TYPE_LITERAL_COMPOUND,
|
| + VISIT_TYPE_VARIABLE_TYPE_LITERAL_PREFIX,
|
| + VISIT_TYPE_VARIABLE_TYPE_LITERAL_POSTFIX,
|
| +
|
| + VISIT_DYNAMIC_TYPE_LITERAL_GET,
|
| + VISIT_DYNAMIC_TYPE_LITERAL_SET,
|
| + VISIT_DYNAMIC_TYPE_LITERAL_INVOKE,
|
| + VISIT_DYNAMIC_TYPE_LITERAL_BINARY,
|
| + VISIT_DYNAMIC_TYPE_LITERAL_COMPOUND,
|
| + VISIT_DYNAMIC_TYPE_LITERAL_PREFIX,
|
| + VISIT_DYNAMIC_TYPE_LITERAL_POSTFIX,
|
| +
|
| + VISIT_INDEX_SET,
|
| + VISIT_COMPOUND_INDEX_SET,
|
| + VISIT_SUPER_INDEX_SET,
|
| + VISIT_SUPER_COMPOUND_INDEX_SET,
|
| +
|
| + VISIT_ASSERT,
|
| + VISIT_LOGICAL_AND,
|
| + VISIT_LOGICAL_OR,
|
| + VISIT_IS,
|
| + VISIT_IS_NOT,
|
| + VISIT_AS,
|
| +
|
| + // TODO(johnniwinther): Add tests for error cases.
|
| +}
|
|
|