Author: Anton Gulenko <[email protected]>
Branch: storage
Changeset: r860:a5b744a0ec04
Date: 2014-07-01 17:21 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/a5b744a0ec04/
Log: Using 4 bytes to encode object size due to large objects in Squeak
image.
diff --git a/spyvm/storage_logger.py b/spyvm/storage_logger.py
--- a/spyvm/storage_logger.py
+++ b/spyvm/storage_logger.py
@@ -71,19 +71,26 @@
assert new_storage in storage_map, "Cannot handle new-storage type %s" %
new_storage
bytes.append(storage_map[new_storage])
- # Next: 2 bytes encoding object size (big endian)
- assert size < 2**16, "Object of type %s too large (size %d)" % (classname,
size)
+ # Next: 4 bytes encoding object size (big endian)
+ # Assert not compiling in RPython
+ # assert size < 2**32, "Object of type %s too large (size %d)" %
(classname, size)
mask = (1<<8)-1
- bytes.append(size & mask)
+ shift = 0
+ bytes.append((size & mask) >> shift)
mask = mask<<8
- bytes.append((size & mask) >> 8)
+ shift += 8
+ bytes.append((size & mask) >> shift)
+ mask = mask<<8
+ shift += 8
+ bytes.append((size & mask) >> shift)
+ mask = mask<<8
+ shift += 8
+ bytes.append((size & mask) >> shift)
# Next: classname string plus terminating null-character
- i = 5
if classname:
for c in classname:
bytes.append(ord(c))
- i += 1
bytes.append(0)
# No simpler way for RPython's sake.
diff --git a/spyvm/tool/storagelog_parser.py b/spyvm/tool/storagelog_parser.py
--- a/spyvm/tool/storagelog_parser.py
+++ b/spyvm/tool/storagelog_parser.py
@@ -57,9 +57,9 @@
old_storage = storage_map[old_storage_byte]
new_storage = storage_map[new_storage_byte]
- # Next 2 bytes: object size (big endian)
- size_bytes = file.read(2)
- size = int(ord(size_bytes[0]) + (ord(size_bytes[1])<<8))
+ # Next 4 bytes: object size (big endian)
+ size_bytes = file.read(4)
+ size = int(ord(size_bytes[0]) + (ord(size_bytes[1])<<8) +
(ord(size_bytes[2])<<16) + (ord(size_bytes[3])<<24))
# Last: classname, nul-terminated
classname = ""
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit