diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-08-17 20:55:09 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-08-17 20:55:09 +0800 |
commit | 12805c738c2d1132ac042ad75e532607f7130a17 (patch) | |
tree | d2e49f98855fa1ba4073fa6cea6afc7934283db3 | |
parent | f6367548e4a28fcadbb6f669aa39d27109c07a56 (diff) | |
parent | 1086e2f298215cb0d4973a2c10ae9c9c8fd38462 (diff) | |
download | go-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.go | 1 | ||||
-rw-r--r-- | jsre/pretty.go | 23 |
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": |