blob: 8aa2870b7c14654473090726201ab6570e6e59bf [file] [log] [blame] [edit]
// Copyright (c) 2024, 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.
// Test that the operand for a `throw` expression is type inferred using a
// context of `Object` (previously it was `_`--see
// https://github.com/dart-lang/sdk/issues/56065).
import 'dart:async';
import 'package:expect/static_type_helper.dart';
main() async {
// Note: `contextType(...)..expectStaticType<...>()` can't statically
// distinguish between a context of `dynamic` and a context of `Object`, since
// `exp..expectStaticType<Anything>()` is statically allowed if `exp` has a
// static type of `dynamic`. So to be sure we have the context we think we
// have, we use `await`, which causes the context to be wrapped in `FutureOr`.
try {
throw await contextType(Future.value('foo'))
..expectStaticType<Exactly<FutureOr<Object>>>();
} on String catch (_) {}
}