Files
sdk/pkg/compiler/test/inference/data/throw.dart
T
Nate Biggs 3daee0282b [dart2js] Fix inferrer bug in handling exit conditions in try/catch/finally.
This is showing up in places like here where we are inferring `JSObject.toString` to return `String?`:
https://github.com/dart-lang/sdk/blob/main/sdk/lib/_internal/js_runtime/lib/js_patch.dart#L204

Change-Id: Ie15c6a06cd1e0f9ead87b4a9ceaa949bdcbce989
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/269040
Reviewed-by: Mayank Patke <fishythefish@google.com>
Commit-Queue: Nate Biggs <natebiggs@google.com>
2022-12-01 22:16:35 +00:00

65 lines
1.8 KiB
Dart

// Copyright (c) 2017, 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.
// @dart = 2.7
/*member: main:[null]*/
main() {
unconditionalThrow();
conditionalThrow();
conditionalThrowReturn();
unconditionalRethrow();
}
////////////////////////////////////////////////////////////////////////////////
/// Method that throws unconditionally.
////////////////////////////////////////////////////////////////////////////////
/*member: unconditionalThrow:[empty]*/
unconditionalThrow() => throw 'foo';
////////////////////////////////////////////////////////////////////////////////
/// Method that throws conditionally.
////////////////////////////////////////////////////////////////////////////////
/*member: _conditionalThrow:[null]*/
_conditionalThrow(/*[exact=JSBool]*/ o) {
if (o) throw 'foo';
}
/*member: conditionalThrow:[null]*/
conditionalThrow() {
_conditionalThrow(true);
_conditionalThrow(false);
}
////////////////////////////////////////////////////////////////////////////////
/// Method that throws conditionally and return 0.
////////////////////////////////////////////////////////////////////////////////
/*member: _conditionalThrowReturn:[exact=JSUInt31]*/
_conditionalThrowReturn(/*[exact=JSBool]*/ o) {
if (o) throw 'foo';
return 0;
}
/*member: conditionalThrowReturn:[null]*/
conditionalThrowReturn() {
_conditionalThrowReturn(true);
_conditionalThrowReturn(false);
}
////////////////////////////////////////////////////////////////////////////////
/// Method that rethrows unconditionally.
////////////////////////////////////////////////////////////////////////////////
/*member: unconditionalRethrow:[empty]*/
unconditionalRethrow() {
try {
throw 'foo';
} catch (e) {
rethrow;
}
}