Skip to content

Commit f111c8b

Browse files
authored
Merge pull request #1590 from jacqueswww/minor-speed-ups
Just for fun: Minor speedup on CodeStream.
2 parents 2b25500 + 505760b commit f111c8b

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

eth/vm/code_stream.py

Lines changed: 7 additions & 3 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+
_length_cache = None
19+
_raw_code_bytes = 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._raw_code_bytes = code_bytes
27+
self._length_cache = 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._length_cache
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._raw_code_bytes[i]
4145

4246
def next(self) -> int:
4347
next_opcode_as_byte = self.read(1)
@@ -73,7 +77,7 @@ def seek(self, pc: int) -> Iterator['CodeStream']:
7377
invalid_positions = None
7478

7579
def is_valid_opcode(self, position: int) -> bool:
76-
if position >= len(self):
80+
if position >= self._length_cache:
7781
return False
7882
if position in self.invalid_positions:
7983
return False

0 commit comments

Comments
 (0)