aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm/analysis.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-03-23 23:59:09 +0800
committerobscuren <geffobscura@gmail.com>2015-03-23 23:59:09 +0800
commit0330077d76b48934ab024a309000f83c78047d8a (patch)
tree2a3ffbcd5bd941b30ed28d0eb5c30553a25324e0 /core/vm/analysis.go
parentd7eaa97a297151637af090ecb05bbd6d260d90b8 (diff)
downloaddexon-0330077d76b48934ab024a309000f83c78047d8a.tar
dexon-0330077d76b48934ab024a309000f83c78047d8a.tar.gz
dexon-0330077d76b48934ab024a309000f83c78047d8a.tar.bz2
dexon-0330077d76b48934ab024a309000f83c78047d8a.tar.lz
dexon-0330077d76b48934ab024a309000f83c78047d8a.tar.xz
dexon-0330077d76b48934ab024a309000f83c78047d8a.tar.zst
dexon-0330077d76b48934ab024a309000f83c78047d8a.zip
moved state and vm to core
Diffstat (limited to 'core/vm/analysis.go')
-rw-r--r--core/vm/analysis.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/core/vm/analysis.go b/core/vm/analysis.go
new file mode 100644
index 000000000..411df5686
--- /dev/null
+++ b/core/vm/analysis.go
@@ -0,0 +1,20 @@
+package vm
+
+import "gopkg.in/fatih/set.v0"
+
+func analyseJumpDests(code []byte) (dests *set.Set) {
+ dests = set.New()
+
+ for pc := uint64(0); pc < uint64(len(code)); pc++ {
+ var op OpCode = OpCode(code[pc])
+ switch op {
+ case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
+ a := uint64(op) - uint64(PUSH1) + 1
+
+ pc += a
+ case JUMPDEST:
+ dests.Add(pc)
+ }
+ }
+ return
+}