3abf78212c
Add dart2bytecode tool which takes Dart sources and produces Dart bytecode. The tool uses common front-end (CFE) to parse Dart source code and contains bytecode generator which translates kernel AST to bytecode. Change-Id: I90bd6e72c619cf0edc556da0640760b30e81091d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/378560 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
156 lines
2.5 KiB
Dart
156 lines
2.5 KiB
Dart
// 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() {}
|