mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 00:09:49 +00:00
9d933d1281
Tested: No new tests. Change-Id: Idf19ce8b6743b221841e6cef6b2a80e8ab37860e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/354260 Auto-Submit: Lasse Nielsen <lrn@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Nate Bosch <nbosch@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Lasse Nielsen <lrn@google.com>
80 lines
1.5 KiB
Dart
80 lines
1.5 KiB
Dart
// Copyright (c) 2023, 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.
|
|
|
|
// Tests that field promotion takes effect when the thing being promoted is a
|
|
// scrutinee of an if-case construct.
|
|
|
|
import '../static_type_helper.dart';
|
|
|
|
class C {
|
|
final Object? _o;
|
|
C(this._o);
|
|
}
|
|
|
|
void castPattern(C c) {
|
|
if (c._o case _ as int) {
|
|
c._o.expectStaticType<Exactly<int>>();
|
|
}
|
|
}
|
|
|
|
void listPattern(C c) {
|
|
if (c._o case []) {
|
|
c._o.expectStaticType<Exactly<List<Object?>>>();
|
|
}
|
|
}
|
|
|
|
void mapPattern(C c) {
|
|
if (c._o case {0: _}) {
|
|
c._o.expectStaticType<Exactly<Map<Object?, Object?>>>();
|
|
}
|
|
}
|
|
|
|
void nullAssertPattern(C c) {
|
|
if (c._o case _!) {
|
|
c._o.expectStaticType<Exactly<Object>>();
|
|
}
|
|
}
|
|
|
|
void nullCheckPattern(C c) {
|
|
if (c._o case _?) {
|
|
c._o.expectStaticType<Exactly<Object>>();
|
|
}
|
|
}
|
|
|
|
void objectPattern(C c) {
|
|
if (c._o case int()) {
|
|
c._o.expectStaticType<Exactly<int>>();
|
|
}
|
|
}
|
|
|
|
void recordPattern(C c) {
|
|
if (c._o case ()) {
|
|
c._o.expectStaticType<Exactly<()>>();
|
|
}
|
|
}
|
|
|
|
void variablePattern(C c) {
|
|
if (c._o case int x) {
|
|
c._o.expectStaticType<Exactly<int>>();
|
|
}
|
|
}
|
|
|
|
void wildcardPattern(C c) {
|
|
if (c._o case int _) {
|
|
c._o.expectStaticType<Exactly<int>>();
|
|
}
|
|
}
|
|
|
|
main() {
|
|
castPattern(C(0));
|
|
listPattern(C([]));
|
|
mapPattern(C({}));
|
|
nullAssertPattern(C(0));
|
|
nullCheckPattern(C(0));
|
|
objectPattern(C(0));
|
|
recordPattern(C(()));
|
|
variablePattern(C(0));
|
|
wildcardPattern(C(0));
|
|
}
|