| // 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 (_) {} |
| } |