From 9ef0b18eb0b4c337ccfc8d0add36bec6b657262f Mon Sep 17 00:00:00 2001 From: "Kevin (Kun) \"Kassimo\" Qian" Date: Thu, 19 Dec 2019 21:04:14 -0800 Subject: repl: do not crash on async op reject (#3527) --- core/libdeno/api.cc | 6 ++++++ core/libdeno/deno.h | 6 ++++++ 2 files changed, 12 insertions(+) (limited to 'core/libdeno') diff --git a/core/libdeno/api.cc b/core/libdeno/api.cc index 1ded39e1b..08e8a6de9 100644 --- a/core/libdeno/api.cc +++ b/core/libdeno/api.cc @@ -138,6 +138,12 @@ const char* deno_last_exception(Deno* d_) { } } +void deno_clear_last_exception(Deno* d_) { + auto* d = deno::unwrap(d_); + d->last_exception_.clear(); + d->last_exception_handle_.Reset(); +} + void deno_execute(Deno* d_, void* user_data, const char* js_filename, const char* js_source) { auto* d = deno::unwrap(d_); diff --git a/core/libdeno/deno.h b/core/libdeno/deno.h index 946978e3b..fd48abc5a 100644 --- a/core/libdeno/deno.h +++ b/core/libdeno/deno.h @@ -117,8 +117,14 @@ void deno_pinned_buf_delete(deno_pinned_buf* buf); void deno_check_promise_errors(Deno* d); +// Returns a cstring pointer to the exception. +// Rust side must NOT assert ownership. const char* deno_last_exception(Deno* d); +// Clears last exception. +// Rust side must NOT hold pointer to exception string when called. +void deno_clear_last_exception(Deno* d_); + void deno_terminate_execution(Deno* d); void deno_run_microtasks(Deno* d, void* user_data); -- cgit v1.2.3