diff options
author | Daniel Bevenius <daniel.bevenius@gmail.com> | 2018-03-12 12:45:48 +0300 |
---|---|---|
committer | Daniel Bevenius <daniel.bevenius@gmail.com> | 2018-03-14 12:40:38 +0300 |
commit | 861285abb5dbf23e5ce14d0695da468976cad478 (patch) | |
tree | 2c2e4a6139ace4c08321d1a5842adde81fc48671 /src/async_wrap.cc | |
parent | 90b05382734aca10b51b187eb955a964cbcaed74 (diff) |
src: refactor emit before/after/promiseResolve
Currently EmitBefore, EmitAfter, EmitPromiseResolve are very similar.
This commit suggests extracting the code they have in common to a new
function to reduce code duplication.
PR-URL: https://github.com/nodejs/node/pull/19295
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'src/async_wrap.cc')
-rw-r--r-- | src/async_wrap.cc | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/src/async_wrap.cc b/src/async_wrap.cc index b6776364a53..83882d9f805 100644 --- a/src/async_wrap.cc +++ b/src/async_wrap.cc @@ -162,19 +162,25 @@ static void DestroyAsyncIdsCallback(void* arg) { } -void AsyncWrap::EmitPromiseResolve(Environment* env, double async_id) { +void Emit(Environment* env, double async_id, AsyncHooks::Fields type, + Local<Function> fn) { AsyncHooks* async_hooks = env->async_hooks(); - if (async_hooks->fields()[AsyncHooks::kPromiseResolve] == 0) + if (async_hooks->fields()[type] == 0) return; Local<Value> async_id_value = Number::New(env->isolate(), async_id); - Local<Function> fn = env->async_hooks_promise_resolve_function(); FatalTryCatch try_catch(env); USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value)); } +void AsyncWrap::EmitPromiseResolve(Environment* env, double async_id) { + Emit(env, async_id, AsyncHooks::kPromiseResolve, + env->async_hooks_promise_resolve_function()); +} + + void AsyncWrap::EmitTraceEventBefore() { switch (provider_type()) { #define V(PROVIDER) \ @@ -192,15 +198,8 @@ void AsyncWrap::EmitTraceEventBefore() { void AsyncWrap::EmitBefore(Environment* env, double async_id) { - AsyncHooks* async_hooks = env->async_hooks(); - - if (async_hooks->fields()[AsyncHooks::kBefore] == 0) - return; - - Local<Value> async_id_value = Number::New(env->isolate(), async_id); - Local<Function> fn = env->async_hooks_before_function(); - FatalTryCatch try_catch(env); - USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value)); + Emit(env, async_id, AsyncHooks::kBefore, + env->async_hooks_before_function()); } @@ -221,17 +220,10 @@ void AsyncWrap::EmitTraceEventAfter() { void AsyncWrap::EmitAfter(Environment* env, double async_id) { - AsyncHooks* async_hooks = env->async_hooks(); - - if (async_hooks->fields()[AsyncHooks::kAfter] == 0) - return; - // If the user's callback failed then the after() hooks will be called at the // end of _fatalException(). - Local<Value> async_id_value = Number::New(env->isolate(), async_id); - Local<Function> fn = env->async_hooks_after_function(); - FatalTryCatch try_catch(env); - USE(fn->Call(env->context(), Undefined(env->isolate()), 1, &async_id_value)); + Emit(env, async_id, AsyncHooks::kAfter, + env->async_hooks_after_function()); } class PromiseWrap : public AsyncWrap { |