aboutsummaryrefslogtreecommitdiffstats
path: root/ethchain/stack.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-04-16 04:16:38 +0800
committerobscuren <geffobscura@gmail.com>2014-04-16 04:16:38 +0800
commitca13e3b1058f0d680b79dc1d9319d427a09493f8 (patch)
treea121191d4e43ecc41878d268f46739e121fc111b /ethchain/stack.go
parent086acd122b59071255b0c1cfae569748b1d7427a (diff)
downloadgo-tangerine-ca13e3b1058f0d680b79dc1d9319d427a09493f8.tar
go-tangerine-ca13e3b1058f0d680b79dc1d9319d427a09493f8.tar.gz
go-tangerine-ca13e3b1058f0d680b79dc1d9319d427a09493f8.tar.bz2
go-tangerine-ca13e3b1058f0d680b79dc1d9319d427a09493f8.tar.lz
go-tangerine-ca13e3b1058f0d680b79dc1d9319d427a09493f8.tar.xz
go-tangerine-ca13e3b1058f0d680b79dc1d9319d427a09493f8.tar.zst
go-tangerine-ca13e3b1058f0d680b79dc1d9319d427a09493f8.zip
Moved assembler stage processing to it's own file
Diffstat (limited to 'ethchain/stack.go')
-rw-r--r--ethchain/stack.go151
1 files changed, 4 insertions, 147 deletions
diff --git a/ethchain/stack.go b/ethchain/stack.go
index 2aca0a350..288360062 100644
--- a/ethchain/stack.go
+++ b/ethchain/stack.go
@@ -6,153 +6,6 @@ import (
"math/big"
)
-type OpCode int
-
-// Op codes
-const (
- // 0x0 range - arithmetic ops
- oSTOP = 0x00
- oADD = 0x01
- oMUL = 0x02
- oSUB = 0x03
- oDIV = 0x04
- oSDIV = 0x05
- oMOD = 0x06
- oSMOD = 0x07
- oEXP = 0x08
- oNEG = 0x09
- oLT = 0x0a
- oGT = 0x0b
- oEQ = 0x0c
- oNOT = 0x0d
-
- // 0x10 range - bit ops
- oAND = 0x10
- oOR = 0x11
- oXOR = 0x12
- oBYTE = 0x13
-
- // 0x20 range - crypto
- oSHA3 = 0x20
-
- // 0x30 range - closure state
- oADDRESS = 0x30
- oBALANCE = 0x31
- oORIGIN = 0x32
- oCALLER = 0x33
- oCALLVALUE = 0x34
- oCALLDATA = 0x35
- oCALLDATASIZE = 0x36
- oGASPRICE = 0x37
-
- // 0x40 range - block operations
- oPREVHASH = 0x40
- oCOINBASE = 0x41
- oTIMESTAMP = 0x42
- oNUMBER = 0x43
- oDIFFICULTY = 0x44
- oGASLIMIT = 0x45
-
- // 0x50 range - 'storage' and execution
- oPUSH = 0x50
- oPUSH20 = 0x80
- oPOP = 0x51
- oDUP = 0x52
- oSWAP = 0x53
- oMLOAD = 0x54
- oMSTORE = 0x55
- oMSTORE8 = 0x56
- oSLOAD = 0x57
- oSSTORE = 0x58
- oJUMP = 0x59
- oJUMPI = 0x5a
- oPC = 0x5b
- oMSIZE = 0x5c
-
- // 0x60 range - closures
- oCREATE = 0x60
- oCALL = 0x61
- oRETURN = 0x62
-
- // 0x70 range - other
- oLOG = 0x70 // XXX Unofficial
- oSUICIDE = 0x7f
-)
-
-// Since the opcodes aren't all in order we can't use a regular slice
-var opCodeToString = map[OpCode]string{
- // 0x0 range - arithmetic ops
- oSTOP: "STOP",
- oADD: "ADD",
- oMUL: "MUL",
- oSUB: "SUB",
- oDIV: "DIV",
- oSDIV: "SDIV",
- oMOD: "MOD",
- oSMOD: "SMOD",
- oEXP: "EXP",
- oNEG: "NEG",
- oLT: "LT",
- oGT: "GT",
- oEQ: "EQ",
- oNOT: "NOT",
-
- // 0x10 range - bit ops
- oAND: "AND",
- oOR: "OR",
- oXOR: "XOR",
- oBYTE: "BYTE",
-
- // 0x20 range - crypto
- oSHA3: "SHA3",
-
- // 0x30 range - closure state
- oADDRESS: "ADDRESS",
- oBALANCE: "BALANCE",
- oORIGIN: "ORIGIN",
- oCALLER: "CALLER",
- oCALLVALUE: "CALLVALUE",
- oCALLDATA: "CALLDATA",
- oCALLDATASIZE: "CALLDATASIZE",
- oGASPRICE: "TXGASPRICE",
-
- // 0x40 range - block operations
- oPREVHASH: "PREVHASH",
- oCOINBASE: "COINBASE",
- oTIMESTAMP: "TIMESTAMP",
- oNUMBER: "NUMBER",
- oDIFFICULTY: "DIFFICULTY",
- oGASLIMIT: "GASLIMIT",
-
- // 0x50 range - 'storage' and execution
- oPUSH: "PUSH",
- oPOP: "POP",
- oDUP: "DUP",
- oSWAP: "SWAP",
- oMLOAD: "MLOAD",
- oMSTORE: "MSTORE",
- oMSTORE8: "MSTORE8",
- oSLOAD: "SLOAD",
- oSSTORE: "SSTORE",
- oJUMP: "JUMP",
- oJUMPI: "JUMPI",
- oPC: "PC",
- oMSIZE: "MSIZE",
-
- // 0x60 range - closures
- oCREATE: "CREATE",
- oCALL: "CALL",
- oRETURN: "RETURN",
-
- // 0x70 range - other
- oLOG: "LOG",
- oSUICIDE: "SUICIDE",
-}
-
-func (o OpCode) String() string {
- return opCodeToString[o]
-}
-
type OpType int
const (
@@ -177,6 +30,10 @@ func (st *Stack) Data() []*big.Int {
return st.data
}
+func (st *Stack) Len() int {
+ return len(st.data)
+}
+
func (st *Stack) Pop() *big.Int {
str := st.data[len(st.data)-1]