// 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. testTryCatch1() { try { print('danger!'); } catch (e) { print('caught $e'); } } testTryCatch2() { try { print('danger!'); } on TypeError { print('caught type error'); } on AssertionError catch (e) { print('caught assertion error $e'); } on Error catch (e, st) { print('caught error $e $st'); } catch (e, st) { print('caught something $e $st'); } } testTryCatch3() { int x = 1; try { int y = 2; void foo() { try { print('danger foo'); } catch (e) { print(x); y = 3; } } foo(); print(y); } catch (e, st) { print('caught $e $st'); void bar() { try { print('danger bar'); } on Error catch (e) { print('error $e, captured stack trace: $st'); } } return bar; } } testRethrow(bool cond) { try { try { print('try 1 > try 2'); } catch (e) { try { print('try 1 > catch 2 > try 3'); if (cond) { rethrow; } } catch (e) { print('try 1 > catch 2 > catch 3'); } } } catch (e, st) { print('catch 1'); print(st); } } testTryFinally1() { for (int i = 0; i < 10; i++) { try { if (i > 5) { break; } } finally { print(i); } } } testTryFinally2(int x) { switch (x) { case 1: try { print('before try 1'); int y = 3; try { print('try'); void foo() { print(x); print(y); } foo(); continue L; } finally { print('finally 1'); } // ignore: dead_code print('after try 1'); } finally { print('finally 2'); } // ignore: dead_code break; L: case 2: print('case 2'); break; } } testTryFinally3() { int x = 11; dynamic y; try { y = () { print(x); try { print('try 1'); return 42; } finally { try { print('try 2'); return 43; } finally { print(x); } } }; } finally { print(x); y(); } } testTryCatchFinally() { try { print('try'); } catch (e) { print('catch'); } finally { print('finally'); } } main() {}