summaryrefslogtreecommitdiff
path: root/as/as.go
diff options
context:
space:
mode:
Diffstat (limited to 'as/as.go')
-rw-r--r--as/as.go20
1 files changed, 17 insertions, 3 deletions
diff --git a/as/as.go b/as/as.go
index bcc7cf8..9a2cc11 100644
--- a/as/as.go
+++ b/as/as.go
@@ -2,30 +2,44 @@ package main
import (
"fmt"
+ "os"
"strings"
"github.com/holiman/uint256"
-
)
func Assemble(code string) []byte {
bytecode := make([]byte, 0)
t := strings.Fields(code)
+ push := byte(0)
for i := range t {
x, found := OpcodeStrings[t[i]]
if found {
- bytecode = append(bytecode, x)
+ push = (&x).IsPush()
+ fmt.Printf("token: %s, opcode: 0x%x, push = %d\n", t[i], int(x), int(push))
+ bytecode = append(bytecode, byte(x))
} else {
+ if push == 0 {
+ fmt.Fprintf(os.Stderr, "unexpected token: %s\n", t[i])
+ os.Exit(1)
+ }
var n *uint256.Int = nil
if len(t[i]) > 1 && t[i][1] == 'x' {
n, _ = uint256.FromHex(t[i])
} else {
n, _ = uint256.FromDecimal(t[i])
}
+
+ if (t[i] == "PUSH") {
+ push = byte(n.ByteLen())
+ }
+
+
b := n.Bytes32()
- bytecode = append(bytecode, b[:]...)
+ fmt.Printf("token: NUMBER, value: %s, push = %d\n", t[i], int(push), b[32 - push:])
+ bytecode = append(bytecode, b[32-push:]...)
}
}
return bytecode