| 
									
										
										
										
											2015-07-07 02:54:22 +02:00
										 |  |  | // Copyright 2014 The go-ethereum Authors | 
					
						
							|  |  |  | // This file is part of go-ethereum. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // go-ethereum is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  | // it under the terms of the GNU Lesser General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // go-ethereum is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							|  |  |  | // along with go-ethereum.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-15 13:13:39 +07:00
										 |  |  | package jsre | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-15 13:13:39 +07:00
										 |  |  | const pp_js = ` | 
					
						
							| 
									
										
										
										
											2015-03-25 12:44:41 +01:00
										 |  |  | function pp(object, indent) { | 
					
						
							|  |  |  |     try { | 
					
						
							| 
									
										
										
										
											2015-04-07 05:27:47 +02:00
										 |  |  |         JSON.stringify(object) | 
					
						
							|  |  |  |     } catch(e) { | 
					
						
							|  |  |  |         return pp(e, indent); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-07 05:27:47 +02:00
										 |  |  |     var str = ""; | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  |     if(object instanceof Array) { | 
					
						
							| 
									
										
										
										
											2015-03-25 12:44:41 +01:00
										 |  |  |         str += "["; | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  |         for(var i = 0, l = object.length; i < l; i++) { | 
					
						
							| 
									
										
										
										
											2015-03-25 12:44:41 +01:00
										 |  |  |             str += pp(object[i], indent); | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if(i < l-1) { | 
					
						
							|  |  |  |                 str += ", "; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         str += " ]"; | 
					
						
							| 
									
										
										
										
											2015-04-02 01:53:33 +02:00
										 |  |  |     } else if (object instanceof Error) { | 
					
						
							| 
									
										
										
										
											2015-04-07 05:27:47 +02:00
										 |  |  |         str += "\033[31m" + "Error:\033[0m " + object.message; | 
					
						
							| 
									
										
										
										
											2015-04-02 02:13:34 +02:00
										 |  |  |     } else if (isBigNumber(object)) { | 
					
						
							|  |  |  |         str += "\033[32m'" + object.toString(10) + "'"; | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  |     } else if(typeof(object) === "object") { | 
					
						
							| 
									
										
										
										
											2015-03-25 12:44:41 +01:00
										 |  |  |         str += "{\n"; | 
					
						
							| 
									
										
										
										
											2015-04-02 01:53:33 +02:00
										 |  |  |         indent += "  "; | 
					
						
							| 
									
										
										
										
											2015-06-09 13:27:45 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         var fields = getFields(object); | 
					
						
							|  |  |  |         var last   = fields[fields.length - 1]; | 
					
						
							|  |  |  |         fields.forEach(function (key) { | 
					
						
							|  |  |  |             str += indent + key + ": "; | 
					
						
							| 
									
										
										
										
											2015-04-02 01:53:33 +02:00
										 |  |  |             try { | 
					
						
							| 
									
										
										
										
											2015-06-09 13:27:45 +03:00
										 |  |  |                 str += pp(object[key], indent); | 
					
						
							| 
									
										
										
										
											2015-04-02 01:53:33 +02:00
										 |  |  |             } catch (e) { | 
					
						
							|  |  |  |                 str += pp(e, indent); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2015-06-09 13:27:45 +03:00
										 |  |  |             if(key !== last) { | 
					
						
							| 
									
										
										
										
											2015-03-25 12:44:41 +01:00
										 |  |  |                 str += ","; | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2015-04-02 01:53:33 +02:00
										 |  |  |             str += "\n"; | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2015-03-25 12:44:41 +01:00
										 |  |  |         str += indent.substr(2, indent.length) + "}"; | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  |     } else if(typeof(object) === "string") { | 
					
						
							|  |  |  |         str += "\033[32m'" + object + "'"; | 
					
						
							|  |  |  |     } else if(typeof(object) === "undefined") { | 
					
						
							|  |  |  |         str += "\033[1m\033[30m" + object; | 
					
						
							|  |  |  |     } else if(typeof(object) === "number") { | 
					
						
							|  |  |  |         str += "\033[31m" + object; | 
					
						
							| 
									
										
										
										
											2014-05-19 17:01:40 +02:00
										 |  |  |     } else if(typeof(object) === "function") { | 
					
						
							| 
									
										
										
										
											2015-06-09 17:23:44 +03:00
										 |  |  |         str += "\033[35m" + object.toString().split(" {")[0]; | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2015-03-15 13:13:39 +07:00
										 |  |  |         str += object; | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     str += "\033[0m"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return str; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-03 01:47:05 +02:00
										 |  |  | var redundantFields = [ | 
					
						
							|  |  |  |     'valueOf', | 
					
						
							|  |  |  |     'toString', | 
					
						
							|  |  |  |     'toLocaleString', | 
					
						
							|  |  |  |     'hasOwnProperty', | 
					
						
							|  |  |  |     'isPrototypeOf', | 
					
						
							|  |  |  |     'propertyIsEnumerable', | 
					
						
							|  |  |  |     'constructor' | 
					
						
							|  |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-03 00:49:18 +02:00
										 |  |  | var getFields = function (object) { | 
					
						
							| 
									
										
										
										
											2015-06-09 17:19:56 +03:00
										 |  |  |     var members = Object.getOwnPropertyNames(object); | 
					
						
							| 
									
										
										
										
											2015-04-03 00:49:18 +02:00
										 |  |  |     if (object.constructor && object.constructor.prototype) { | 
					
						
							| 
									
										
										
										
											2015-06-09 17:19:56 +03:00
										 |  |  |         members = members.concat(Object.getOwnPropertyNames(object.constructor.prototype)); | 
					
						
							| 
									
										
										
										
											2015-04-03 00:49:18 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2015-06-09 17:19:56 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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) { | 
					
						
							| 
									
										
										
										
											2015-04-03 01:47:05 +02:00
										 |  |  |         return redundantFields.indexOf(field) === -1; | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-04-03 00:49:18 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-09 17:19:56 +03:00
										 |  |  | var isMemberFunction = function(object, member) { | 
					
						
							|  |  |  |     try { | 
					
						
							|  |  |  |         return typeof(object[member]) === "function"; | 
					
						
							|  |  |  |     } catch(e) { | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 02:13:34 +02:00
										 |  |  | var isBigNumber = function (object) { | 
					
						
							| 
									
										
										
										
											2015-07-06 08:49:09 +02:00
										 |  |  |     var result = typeof BigNumber !== 'undefined' && object instanceof BigNumber; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!result) { | 
					
						
							| 
									
										
										
										
											2015-07-08 08:03:20 +02:00
										 |  |  |     	if (typeof(object) === "object" && object.constructor != null) { | 
					
						
							| 
									
										
										
										
											2015-07-06 08:49:09 +02:00
										 |  |  | 			result = object.constructor.toString().indexOf("function BigNumber(") == 0; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return result | 
					
						
							| 
									
										
										
										
											2015-04-02 02:13:34 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-19 17:01:40 +02:00
										 |  |  | function prettyPrint(/* */) { | 
					
						
							|  |  |  |     var args = arguments; | 
					
						
							| 
									
										
										
										
											2014-10-15 02:41:26 +03:00
										 |  |  |     var ret = ""; | 
					
						
							| 
									
										
										
										
											2014-05-19 17:01:40 +02:00
										 |  |  |     for(var i = 0, l = args.length; i < l; i++) { | 
					
						
							| 
									
										
										
										
											2015-03-25 12:44:41 +01:00
										 |  |  | 	    ret += pp(args[i], "") + "\n"; | 
					
						
							| 
									
										
										
										
											2014-05-19 17:01:40 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2014-10-15 02:41:26 +03:00
										 |  |  |     return ret; | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-05-19 17:01:40 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | var print = prettyPrint; | 
					
						
							| 
									
										
										
										
											2014-05-19 16:32:45 +02:00
										 |  |  | ` |