aboutsummaryrefslogtreecommitdiffstats
path: root/ethereum/repl_darwin.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-05-19 19:04:31 +0800
committerobscuren <geffobscura@gmail.com>2014-05-19 19:04:31 +0800
commit16421106d47efb65331ed9f0499f12038158cbf1 (patch)
tree2a525671c3022b9465c009dfe0c8979f9389c53c /ethereum/repl_darwin.go
parent3b7707c3fd2f99ee1019b8214cba1784af519f53 (diff)
downloaddexon-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.go37
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)
+ }
}
}
}