aboutsummaryrefslogtreecommitdiffstats
path: root/ethutil/script_unix.go
diff options
context:
space:
mode:
Diffstat (limited to 'ethutil/script_unix.go')
-rw-r--r--ethutil/script_unix.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/ethutil/script_unix.go b/ethutil/script_unix.go
new file mode 100644
index 000000000..bd087e7e0
--- /dev/null
+++ b/ethutil/script_unix.go
@@ -0,0 +1,47 @@
+package ethutil
+
+import (
+ "fmt"
+ "strings"
+
+ "github.com/obscuren/mutan"
+ "github.com/obscuren/mutan/backends"
+ "github.com/obscuren/serpent-go"
+)
+
+// General compile function
+func Compile(script string, silent bool) (ret []byte, err error) {
+ if len(script) > 2 {
+ line := strings.Split(script, "\n")[0]
+
+ if len(line) > 1 && line[0:2] == "#!" {
+ switch line {
+ case "#!serpent":
+ byteCode, err := serpent.Compile(script)
+ if err != nil {
+ return nil, err
+ }
+
+ return byteCode, nil
+ }
+ } else {
+
+ compiler := mutan.NewCompiler(backend.NewEthereumBackend())
+ compiler.Silent = silent
+ byteCode, errors := compiler.Compile(strings.NewReader(script))
+ if len(errors) > 0 {
+ var errs string
+ for _, er := range errors {
+ if er != nil {
+ errs += er.Error()
+ }
+ }
+ return nil, fmt.Errorf("%v", errs)
+ }
+
+ return byteCode, nil
+ }
+ }
+
+ return nil, nil
+}