Skip to content

Commit 90ad28a

Browse files
committed
Use slightly faster datastructures for CodeStream internally.
1 parent 5055f5b commit 90ad28a

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

eth/vm/code_stream.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,24 @@
1515
class CodeStream(object):
1616
stream = None
1717
depth_processed = None
18+
_len = None
19+
_value = None
1820

1921
logger = logging.getLogger('eth.vm.CodeStream')
2022

2123
def __init__(self, code_bytes: bytes) -> None:
2224
validate_is_bytes(code_bytes, title="CodeStream bytes")
2325
self.stream = io.BytesIO(code_bytes)
26+
self._value = code_bytes
27+
self._len = len(code_bytes)
2428
self.invalid_positions = set() # type: Set[int]
2529
self.depth_processed = 0
2630

2731
def read(self, size: int) -> bytes:
2832
return self.stream.read(size)
2933

3034
def __len__(self) -> int:
31-
return len(self.stream.getvalue())
35+
return self._len
3236

3337
def __iter__(self) -> 'CodeStream':
3438
return self
@@ -37,7 +41,7 @@ def __next__(self) -> int:
3741
return self.next()
3842

3943
def __getitem__(self, i: int) -> int:
40-
return self.stream.getvalue()[i]
44+
return self._value[i]
4145

4246
def next(self) -> int:
4347
next_opcode_as_byte = self.read(1)

0 commit comments

Comments
 (0)