add catch and try

This commit is contained in:
shenjack 2024-03-17 19:02:41 +08:00
parent d2548ed022
commit 722f4b72d3
Signed by: shenjack
GPG Key ID: 7B1134A979775551
2 changed files with 83 additions and 0 deletions

View File

@ -3653,6 +3653,10 @@
$async$goto = 2;
return P._asyncAwait(V.md5run(), $async$b_run);
case 2:
// returning from await.
$async$goto = 3;
return P._asyncAwait(V.async_catch(), $async$b_run);
case 3:
// returning from await.
P.print("object after 1s");
// implicit return
@ -3683,6 +3687,72 @@
});
return P._asyncStartSync($async$md5run, $async$completer);
},
a_async_throw: function () {
var $async$goto = 0,
$async$completer = P._makeAsyncAwaitCompleter(type$.dynamic);
var $async$a_async_throw = P._wrapJsFunctionForAsync(function ($async$errorCode, $async$result) {
if ($async$errorCode === 1)
return P._asyncRethrow($async$result, $async$completer);
while (true)
switch ($async$goto) {
case 0:
// Function start
throw H.wrapException("a_async_throw");
// implicit return
return P._asyncReturn(null, $async$completer);
}
});
return P._asyncStartSync($async$a_async_throw, $async$completer);
},
async_catch: function () {
var $async$goto = 0,
$async$completer = P._makeAsyncAwaitCompleter(type$.dynamic),
$async$handler = 1,
$async$currentError, $async$next = [],
e, exception, $async$exception;
var $async$async_catch = P._wrapJsFunctionForAsync(function ($async$errorCode, $async$result) {
if ($async$errorCode === 1) {
$async$currentError = $async$result;
$async$goto = $async$handler;
}
while (true)
switch ($async$goto) {
case 0:
// Function start
$async$handler = 3;
$async$goto = 6;
return P._asyncAwait(V.a_async_throw(), $async$async_catch);
case 6:
// returning from await.
$async$handler = 1;
// goto after finally
$async$goto = 5;
break;
case 3:
// catch
$async$handler = 2;
$async$exception = $async$currentError;
e = H.unwrapException($async$exception);
P.print(e);
// goto after finally
$async$goto = 5;
break;
case 2:
// uncaught
// goto rethrow
$async$goto = 1;
break;
case 5:
// after finally
// implicit return
return P._asyncReturn(null, $async$completer);
case 1:
// rethrow
return P._asyncRethrow($async$currentError, $async$completer);
}
});
return P._asyncStartSync($async$async_catch, $async$completer);
},
a_run: function () {
var $async$goto = 0,
$async$completer = P._makeAsyncAwaitCompleter(type$.dynamic);

View File

@ -66,6 +66,7 @@ List<String> test_list(String str) {
b_run() async {
print("object in b_run");
await md5run();
await async_catch();
print("object after 1s");
}
@ -75,6 +76,18 @@ md5run() async{
print("object in md5run after 1s");
}
a_async_throw() async {
throw "a_async_throw";
}
async_catch() async {
try {
await a_async_throw();
} catch (e) {
print(e);
}
}
a_run() async{
print("object");
await md5run();