summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2019-05-12 02:39:41 +0200
committerRuben Bridgewater <ruben@bridgewater.de>2019-05-16 15:01:12 +0200
commita92ad36894dc91af765e7cc9bfce4a7ea64c27fa (patch)
tree22edec65f99f7f8fd9bf2ab81ac074bbef4f9f61
parent35fc1b4e9668b2e085e06e3a97afd97c825db2c0 (diff)
downloadnode-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.js18
-rw-r--r--test/parallel/test-util-inspect.js4
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.