summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Bevenius <daniel.bevenius@gmail.com>2018-03-13 12:03:27 +0100
committerDaniel Bevenius <daniel.bevenius@gmail.com>2018-03-16 08:02:33 +0100
commit69f8523d833466472ec262a55eeb9b18de809eb5 (patch)
tree89c0747755a6901a14a3d4bac501b0c15de1b1e8
parent9a70b2725481ef17dc8a07d6e9d3dc9f72ad0907 (diff)
downloadnode-new-69f8523d833466472ec262a55eeb9b18de809eb5.tar.gz
src: add extractPromiseWrap function
Currently PromiseHook extracts the PromiseWrap from a Local<Promise> in two places. This commit extracts that code into a function instead. PR-URL: https://github.com/nodejs/node/pull/19340 Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--src/async_wrap.cc21
1 files changed, 9 insertions, 12 deletions
diff --git a/src/async_wrap.cc b/src/async_wrap.cc
index 83882d9f80..599b4b8dcf 100644
--- a/src/async_wrap.cc
+++ b/src/async_wrap.cc
@@ -275,19 +275,20 @@ void PromiseWrap::getIsChainedPromise(Local<String> property,
info.Holder()->GetInternalField(kIsChainedPromiseField));
}
-static void PromiseHook(PromiseHookType type, Local<Promise> promise,
- Local<Value> parent, void* arg) {
- Environment* env = static_cast<Environment*>(arg);
+static PromiseWrap* extractPromiseWrap(Local<Promise> promise) {
Local<Value> resource_object_value = promise->GetInternalField(0);
- PromiseWrap* wrap = nullptr;
if (resource_object_value->IsObject()) {
- Local<Object> resource_object = resource_object_value.As<Object>();
- wrap = Unwrap<PromiseWrap>(resource_object);
+ return Unwrap<PromiseWrap>(resource_object_value.As<Object>());
}
+ return nullptr;
+}
+static void PromiseHook(PromiseHookType type, Local<Promise> promise,
+ Local<Value> parent, void* arg) {
+ Environment* env = static_cast<Environment*>(arg);
+ PromiseWrap* wrap = extractPromiseWrap(promise);
if (type == PromiseHookType::kInit || wrap == nullptr) {
bool silent = type != PromiseHookType::kInit;
- PromiseWrap* parent_wrap = nullptr;
// set parent promise's async Id as this promise's triggerAsyncId
if (parent->IsPromise()) {
@@ -295,11 +296,7 @@ static void PromiseHook(PromiseHookType type, Local<Promise> promise,
// is a chained promise, so we set parent promise's id as
// current promise's triggerAsyncId
Local<Promise> parent_promise = parent.As<Promise>();
- Local<Value> parent_resource = parent_promise->GetInternalField(0);
- if (parent_resource->IsObject()) {
- parent_wrap = Unwrap<PromiseWrap>(parent_resource.As<Object>());
- }
-
+ PromiseWrap* parent_wrap = extractPromiseWrap(parent_promise);
if (parent_wrap == nullptr) {
parent_wrap = PromiseWrap::New(env, parent_promise, nullptr, true);
}