4c0cab024e
Update CFE tests (and a few analyzer tests) to match the new world of the syntax being unsupported. Fixes https://github.com/dart-lang/sdk/issues/42681 Change-Id: I71bc973f36dfb978ddb825edb68530d8e260a58a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/157980 Commit-Queue: Jens Johansen <jensj@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
251 lines
8.6 KiB
Dart
251 lines
8.6 KiB
Dart
// Copyright (c) 2019, 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.
|
|
|
|
class Class1 {
|
|
Class1? get property => null;
|
|
|
|
void set property(Class1? value) {}
|
|
|
|
Class1 get property1 => new Class1();
|
|
|
|
Class2 get property2 => new Class2();
|
|
|
|
Class1? get nullable1 => property1;
|
|
|
|
void set nullable1(Class1? value) {
|
|
property = value;
|
|
}
|
|
|
|
Class1 nonNullable1Method() => nonNullable1;
|
|
|
|
Class1? operator [](Class1? key) => nullable1;
|
|
|
|
void operator []=(Class1? key, Class1? value) {
|
|
property = value;
|
|
}
|
|
|
|
Class1? operator +(int value) => nullable1;
|
|
|
|
Class1? operator -() => nullable1;
|
|
|
|
Class1 get nonNullable1 => property1;
|
|
|
|
Class2 get nonNullable2 => property2;
|
|
}
|
|
|
|
class Class2 {
|
|
Class2 get property => this;
|
|
|
|
void set property(Class2 value) {}
|
|
|
|
Class2 nonNullable2Method() => nonNullable2;
|
|
|
|
Class2 operator [](Class2? key) => property;
|
|
|
|
void operator []=(Class2? key, Class2? value) => property;
|
|
|
|
Class2 operator +(int value) => property;
|
|
|
|
Class2 operator -() => property;
|
|
|
|
Class2 get nonNullable2 => property;
|
|
|
|
void set nonNullable2(Class2 value) {
|
|
property = value;
|
|
}
|
|
}
|
|
|
|
class Class3 {
|
|
Class2? get property => null;
|
|
|
|
Class2? operator [](Class3? key) => property;
|
|
}
|
|
|
|
main() {
|
|
propertyAccess(null);
|
|
indexAccess(null, null, null);
|
|
operatorAccess(null, null);
|
|
ifNull(null);
|
|
}
|
|
|
|
void propertyAccess(Class1? n1) {
|
|
Class1? nullable1 = n1;
|
|
|
|
n1?.nullable1;
|
|
n1?.nullable1 = new Class1();
|
|
nullable1 = n1?.nullable1 = new Class1();
|
|
n1?.nonNullable1Method();
|
|
|
|
n1?.nonNullable1.nullable1;
|
|
n1?.nullable1?.nullable1;
|
|
n1?.nonNullable1.nullable1?.nullable1;
|
|
n1?.nonNullable1.nullable1 = new Class1();
|
|
n1?.nullable1?.nullable1 = new Class1();
|
|
n1?.nonNullable1.nullable1?.nullable1 = new Class1();
|
|
(n1?.nullable1)?.nullable1;
|
|
throws(() => (n1?.nullable1 = new Class1()).nullable1);
|
|
throws(() => (n1?.nonNullable1Method()).nullable1);
|
|
nullable1 = n1?.nonNullable1.nullable1 = new Class1();
|
|
nullable1 = n1?.nullable1?.nullable1 = new Class1();
|
|
nullable1 = n1?.nonNullable1.nullable1?.nullable1 = new Class1();
|
|
n1?.nullable1?.nonNullable1Method();
|
|
n1?.nullable1 = new Class1().nullable1;
|
|
nullable1 = n1?.nullable1 = new Class1().nullable1;
|
|
n1?.nullable1 = new Class1().nullable1 = new Class1();
|
|
nullable1 = n1?.nullable1 = new Class1().nullable1 = new Class1();
|
|
n1?.nullable1 = new Class1().nonNullable1Method();
|
|
nullable1 = n1?.nullable1 = new Class1().nonNullable1Method();
|
|
n1?.nonNullable1Method().nullable1;
|
|
n1?.nonNullable1Method().nullable1 = new Class1();
|
|
n1?.nonNullable1Method().nonNullable1Method();
|
|
|
|
n1?.nonNullable1.nonNullable1.nullable1;
|
|
n1?.nonNullable1.nonNullable1.nullable1 = new Class1();
|
|
nullable1 = n1?.nonNullable1.nonNullable1.nullable1 = new Class1();
|
|
n1?.nonNullable1.nullable1?.nonNullable1Method();
|
|
n1?.nullable1 = new Class1().nonNullable1.nullable1;
|
|
nullable1 = n1?.nullable1 = new Class1().nonNullable1.nullable1;
|
|
n1?.nullable1 = new Class1().nonNullable1.nullable1 = new Class1();
|
|
nullable1 =
|
|
n1?.nullable1 = new Class1().nonNullable1.nullable1 = new Class1();
|
|
n1?.nullable1 = new Class1().nonNullable1.nonNullable1Method();
|
|
nullable1 = n1?.nullable1 = new Class1().nonNullable1.nonNullable1Method();
|
|
n1?.nonNullable1Method().nonNullable1.nullable1;
|
|
n1?.nonNullable1Method().nonNullable1.nullable1 = new Class1();
|
|
n1?.nonNullable1Method().nonNullable1.nonNullable1Method();
|
|
|
|
n1?.nonNullable1.nullable1 = new Class1().nullable1;
|
|
nullable1 = n1?.nonNullable1.nullable1 = new Class1().nullable1;
|
|
n1?.nonNullable1.nullable1 = new Class1().nullable1 = new Class1();
|
|
nullable1 =
|
|
n1?.nonNullable1.nullable1 = new Class1().nullable1 = new Class1();
|
|
n1?.nonNullable1.nullable1 = new Class1().nonNullable1Method();
|
|
nullable1 = n1?.nonNullable1.nullable1 = new Class1().nonNullable1Method();
|
|
n1?.nullable1 = new Class1().nullable1 = new Class1().nullable1;
|
|
nullable1 = n1?.nullable1 = new Class1().nullable1 = new Class1().nullable1;
|
|
n1?.nullable1 =
|
|
new Class1().nullable1 = new Class1().nullable1 = new Class1();
|
|
nullable1 = n1?.nullable1 =
|
|
new Class1().nullable1 = new Class1().nullable1 = new Class1();
|
|
n1?.nullable1 = new Class1().nullable1 = new Class1().nonNullable1Method();
|
|
nullable1 = n1?.nullable1 =
|
|
new Class1().nullable1 = new Class1().nonNullable1Method();
|
|
n1?.nonNullable1Method().nullable1 = new Class1().nullable1;
|
|
nullable1 = n1?.nonNullable1Method().nullable1 = new Class1().nullable1;
|
|
n1?.nonNullable1Method().nullable1 = new Class1().nullable1 = new Class1();
|
|
nullable1 = n1?.nonNullable1Method().nullable1 =
|
|
new Class1().nullable1 = new Class1();
|
|
n1?.nonNullable1Method().nullable1 = new Class1().nonNullable1Method();
|
|
nullable1 =
|
|
n1?.nonNullable1Method().nullable1 = new Class1().nonNullable1Method();
|
|
|
|
n1?.nonNullable1.nonNullable1Method().nullable1;
|
|
n1?.nonNullable1.nonNullable1Method().nullable1 = new Class1();
|
|
nullable1 = n1?.nonNullable1.nonNullable1Method().nullable1 = new Class1();
|
|
n1?.nonNullable1.nonNullable1Method().nonNullable1Method();
|
|
n1?.nullable1 = new Class1().nonNullable1Method().nullable1;
|
|
nullable1 = n1?.nullable1 = new Class1().nonNullable1Method().nullable1;
|
|
n1?.nullable1 = new Class1().nonNullable1Method().nullable1 = new Class1();
|
|
nullable1 = n1?.nullable1 =
|
|
new Class1().nonNullable1Method().nullable1 = new Class1();
|
|
n1?.nullable1 = new Class1().nonNullable1Method().nonNullable1Method();
|
|
nullable1 =
|
|
n1?.nullable1 = new Class1().nonNullable1Method().nonNullable1Method();
|
|
n1?.nonNullable1Method().nonNullable1Method().nullable1;
|
|
n1?.nonNullable1Method().nonNullable1Method().nullable1 = new Class1();
|
|
n1?.nonNullable1Method().nonNullable1Method().nonNullable1Method();
|
|
|
|
n1?.nonNullable1Method()?.nonNullable1Method();
|
|
}
|
|
|
|
void indexAccess(Class1? n1, Class2? n2, Class3? n3) {
|
|
Class1? nullable1 = n1;
|
|
Class2? nullable2 = n2;
|
|
Class3? nullable3 = n3;
|
|
|
|
n1?[nullable1];
|
|
n1?[nullable1] = new Class1();
|
|
n1?[nullable1]?.nonNullable1Method();
|
|
n1?.nonNullable1[nullable1];
|
|
n1?.nonNullable1[nullable1] = new Class1();
|
|
nullable1 = n1?.nonNullable1[nullable1] = new Class1();
|
|
n1?.nonNullable1[nullable1]?.nonNullable1Method();
|
|
n1?.nonNullable2[nullable2] += 0;
|
|
nullable2 = n1?.nonNullable2[nullable2] += 0;
|
|
n1?[nullable1] ??= nullable1;
|
|
nullable1 = n1?[nullable1] ??= nullable1;
|
|
n2?[nullable2] += 0;
|
|
nullable2 = n2?[nullable2] += 0;
|
|
n2?[nullable2] += 0;
|
|
nullable2 = n2?[nullable2] += 0;
|
|
n2?[nullable2]++;
|
|
nullable2 = n2?[nullable2]++;
|
|
++n2?[nullable2];
|
|
nullable2 = ++n2?[nullable2];
|
|
n1?.nonNullable2[nullable2]++;
|
|
nullable2 = n1?.nonNullable2[nullable2]++;
|
|
++n1?.nonNullable2[nullable2];
|
|
nullable2 = ++n1?.nonNullable2[nullable2];
|
|
|
|
n1?.nonNullable2[nullable2][nullable2];
|
|
n1?.nonNullable2[nullable2][nullable2] = new Class2();
|
|
nullable2 = n1?.nonNullable2[nullable2][nullable2] = new Class2();
|
|
n1?.nonNullable2[nullable2][nullable2]?.nonNullable2Method();
|
|
n1?.nonNullable2[nullable2][nullable2] += 0;
|
|
nullable2 = n1?.nonNullable2[nullable2][nullable2] += 0;
|
|
n1?.nonNullable2[nullable2][nullable2]++;
|
|
nullable2 = n1?.nonNullable2[nullable2][nullable2]++;
|
|
++n1?.nonNullable2[nullable2][nullable2];
|
|
nullable2 = ++n1?.nonNullable2[nullable2][nullable2];
|
|
|
|
n1?[nullable1]?[nullable1];
|
|
n1?[nullable1]?[nullable1] = new Class1();
|
|
nullable1 = n1?[nullable1]?[nullable1] = new Class1();
|
|
n1?[nullable1]?[nullable1]?.nonNullable1Method();
|
|
nullable1 = n1?[nullable1]?[nullable1]?.nonNullable1Method();
|
|
n1?[nullable1]?[nullable1] ??= nullable1;
|
|
nullable1 = n1?[nullable1]?[nullable1] ??= nullable1;
|
|
n3?[nullable3]?[nullable2] += 0;
|
|
nullable2 = n3?[nullable3]?[nullable2] += 0;
|
|
n3?[nullable3]?[nullable2]++;
|
|
nullable2 = n3?[nullable3]?[nullable2]++;
|
|
++n3?[nullable3]?[nullable2];
|
|
nullable2 = ++n3?[nullable3]?[nullable2];
|
|
}
|
|
|
|
void operatorAccess(Class1? n1, Class2? n2) {
|
|
Class2? nullable2 = n2;
|
|
|
|
throws(() => n1?.nonNullable1 + 0);
|
|
throws(() => -n1?.nonNullable1);
|
|
n2?.nonNullable2 += 0;
|
|
nullable2 = n2?.nonNullable2 += 0;
|
|
n2?.nonNullable2.nonNullable2 += 0;
|
|
nullable2 = n2?.nonNullable2.nonNullable2 += 0;
|
|
n2?.nonNullable2++;
|
|
nullable2 = n2?.nonNullable2++;
|
|
++n2?.nonNullable2;
|
|
nullable2 = ++n2?.nonNullable2;
|
|
}
|
|
|
|
void ifNull(Class1? n1) {
|
|
Class1? nullable1 = n1;
|
|
|
|
n1?.nullable1 ??= n1;
|
|
n1 = n1?.nullable1 ??= n1;
|
|
n1?.nonNullable1.nullable1 ??= n1;
|
|
n1 = n1?.nonNullable1.nullable1 ??= n1;
|
|
n1?.nonNullable1[n1] ??= n1;
|
|
n1 = n1?.nonNullable1[n1] ??= n1;
|
|
}
|
|
|
|
void throws(void Function() f) {
|
|
try {
|
|
f();
|
|
} catch (_) {
|
|
return;
|
|
}
|
|
throw 'Expected exception.';
|
|
}
|