aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-08-17 20:55:09 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-08-17 20:55:09 +0800
commit12805c738c2d1132ac042ad75e532607f7130a17 (patch)
treed2e49f98855fa1ba4073fa6cea6afc7934283db3
parentf6367548e4a28fcadbb6f669aa39d27109c07a56 (diff)
parent1086e2f298215cb0d4973a2c10ae9c9c8fd38462 (diff)
downloadgo-tangerine-12805c738c2d1132ac042ad75e532607f7130a17.tar
go-tangerine-12805c738c2d1132ac042ad75e532607f7130a17.tar.gz
go-tangerine-12805c738c2d1132ac042ad75e532607f7130a17.tar.bz2
go-tangerine-12805c738c2d1132ac042ad75e532607f7130a17.tar.lz
go-tangerine-12805c738c2d1132ac042ad75e532607f7130a17.tar.xz
go-tangerine-12805c738c2d1132ac042ad75e532607f7130a17.tar.zst
go-tangerine-12805c738c2d1132ac042ad75e532607f7130a17.zip
Merge pull request #1667 from fjl/pretty-printer-improvements
jsre: pretty printer improvements
-rw-r--r--jsre/jsre.go1
-rw-r--r--jsre/pretty.go23
2 files changed, 18 insertions, 6 deletions
diff --git a/jsre/jsre.go b/jsre/jsre.go
index bb0cc71ed..0db9e33fc 100644
--- a/jsre/jsre.go
+++ b/jsre/jsre.go
@@ -66,6 +66,7 @@ func New(assetPath string) *JSRE {
re.loopWg.Add(1)
go re.runEventLoop()
re.Set("loadScript", re.loadScript)
+ re.Set("inspect", prettyPrintJS)
return re
}
diff --git a/jsre/pretty.go b/jsre/pretty.go
index cf04deec6..99aa9b33e 100644
--- a/jsre/pretty.go
+++ b/jsre/pretty.go
@@ -51,7 +51,15 @@ var boringKeys = map[string]bool{
// prettyPrint writes value to standard output.
func prettyPrint(vm *otto.Otto, value otto.Value) {
- ppctx{vm}.printValue(value, 0)
+ ppctx{vm}.printValue(value, 0, false)
+}
+
+func prettyPrintJS(call otto.FunctionCall) otto.Value {
+ for _, v := range call.ArgumentList {
+ prettyPrint(call.Otto, v)
+ fmt.Println()
+ }
+ return otto.UndefinedValue()
}
type ppctx struct{ vm *otto.Otto }
@@ -60,10 +68,10 @@ func (ctx ppctx) indent(level int) string {
return strings.Repeat(indentString, level)
}
-func (ctx ppctx) printValue(v otto.Value, level int) {
+func (ctx ppctx) printValue(v otto.Value, level int, inArray bool) {
switch {
case v.IsObject():
- ctx.printObject(v.Object(), level)
+ ctx.printObject(v.Object(), level, inArray)
case v.IsNull():
specialColor.Print("null")
case v.IsUndefined():
@@ -84,7 +92,7 @@ func (ctx ppctx) printValue(v otto.Value, level int) {
}
}
-func (ctx ppctx) printObject(obj *otto.Object, level int) {
+func (ctx ppctx) printObject(obj *otto.Object, level int, inArray bool) {
switch obj.Class() {
case "Array":
lv, _ := obj.Get("length")
@@ -101,7 +109,7 @@ func (ctx ppctx) printObject(obj *otto.Object, level int) {
for i := int64(0); i < len; i++ {
el, err := obj.Get(strconv.FormatInt(i, 10))
if err == nil {
- ctx.printValue(el, level+1)
+ ctx.printValue(el, level+1, true)
}
if i < len-1 {
fmt.Printf(", ")
@@ -129,12 +137,15 @@ func (ctx ppctx) printObject(obj *otto.Object, level int) {
for i, k := range keys {
v, _ := obj.Get(k)
fmt.Printf("%s%s: ", ctx.indent(level+1), k)
- ctx.printValue(v, level+1)
+ ctx.printValue(v, level+1, false)
if i < len(keys)-1 {
fmt.Printf(",")
}
fmt.Println()
}
+ if inArray {
+ level--
+ }
fmt.Printf("%s}", ctx.indent(level))
case "Function":