aboutsummaryrefslogtreecommitdiffstats
path: root/ethutil/parsing.go
diff options
context:
space:
mode:
Diffstat (limited to 'ethutil/parsing.go')
-rw-r--r--ethutil/parsing.go46
1 files changed, 35 insertions, 11 deletions
diff --git a/ethutil/parsing.go b/ethutil/parsing.go
index f24402623..8929f0829 100644
--- a/ethutil/parsing.go
+++ b/ethutil/parsing.go
@@ -84,20 +84,30 @@ func IsOpCode(s string) bool {
return false
}
-func CompileInstr(s string) ([]byte, error) {
- isOp := IsOpCode(s)
- if isOp {
- return []byte{OpCodes[s]}, nil
- }
+func CompileInstr(s interface{}) ([]byte, error) {
+ switch s.(type) {
+ case string:
+ str := s.(string)
+ isOp := IsOpCode(str)
+ if isOp {
+ return []byte{OpCodes[str]}, nil
+ }
+
+ num := new(big.Int)
+ _, success := num.SetString(str, 0)
+ // Assume regular bytes during compilation
+ if !success {
+ num.SetBytes([]byte(str))
+ }
- num := new(big.Int)
- _, success := num.SetString(s, 0)
- // Assume regular bytes during compilation
- if !success {
- num.SetBytes([]byte(s))
+ return num.Bytes(), nil
+ case int:
+ return big.NewInt(int64(s.(int))).Bytes(), nil
+ case []byte:
+ return BigD(s.([]byte)).Bytes(), nil
}
- return num.Bytes(), nil
+ return nil, nil
}
func Instr(instr string) (int, []string, error) {
@@ -118,3 +128,17 @@ func Instr(instr string) (int, []string, error) {
return op, args[1:7], nil
}
+
+// Script compilation functions
+// Compiles strings to machine code
+func Compile(instructions ...interface{}) (script []string) {
+ script = make([]string, len(instructions))
+
+ for i, val := range instructions {
+ instr, _ := CompileInstr(val)
+
+ script[i] = string(instr)
+ }
+
+ return
+}