diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2019-05-12 02:39:41 +0200 |
---|---|---|
committer | Ruben Bridgewater <ruben@bridgewater.de> | 2019-05-16 15:01:12 +0200 |
commit | a92ad36894dc91af765e7cc9bfce4a7ea64c27fa (patch) | |
tree | 22edec65f99f7f8fd9bf2ab81ac074bbef4f9f61 | |
parent | 35fc1b4e9668b2e085e06e3a97afd97c825db2c0 (diff) | |
download | node-new-a92ad36894dc91af765e7cc9bfce4a7ea64c27fa.tar.gz |
util: reconstruct constructor in more casesreconstruct-constructor-inspect
This makes sure the constructor is reconstructed in cases where we
otherwise would not be able to detect the actual constructor anymore.
That way some `util.inspect` output is improved.
PR-URL: https://github.com/nodejs/node/pull/27668
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com>
-rw-r--r-- | lib/internal/util/inspect.js | 18 | ||||
-rw-r--r-- | test/parallel/test-util-inspect.js | 4 |
2 files changed, 17 insertions, 5 deletions
diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index 1e7277ef38..850740d3c2 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -727,12 +727,20 @@ function formatRaw(ctx, value, recurseTimes, typedArray) { braces = getIteratorBraces('Set', tag); formatter = formatIterator; // Handle other regular objects again. - } else if (keys.length === 0) { - if (isExternal(value)) - return ctx.stylize('[External]', 'special'); - return `${getPrefix(constructor, tag, 'Object')}{}`; } else { - braces[0] = `${getPrefix(constructor, tag, 'Object')}{`; + let fallback = ''; + if (constructor === null) { + fallback = internalGetConstructorName(value); + if (fallback === tag) { + fallback = 'Object'; + } + } + if (keys.length === 0) { + if (isExternal(value)) + return ctx.stylize('[External]', 'special'); + return `${getPrefix(constructor, tag, fallback)}{}`; + } + braces[0] = `${getPrefix(constructor, tag, fallback)}{`; } } } diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js index fc69f41ef4..93b1d44398 100644 --- a/test/parallel/test-util-inspect.js +++ b/test/parallel/test-util-inspect.js @@ -1156,6 +1156,10 @@ if (typeof Symbol !== 'undefined') { util.inspect({ a: { b: new ArraySubclass([1, [2], 3]) } }, { depth: 1 }), '{ a: { b: [ArraySubclass] } }' ); + assert.strictEqual( + util.inspect(Object.setPrototypeOf(x, null)), + '[ObjectSubclass: null prototype] { foo: 42 }' + ); } // Empty and circular before depth. |