diff options
author | obscuren <geffobscura@gmail.com> | 2014-07-16 02:34:25 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-07-16 02:34:25 +0800 |
commit | 28948d061cfc14d7a5da307a12ebd504b78d2dbb (patch) | |
tree | 168772cef16e9fb7eea6727d4ae254097d277ce1 /ethereum/repl_darwin.go | |
parent | 288f1c5387c1a0a8863499389e8a7ca7e3068208 (diff) | |
download | go-tangerine-28948d061cfc14d7a5da307a12ebd504b78d2dbb.tar go-tangerine-28948d061cfc14d7a5da307a12ebd504b78d2dbb.tar.gz go-tangerine-28948d061cfc14d7a5da307a12ebd504b78d2dbb.tar.bz2 go-tangerine-28948d061cfc14d7a5da307a12ebd504b78d2dbb.tar.lz go-tangerine-28948d061cfc14d7a5da307a12ebd504b78d2dbb.tar.xz go-tangerine-28948d061cfc14d7a5da307a12ebd504b78d2dbb.tar.zst go-tangerine-28948d061cfc14d7a5da307a12ebd504b78d2dbb.zip |
Moved the repl to a new package
Diffstat (limited to 'ethereum/repl_darwin.go')
-rw-r--r-- | ethereum/repl_darwin.go | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/ethereum/repl_darwin.go b/ethereum/repl_darwin.go deleted file mode 100644 index 62b40059a..000000000 --- a/ethereum/repl_darwin.go +++ /dev/null @@ -1,123 +0,0 @@ -package main - -// #cgo darwin CFLAGS: -I/usr/local/opt/readline/include -// #cgo darwin LDFLAGS: -L/usr/local/opt/readline/lib -// #cgo LDFLAGS: -lreadline -// #include <stdio.h> -// #include <stdlib.h> -// #include <readline/readline.h> -// #include <readline/history.h> -import "C" -import ( - "os" - "os/signal" - "strings" - "syscall" - "unsafe" -) - -func initReadLine() { - C.rl_catch_sigwinch = 0 - C.rl_catch_signals = 0 - c := make(chan os.Signal, 1) - signal.Notify(c, syscall.SIGWINCH) - signal.Notify(c, os.Interrupt) - go func() { - for sig := range c { - switch sig { - case syscall.SIGWINCH: - C.rl_resize_terminal() - - case os.Interrupt: - C.rl_cleanup_after_signal() - default: - - } - } - }() -} - -func readLine(prompt *string) *string { - var p *C.char - - //readline allows an empty prompt(NULL) - if prompt != nil { - p = C.CString(*prompt) - } - - ret := C.readline(p) - - if p != nil { - C.free(unsafe.Pointer(p)) - } - - if ret == nil { - return nil - } //EOF - - s := C.GoString(ret) - C.free(unsafe.Pointer(ret)) - return &s -} - -func addHistory(s string) { - p := C.CString(s) - C.add_history(p) - C.free(unsafe.Pointer(p)) -} - -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() { - initReadLine() -L: - for { - switch result := readLine(&self.prompt); true { - case result == nil: - break L - - case *result != "": - str += *result + "\n" - - self.setIndent() - - if indentCount <= 0 { - if *result == "exit" { - self.Stop() - break L - } - - hist := str[:len(str)-1] - addHistory(hist) //allow user to recall this line - self.history.WriteString(str) - - self.parseInput(str) - - str = "" - } - } - } -} - -func (self *JSRepl) PrintValue(v interface{}) { - method, _ := self.re.vm.Get("prettyPrint") - v, err := self.re.vm.ToValue(v) - if err == nil { - method.Call(method, v) - } -} |