mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:27:17 +00:00
bb7dbc004e
Change-Id: I8ae5e800588ece4e08add7b0c7afe6587c01c478 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/200200 Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
86 lines
3.7 KiB
Dart
86 lines
3.7 KiB
Dart
// Copyright (c) 2021, 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.
|
|
|
|
// This test verifies that `f<a,EXPR>(x)` is properly parsed as a pair of
|
|
// expressions separated by a `,`, for all types of expressions that may appear
|
|
// as EXPR that can't be parsed as types.
|
|
|
|
import '../syntax_helper.dart';
|
|
|
|
class C extends SyntaxTracker {
|
|
C([Object? x = absent, Object? y = absent])
|
|
: super('new C${SyntaxTracker.args(x, y)}');
|
|
|
|
C.syntax(String s) : super(s);
|
|
|
|
Object? operator >(Object? other) =>
|
|
SyntaxTracker('(${syntax(this)} > ${syntax(other)})');
|
|
}
|
|
|
|
class ThisTest extends C {
|
|
ThisTest() : super.syntax('this');
|
|
|
|
void test() {
|
|
checkSyntax(f(x < C, this > (x)), 'f((x < C), (this > x))');
|
|
// Note: SyntaxTracker can't see the parens around `this` in the line below
|
|
checkSyntax(f(x < C, (this) > (x)), 'f((x < C), (this > x))');
|
|
}
|
|
}
|
|
|
|
class SuperTest extends C {
|
|
SuperTest() : super.syntax('super');
|
|
|
|
void test() {
|
|
checkSyntax(f(x < C, super > (x)), 'f((x < C), (super > x))');
|
|
}
|
|
}
|
|
|
|
main() {
|
|
const y = 123;
|
|
SyntaxTracker.known[C] = 'C';
|
|
SyntaxTracker.known[#x] = '#x';
|
|
SyntaxTracker.known[y] = 'y';
|
|
checkSyntax(
|
|
f(x < C, x.getter.getter > (x)), 'f((x < C), (x.getter.getter > x))');
|
|
checkSyntax(f(x < C, C() > (x)), 'f((x < C), (new C() > x))');
|
|
checkSyntax(f(x < C, new C() > (x)), 'f((x < C), (new C() > x))');
|
|
checkSyntax(f(x < C, f() > (x)), 'f((x < C), (f() > x))');
|
|
checkSyntax(f(x < C, x.method() > (x)), 'f((x < C), (x.method() > x))');
|
|
checkSyntax(f(x < C, x[0]() > (x)), 'f((x < C), (x[0]() > x))');
|
|
checkSyntax(f(x < C, #x > (x)), 'f((x < C), (#x > x))');
|
|
checkSyntax(f(x < C, null > (x)), 'f((x < C), (null > x))');
|
|
checkSyntax(f(x < C, 0 > (y)), 'f((x < C), false)');
|
|
checkSyntax(f(x < C, 0.5 > (y)), 'f((x < C), false)');
|
|
checkSyntax(f(x < C, [] > (x)), 'f((x < C), ([] > x))');
|
|
checkSyntax(f(x < C, [0] > (x)), 'f((x < C), ([0] > x))');
|
|
checkSyntax(f(x < C, {} > (x)), 'f((x < C), ({} > x))');
|
|
checkSyntax(f(x < C, {0} > (x)), 'f((x < C), ({0} > x))');
|
|
checkSyntax(f(x < C, {0: 0} > (x)), 'f((x < C), ({ 0: 0 } > x))');
|
|
checkSyntax(f(x < C, true > (x)), 'f((x < C), (true > x))');
|
|
checkSyntax(f(x < C, "s" > (x)), 'f((x < C), ("s" > x))');
|
|
checkSyntax(f(x < C, r"s" > (x)), 'f((x < C), ("s" > x))');
|
|
checkSyntax(f(x < C, x[0] > (x)), 'f((x < C), (x[0] > x))');
|
|
// Note: SyntaxTracker can't see the `!` in the line below
|
|
checkSyntax(f(x < C, x! > (x)), 'f((x < C), (x > x))');
|
|
// Note: SyntaxTracker can't see the parens around `x` in the line below
|
|
checkSyntax(f(x < C, (x) > (x)), 'f((x < C), (x > x))');
|
|
checkSyntax(f(x < C, -x > (x)), 'f((x < C), ((-x) > x))');
|
|
checkSyntax(f(x < C, !true > (x)), 'f((x < C), (false > x))');
|
|
checkSyntax(f(x < C, !(true) > (x)), 'f((x < C), (false > x))');
|
|
checkSyntax(f(x < C, ~x > (x)), 'f((x < C), ((~x) > x))');
|
|
checkSyntax(f(x < C, x * x > (x)), 'f((x < C), ((x * x) > x))');
|
|
checkSyntax(f(x < C, x / x > (x)), 'f((x < C), ((x / x) > x))');
|
|
checkSyntax(f(x < C, x ~/ x > (x)), 'f((x < C), ((x ~/ x) > x))');
|
|
checkSyntax(f(x < C, x % x > (x)), 'f((x < C), ((x % x) > x))');
|
|
checkSyntax(f(x < C, x + x > (x)), 'f((x < C), ((x + x) > x))');
|
|
checkSyntax(f(x < C, x - x > (x)), 'f((x < C), ((x - x) > x))');
|
|
checkSyntax(f(x < C, x << x > (x)), 'f((x < C), ((x << x) > x))');
|
|
checkSyntax(f(x < C, x >> x > (x)), 'f((x < C), ((x >> x) > x))');
|
|
checkSyntax(f(x < C, x & x > (x)), 'f((x < C), ((x & x) > x))');
|
|
checkSyntax(f(x < C, x ^ x > (x)), 'f((x < C), ((x ^ x) > x))');
|
|
checkSyntax(f(x < C, x | x > (x)), 'f((x < C), ((x | x) > x))');
|
|
ThisTest().test();
|
|
SuperTest().test();
|
|
}
|