@@ -20,6 +20,7 @@ import (
2020 "math/bits"
2121 "testing"
2222
23+ "github.com/ethereum/go-ethereum/common"
2324 "github.com/ethereum/go-ethereum/crypto"
2425)
2526
@@ -52,7 +53,15 @@ func TestJumpDestAnalysis(t *testing.T) {
5253 {[]byte {byte (PUSH32 )}, 0b0000_0001 , 4 },
5354 }
5455 for i , test := range tests {
55- ret := codeBitmap (test .code )
56+ var (
57+ contract Contract
58+ addr common.Address
59+ hash common.Hash
60+ header EOF1Header
61+ )
62+ contract .SetCallCode (& addr , hash , test .code , & header )
63+
64+ ret := codeBitmap (& contract )
5665 if ret [test .which ] != test .exp {
5766 t .Fatalf ("test %d: expected %x, got %02x" , i , test .exp , ret [test .which ])
5867 }
@@ -64,10 +73,17 @@ const analysisCodeSize = 1200 * 1024
6473func BenchmarkJumpdestAnalysis_1200k (bench * testing.B ) {
6574 // 1.4 ms
6675 code := make ([]byte , analysisCodeSize )
67- bench .SetBytes (analysisCodeSize )
76+ var (
77+ contract Contract
78+ addr common.Address
79+ hash common.Hash
80+ header EOF1Header
81+ )
82+ contract .SetCallCode (& addr , hash , code , & header )
6883 bench .ResetTimer ()
84+ bench .SetBytes (analysisCodeSize )
6985 for i := 0 ; i < bench .N ; i ++ {
70- codeBitmap (code )
86+ codeBitmap (& contract )
7187 }
7288 bench .StopTimer ()
7389}
@@ -83,20 +99,27 @@ func BenchmarkJumpdestHashing_1200k(bench *testing.B) {
8399}
84100
85101func BenchmarkJumpdestOpAnalysis (bench * testing.B ) {
86- var op OpCode
102+ var (
103+ contract Contract
104+ addr common.Address
105+ hash common.Hash
106+ header EOF1Header
107+ op OpCode
108+ )
87109 bencher := func (b * testing.B ) {
88110 code := make ([]byte , analysisCodeSize )
89111 b .SetBytes (analysisCodeSize )
90112 for i := range code {
91113 code [i ] = byte (op )
92114 }
93115 bits := make (bitvec , len (code )/ 8 + 1 + 4 )
116+ contract .SetCallCode (& addr , hash , code , & header )
94117 b .ResetTimer ()
95118 for i := 0 ; i < b .N ; i ++ {
96119 for j := range bits {
97120 bits [j ] = 0
98121 }
99- codeBitmapInternal (code , bits )
122+ codeBitmapInternal (& contract , bits )
100123 }
101124 }
102125 for op = PUSH1 ; op <= PUSH32 ; op ++ {
0 commit comments