diff options
author | obscuren <geffobscura@gmail.com> | 2014-05-19 19:04:31 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-05-19 19:04:31 +0800 |
commit | 16421106d47efb65331ed9f0499f12038158cbf1 (patch) | |
tree | 2a525671c3022b9465c009dfe0c8979f9389c53c /ethereum/repl_darwin.go | |
parent | 3b7707c3fd2f99ee1019b8214cba1784af519f53 (diff) | |
download | dexon-16421106d47efb65331ed9f0499f12038158cbf1.tar.gz dexon-16421106d47efb65331ed9f0499f12038158cbf1.tar.zst dexon-16421106d47efb65331ed9f0499f12038158cbf1.zip |
Added multi-line support
Diffstat (limited to 'ethereum/repl_darwin.go')
-rw-r--r-- | ethereum/repl_darwin.go | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/ethereum/repl_darwin.go b/ethereum/repl_darwin.go index b6de190e4..483d4cedf 100644 --- a/ethereum/repl_darwin.go +++ b/ethereum/repl_darwin.go @@ -6,7 +6,11 @@ package main // #include <readline/readline.h> // #include <readline/history.h> import "C" -import "unsafe" + +import ( + "strings" + "unsafe" +) func readLine(prompt *string) *string { var p *C.char @@ -37,19 +41,40 @@ func addHistory(s string) { C.free(unsafe.Pointer(p)) } -func (self *JSRepl) read() { - prompt := "eth >>> " +var indentCount = 0 +var str = "" + +func (self *JSRepl) setIndent() { + open := strings.Count(str, "{") + open += strings.Count(str, "(") + closed := strings.Count(str, "}") + closed += strings.Count(str, ")") + indentCount = open - closed + if indentCount <= 0 { + self.prompt = "> " + } else { + self.prompt = strings.Join(make([]string, indentCount*2), "..") + self.prompt += " " + } +} +func (self *JSRepl) read() { L: for { - switch result := readLine(&prompt); true { + switch result := readLine(&self.prompt); true { case result == nil: break L //exit loop case *result != "": //ignore blank lines - addHistory(*result) //allow user to recall this line + str += *result + "\n" + + self.setIndent() + + if indentCount <= 0 { + addHistory(str) //allow user to recall this line - self.parseInput(*result) + self.parseInput(str) + } } } } |