aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ethereum/javascript_console.go5
-rw-r--r--ethereum/repl_darwin.go37
-rw-r--r--ethereum/repl_windows.go2
3 files changed, 35 insertions, 9 deletions
diff --git a/ethereum/javascript_console.go b/ethereum/javascript_console.go
index 884b9a629..1e1ae0e48 100644
--- a/ethereum/javascript_console.go
+++ b/ethereum/javascript_console.go
@@ -101,14 +101,15 @@ func (self *JSRE) Run(code string) (otto.Value, error) {
type JSRepl struct {
re *JSRE
+
+ prompt string
}
func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
- return &JSRepl{re: NewJSRE(ethereum)}
+ return &JSRepl{re: NewJSRE(ethereum), prompt: "> "}
}
func (self *JSRepl) Start() {
- fmt.Println("Eth JavaScript console")
self.read()
}
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)
+ }
}
}
}
diff --git a/ethereum/repl_windows.go b/ethereum/repl_windows.go
index c65bb1cb4..c42fd6e6a 100644
--- a/ethereum/repl_windows.go
+++ b/ethereum/repl_windows.go
@@ -9,7 +9,7 @@ import (
func (self *JSRepl) read() {
reader := bufio.NewReader(os.Stdin)
for {
- fmt.Printf("eth >>> ")
+ fmt.Printf(self.prompt)
str, _, err := reader.ReadLine()
if err != nil {
fmt.Println("Error reading input", err)