| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -303,11 +303,12 @@ class Reference : private Finalizer { | |||
| 303 | 303 | napi_env env = reference->_env; | |
| 304 | 304 | ||
| 305 | 305 | if (reference->_finalize_callback != nullptr) { | |
| 306 | - NAPI_CALL_INTO_MODULE_THROW(env, | ||
| 306 | + NapiCallIntoModuleThrow(env, [&]() { | ||
| 307 | 307 | reference->_finalize_callback( | |
| 308 | 308 | reference->_env, | |
| 309 | 309 | reference->_finalize_data, | |
| 310 | - reference->_finalize_hint)); | ||
| 310 | + reference->_finalize_hint); | ||
| 311 | + }); | ||
| 311 | 312 | } | |
| 312 | 313 | ||
| 313 | 314 | // this is safe because if a request to delete the reference | |
@@ -448,7 +449,7 @@ class CallbackWrapperBase : public CallbackWrapper { | |||
| 448 | 449 | napi_callback cb = _bundle->*FunctionField; | |
| 449 | 450 | ||
| 450 | 451 | napi_value result; | |
| 451 | - NAPI_CALL_INTO_MODULE_THROW(env, result = cb(env, cbinfo_wrapper)); | ||
| 452 | + NapiCallIntoModuleThrow(env, [&]() { result = cb(env, cbinfo_wrapper); }); | ||
| 452 | 453 | ||
| 453 | 454 | if (result != nullptr) { | |
| 454 | 455 | this->SetReturnValue(result); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -113,23 +113,26 @@ napi_status napi_set_last_error(napi_env env, napi_status error_code, | |||
| 113 | 113 | } \ | |
| 114 | 114 | } while (0) | |
| 115 | 115 | ||
| 116 | - #define NAPI_CALL_INTO_MODULE(env, call, handle_exception) \ | ||
| 117 | - do { \ | ||
| 118 | - int open_handle_scopes = (env)->open_handle_scopes; \ | ||
| 119 | - int open_callback_scopes = (env)->open_callback_scopes; \ | ||
| 120 | - napi_clear_last_error((env)); \ | ||
| 121 | - call; \ | ||
| 122 | - CHECK_EQ((env)->open_handle_scopes, open_handle_scopes); \ | ||
| 123 | - CHECK_EQ((env)->open_callback_scopes, open_callback_scopes); \ | ||
| 124 | - if (!(env)->last_exception.IsEmpty()) { \ | ||
| 125 | - handle_exception( \ | ||
| 126 | - v8::Local<v8::Value>::New((env)->isolate, (env)->last_exception)); \ | ||
| 127 | - (env)->last_exception.Reset(); \ | ||
| 128 | - } \ | ||
| 129 | - } while (0) | ||
| 116 | + template <typename T, typename U> | ||
| 117 | + void NapiCallIntoModule(napi_env env, T&& call, U&& handle_exception) { | ||
| 118 | + int open_handle_scopes = env->open_handle_scopes; | ||
| 119 | + int open_callback_scopes = env->open_callback_scopes; | ||
| 120 | + napi_clear_last_error(env); | ||
| 121 | + call(); | ||
| 122 | + CHECK_EQ(env->open_handle_scopes, open_handle_scopes); | ||
| 123 | + CHECK_EQ(env->open_callback_scopes, open_callback_scopes); | ||
| 124 | + if (!env->last_exception.IsEmpty()) { | ||
| 125 | + handle_exception(env->last_exception.Get(env->isolate)); | ||
| 126 | + env->last_exception.Reset(); | ||
| 127 | + } | ||
| 128 | + } | ||
| 130 | 129 | ||
| 131 | - #define NAPI_CALL_INTO_MODULE_THROW(env, call) \ | ||
| 132 | - NAPI_CALL_INTO_MODULE((env), call, (env)->isolate->ThrowException) | ||
| 130 | + template <typename T> | ||
| 131 | + void NapiCallIntoModuleThrow(napi_env env, T&& call) { | ||
| 132 | + NapiCallIntoModule(env, call, [&](v8::Local<v8::Value> value) { | ||
| 133 | + env->isolate->ThrowException(value); | ||
| 134 | + }); | ||
| 135 | + } | ||
| 133 | 136 | ||
| 134 | 137 | namespace v8impl { | |
| 135 | 138 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -34,11 +34,12 @@ class BufferFinalizer: private Finalizer { | |||
| 34 | 34 | static void FinalizeBufferCallback(char* data, void* hint) { | |
| 35 | 35 | BufferFinalizer* finalizer = static_cast<BufferFinalizer*>(hint); | |
| 36 | 36 | if (finalizer->_finalize_callback != nullptr) { | |
| 37 | - NAPI_CALL_INTO_MODULE_THROW(finalizer->_env, | ||
| 37 | + NapiCallIntoModuleThrow(finalizer->_env, [&]() { | ||
| 38 | 38 | finalizer->_finalize_callback( | |
| 39 | 39 | finalizer->_env, | |
| 40 | 40 | data, | |
| 41 | - finalizer->_finalize_hint)); | ||
| 41 | + finalizer->_finalize_hint); | ||
| 42 | + }); | ||
| 42 | 43 | } | |
| 43 | 44 | ||
| 44 | 45 | Delete(finalizer); | |
@@ -465,8 +466,9 @@ void napi_module_register_by_symbol(v8::Local<v8::Object> exports, | |||
| 465 | 466 | napi_env env = v8impl::GetEnv(context); | |
| 466 | 467 | ||
| 467 | 468 | napi_value _exports; | |
| 468 | - NAPI_CALL_INTO_MODULE_THROW(env, | ||
| 469 | - _exports = init(env, v8impl::JsValueFromV8LocalValue(exports))); | ||
| 469 | + NapiCallIntoModuleThrow(env, [&]() { | ||
| 470 | + _exports = init(env, v8impl::JsValueFromV8LocalValue(exports)); | ||
| 471 | + }); | ||
| 470 | 472 | ||
| 471 | 473 | // If register function returned a non-null exports object different from | |
| 472 | 474 | // the exports object we passed it, set that as the "exports" property of | |
@@ -874,14 +876,14 @@ class Work : public node::AsyncResource, public node::ThreadPoolWork { | |||
| 874 | 876 | // stored. | |
| 875 | 877 | napi_env env = _env; | |
| 876 | 878 | ||
| 877 | - NAPI_CALL_INTO_MODULE(env, | ||
| 878 | - _complete(_env, ConvertUVErrorCode(status), _data), | ||
| 879 | - [env] (v8::Local<v8::Value> local_err) { | ||
| 880 | - // If there was an unhandled exception in the complete callback, | ||
| 881 | - // report it as a fatal exception. (There is no JavaScript on the | ||
| 882 | - // callstack that can possibly handle it.) | ||
| 883 | - v8impl::trigger_fatal_exception(env, local_err); | ||
| 884 | - }); | ||
| 879 | + NapiCallIntoModule(env, [&]() { | ||
| 880 | + _complete(_env, ConvertUVErrorCode(status), _data); | ||
| 881 | + }, [env](v8::Local<v8::Value> local_err) { | ||
| 882 | + // If there was an unhandled exception in the complete callback, | ||
| 883 | + // report it as a fatal exception. (There is no JavaScript on the | ||
| 884 | + // callstack that can possibly handle it.) | ||
| 885 | + v8impl::trigger_fatal_exception(env, local_err); | ||
| 886 | + }); | ||
| 885 | 887 | ||
| 886 | 888 | // Note: Don't access `work` after this point because it was | |
| 887 | 889 | // likely deleted by the complete callback. | |
| Back | FazBrowse Home | New Git URL |
0 commit comments