Index: src/d8.js |
diff --git a/src/d8.js b/src/d8.js |
index c375d20698ba10e7185c373351e04979332864f5..8d55c788e2b42fa0d591ed146316c2c29dd9f365 100644 |
--- a/src/d8.js |
+++ b/src/d8.js |
@@ -13,9 +13,6 @@ |
depth = stringifyDepthLimit; |
else if (depth === 0) |
return "*"; |
- if (IS_PROXY(x)) { |
- return StringifyProxy(x, depth); |
- } |
switch (typeof x) { |
case "undefined": |
return "undefined"; |
@@ -29,56 +26,40 @@ |
return x.toString(); |
case "object": |
if (IS_NULL(x)) return "null"; |
+ if (x.constructor && x.constructor.name === "Array") { |
+ var elems = []; |
+ for (var i = 0; i < x.length; ++i) { |
+ elems.push( |
+ {}.hasOwnProperty.call(x, i) ? Stringify(x[i], depth - 1) : ""); |
+ } |
+ return "[" + elems.join(", ") + "]"; |
+ } |
try { |
- return StringifyObject(x, depth); |
- } catch(RangeError) { |
- return "{*}" |
+ var string = String(x); |
+ if (string && string !== "[object Object]") return string; |
+ } catch(e) {} |
+ var props = []; |
+ var names = Object.getOwnPropertyNames(x); |
+ names = names.concat(Object.getOwnPropertySymbols(x)); |
+ for (var i in names) { |
+ var name = names[i]; |
+ var desc = Object.getOwnPropertyDescriptor(x, name); |
+ if (IS_UNDEFINED(desc)) continue; |
+ if (IS_SYMBOL(name)) name = "[" + Stringify(name) + "]"; |
+ if ("value" in desc) { |
+ props.push(name + ": " + Stringify(desc.value, depth - 1)); |
+ } |
+ if (desc.get) { |
+ var getter = Stringify(desc.get); |
+ props.push("get " + name + getter.slice(getter.indexOf('('))); |
+ } |
+ if (desc.set) { |
+ var setter = Stringify(desc.set); |
+ props.push("set " + name + setter.slice(setter.indexOf('('))); |
+ } |
} |
+ return "{" + props.join(", ") + "}"; |
default: |
return "[crazy non-standard value]"; |
} |
} |
- |
-function StringifyObject(x, depth) { |
- if (x.constructor && x.constructor.name === "Array") { |
- var elems = []; |
- for (var i = 0; i < x.length; ++i) { |
- elems.push( |
- {}.hasOwnProperty.call(x, i) ? Stringify(x[i], depth - 1) : ""); |
- } |
- return "[" + elems.join(", ") + "]"; |
- } |
- try { |
- var string = String(x); |
- if (string && string !== "[object Object]") return string; |
- } catch(e) {} |
- var props = []; |
- var names = Object.getOwnPropertyNames(x); |
- names = names.concat(Object.getOwnPropertySymbols(x)); |
- for (var i in names) { |
- var name = names[i]; |
- var desc = Object.getOwnPropertyDescriptor(x, name); |
- if (IS_UNDEFINED(desc)) continue; |
- if (IS_SYMBOL(name)) name = "[" + Stringify(name) + "]"; |
- if ("value" in desc) { |
- props.push(name + ": " + Stringify(desc.value, depth - 1)); |
- } |
- if (desc.get) { |
- var getter = Stringify(desc.get); |
- props.push("get " + name + getter.slice(getter.indexOf('('))); |
- } |
- if (desc.set) { |
- var setter = Stringify(desc.set); |
- props.push("set " + name + setter.slice(setter.indexOf('('))); |
- } |
- } |
- return "{" + props.join(", ") + "}"; |
-} |
- |
-function StringifyProxy(proxy, depth) { |
- var proxy_type = typeof proxy; |
- return '[' + proxy_type + ' Proxy ' + Stringify({ |
- target: %JSProxyGetTarget(proxy), |
- handler: %JSProxyGetHandler(proxy) |
- }, depth-1) + ']'; |
-} |