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 <info@bnoordhuis.nl>
This commit is contained in:
Evan Lucas 2015-10-05 20:44:09 -05:00
parent 87d26152b4
commit a1bda1b4de
2 changed files with 7 additions and 5 deletions

View File

@ -6,7 +6,6 @@ const internalUtil = require('internal/util');
const binding = process.binding('util'); const binding = process.binding('util');
var Debug; var Debug;
var ObjectIsPromise;
const formatRegExp = /%[sdj%]/g; const formatRegExp = /%[sdj%]/g;
exports.format = function(f) { exports.format = function(f) {
@ -189,16 +188,14 @@ function getConstructorOf(obj) {
function ensureDebugIsInitialized() { function ensureDebugIsInitialized() {
if (Debug === undefined) { if (Debug === undefined) {
const runInDebugContext = require('vm').runInDebugContext; const runInDebugContext = require('vm').runInDebugContext;
const result = runInDebugContext('[Debug, ObjectIsPromise]'); Debug = runInDebugContext('Debug');
Debug = result[0];
ObjectIsPromise = result[1];
} }
} }
function inspectPromise(p) { function inspectPromise(p) {
ensureDebugIsInitialized(); ensureDebugIsInitialized();
if (!ObjectIsPromise(p)) if (!binding.isPromise(p))
return null; return null;
const mirror = Debug.MakeMirror(p, true); const mirror = Debug.MakeMirror(p, true);
return {status: mirror.status(), value: mirror.promiseValue().value_}; return {status: mirror.status(), value: mirror.promiseValue().value_};

View File

@ -23,6 +23,10 @@ static void IsSetIterator(const FunctionCallbackInfo<Value>& args) {
args.GetReturnValue().Set(args[0]->IsSetIterator()); args.GetReturnValue().Set(args[0]->IsSetIterator());
} }
static void IsPromise(const FunctionCallbackInfo<Value>& args) {
CHECK_EQ(1, args.Length());
args.GetReturnValue().Set(args[0]->IsPromise());
}
void Initialize(Local<Object> target, void Initialize(Local<Object> target,
Local<Value> unused, Local<Value> unused,
@ -30,6 +34,7 @@ void Initialize(Local<Object> target,
Environment* env = Environment::GetCurrent(context); Environment* env = Environment::GetCurrent(context);
env->SetMethod(target, "isMapIterator", IsMapIterator); env->SetMethod(target, "isMapIterator", IsMapIterator);
env->SetMethod(target, "isSetIterator", IsSetIterator); env->SetMethod(target, "isSetIterator", IsSetIterator);
env->SetMethod(target, "isPromise", IsPromise);
} }
} // namespace util } // namespace util