From 92eaa98e8381bef5224ffe864aa1cd4288af4d12 Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Mon, 19 May 2014 17:01:40 +0200
Subject: Added js interpret mode

---
 ethereum/config.go   |  2 ++
 ethereum/ethereum.go | 19 ++++++++++++++++++-
 ethereum/js_lib.go   | 11 +++++++++--
 3 files changed, 29 insertions(+), 3 deletions(-)

(limited to 'ethereum')

diff --git a/ethereum/config.go b/ethereum/config.go
index 5ddc8e635..090c022b0 100644
--- a/ethereum/config.go
+++ b/ethereum/config.go
@@ -21,6 +21,7 @@ var LogFile string
 var DataDir string
 var NonInteractive bool
 var StartJsConsole bool
+var InputFile string
 
 func Init() {
 	flag.BoolVar(&StartConsole, "c", false, "debug and testing console")
@@ -40,6 +41,7 @@ func Init() {
 	flag.StringVar(&ImportKey, "import", "", "imports the given private key (hex)")
 	flag.IntVar(&MaxPeer, "x", 5, "maximum desired peers")
 	flag.BoolVar(&StartJsConsole, "js", false, "exp")
+	flag.StringVar(&InputFile, "e", "", "Run javascript file")
 
 	flag.Parse()
 }
diff --git a/ethereum/ethereum.go b/ethereum/ethereum.go
index 1cbb61002..f680b5416 100644
--- a/ethereum/ethereum.go
+++ b/ethereum/ethereum.go
@@ -6,6 +6,7 @@ import (
 	"github.com/ethereum/eth-go/ethchain"
 	"github.com/ethereum/eth-go/ethutil"
 	"github.com/ethereum/go-ethereum/utils"
+	"io/ioutil"
 	"log"
 	"os"
 	"os/signal"
@@ -51,7 +52,7 @@ func main() {
 	var logSys *log.Logger
 	flags := log.LstdFlags
 
-	if StartJsConsole {
+	if StartJsConsole || len(InputFile) > 0 {
 		ethutil.ReadConfig(DataDir, ethutil.LogFile)
 	} else {
 		ethutil.ReadConfig(DataDir, ethutil.LogFile|ethutil.LogStd)
@@ -157,6 +158,22 @@ save these words so you can restore your account later: %s
 		RegisterInterrupt(func(os.Signal) {
 			repl.Stop()
 		})
+	} else if len(InputFile) > 0 {
+		file, err := os.Open(InputFile)
+		if err != nil {
+			ethutil.Config.Log.Fatal(err)
+		}
+
+		content, err := ioutil.ReadAll(file)
+		if err != nil {
+			ethutil.Config.Log.Fatal(err)
+		}
+
+		re := NewJSRE(ethereum)
+		RegisterInterrupt(func(os.Signal) {
+			re.Stop()
+		})
+		re.Run(string(content))
 	}
 
 	if StartRpc {
diff --git a/ethereum/js_lib.go b/ethereum/js_lib.go
index 8b59d75ca..189dcc3a0 100644
--- a/ethereum/js_lib.go
+++ b/ethereum/js_lib.go
@@ -31,6 +31,8 @@ function pp(object) {
         str += "\033[1m\033[30m" + object;
     } else if(typeof(object) === "number") {
         str += "\033[31m" + object;
+    } else if(typeof(object) === "function") {
+	str += "\033[35m[Function]";
     } else {
         str += object;                    
     }
@@ -40,7 +42,12 @@ function pp(object) {
     return str;
 }
 
-function prettyPrint(object) {
-    console.log(pp(object))
+function prettyPrint(/* */) {
+    var args = arguments;
+    for(var i = 0, l = args.length; i < l; i++) {
+	    console.log(pp(args[i]))
+    }
 }
+
+var print = prettyPrint;
 `
-- 
cgit v1.2.3