From a1bda1b4deb08dfb3e06cb778f0db40023b18318 Mon Sep 17 00:00:00 2001 From: Evan Lucas Date: Mon, 5 Oct 2015 20:44:09 -0500 Subject: [PATCH] util: fix for inspecting promises The upgrade to v8 4.6 removes ObjectIsPromise. This change utilizes v8::Value::IsPromise to verify that the argument is indeed a promise. PR-URL: https://github.com/nodejs/node/pull/3221 Reviewed-By: Ben Noordhuis --- lib/util.js | 7 ++----- src/node_util.cc | 5 +++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/util.js b/lib/util.js index 41c5b445cbea8d..399a4ee0a23828 100644 --- a/lib/util.js +++ b/lib/util.js @@ -6,7 +6,6 @@ const internalUtil = require('internal/util'); const binding = process.binding('util'); var Debug; -var ObjectIsPromise; const formatRegExp = /%[sdj%]/g; exports.format = function(f) { @@ -189,16 +188,14 @@ function getConstructorOf(obj) { function ensureDebugIsInitialized() { if (Debug === undefined) { const runInDebugContext = require('vm').runInDebugContext; - const result = runInDebugContext('[Debug, ObjectIsPromise]'); - Debug = result[0]; - ObjectIsPromise = result[1]; + Debug = runInDebugContext('Debug'); } } function inspectPromise(p) { ensureDebugIsInitialized(); - if (!ObjectIsPromise(p)) + if (!binding.isPromise(p)) return null; const mirror = Debug.MakeMirror(p, true); return {status: mirror.status(), value: mirror.promiseValue().value_}; diff --git a/src/node_util.cc b/src/node_util.cc index cc86478e096b2f..19c3e3240a52af 100644 --- a/src/node_util.cc +++ b/src/node_util.cc @@ -23,6 +23,10 @@ static void IsSetIterator(const FunctionCallbackInfo& args) { args.GetReturnValue().Set(args[0]->IsSetIterator()); } +static void IsPromise(const FunctionCallbackInfo& args) { + CHECK_EQ(1, args.Length()); + args.GetReturnValue().Set(args[0]->IsPromise()); +} void Initialize(Local target, Local unused, @@ -30,6 +34,7 @@ void Initialize(Local target, Environment* env = Environment::GetCurrent(context); env->SetMethod(target, "isMapIterator", IsMapIterator); env->SetMethod(target, "isSetIterator", IsSetIterator); + env->SetMethod(target, "isPromise", IsPromise); } } // namespace util