| // 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. |
| |
| /// @assertion With unsound null checking, evaluation proceeds as follows: |
| /// |
| /// First e is implicitly cast to bool if required (using |
| /// LEGACY_SUBTYPE(e.runtimeType, bool)) |
| /// This cast may fail, and if so it is a TypeError. |
| /// If the cast does not fail, then the result may still be null, and so the |
| /// result must be checked against null. |
| /// If the null check fails, it is an AssertionError, otherwise evaluation of the |
| /// enclosing conditional proceeds as usual. |
| /// |
| /// @description Checks that it is a TypeError if runtime check fails |
| /// |
| /// @author sgrekhov@unipro.ru |
| |
| // Requirements=nnbd-weak |
| import "../../../Utils/expect.dart"; |
| |
| main() { |
| dynamic d = 42; |
| Expect.throws(() { |
| if(d) {} |
| }, (e) => e is TypeError); |
| |
| d = new Object(); |
| Expect.throws(() { |
| if(d) {} |
| }, (e) => e is TypeError); |
| } |