diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-06-09 22:29:32 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-06-09 22:29:32 +0800 |
commit | fda49f2b5216c7d5655d19efe54651593874adf8 (patch) | |
tree | 1ff3b8badd7f6b6b3f90b7a885dbad60d960d193 | |
parent | c71ab2a6a33685af5097aad86105cab6f5a5e131 (diff) | |
parent | d6f4c515f5a1fa8818bb82beff24f179a9162b0b (diff) | |
download | go-tangerine-fda49f2b5216c7d5655d19efe54651593874adf8.tar.gz go-tangerine-fda49f2b5216c7d5655d19efe54651593874adf8.tar.zst go-tangerine-fda49f2b5216c7d5655d19efe54651593874adf8.zip |
Merge pull request #1213 from karalabe/polish-console-prettyprinter
jsre: patch up the pretty printer to have a decent look
-rw-r--r-- | jsre/pp_js.go | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/jsre/pp_js.go b/jsre/pp_js.go index 5c09b2586..20821e4a1 100644 --- a/jsre/pp_js.go +++ b/jsre/pp_js.go @@ -26,19 +26,19 @@ function pp(object, indent) { } else if(typeof(object) === "object") { str += "{\n"; indent += " "; - var last = getFields(object).pop() - getFields(object).forEach(function (k) { - str += indent + k + ": "; + + var fields = getFields(object); + var last = fields[fields.length - 1]; + fields.forEach(function (key) { + str += indent + key + ": "; try { - str += pp(object[k], indent); + str += pp(object[key], indent); } catch (e) { str += pp(e, indent); } - - if(k !== last) { + if(key !== last) { str += ","; } - str += "\n"; }); str += indent.substr(2, indent.length) + "}"; @@ -49,7 +49,7 @@ function pp(object, indent) { } else if(typeof(object) === "number") { str += "\033[31m" + object; } else if(typeof(object) === "function") { - str += "\033[35m[Function]"; + str += "\033[35m" + object.toString().split(" {")[0]; } else { str += object; } @@ -70,15 +70,32 @@ var redundantFields = [ ]; var getFields = function (object) { - var result = Object.getOwnPropertyNames(object); + var members = Object.getOwnPropertyNames(object); if (object.constructor && object.constructor.prototype) { - result = result.concat(Object.getOwnPropertyNames(object.constructor.prototype)); + members = members.concat(Object.getOwnPropertyNames(object.constructor.prototype)); } - return result.filter(function (field) { + + var fields = members.filter(function (member) { + return !isMemberFunction(object, member) + }).sort() + var funcs = members.filter(function (member) { + return isMemberFunction(object, member) + }).sort() + + var results = fields.concat(funcs); + return results.filter(function (field) { return redundantFields.indexOf(field) === -1; }); }; +var isMemberFunction = function(object, member) { + try { + return typeof(object[member]) === "function"; + } catch(e) { + return false; + } +} + var isBigNumber = function (object) { return typeof BigNumber !== 'undefined' && object instanceof BigNumber; }; |