Author: Anton Gulenko <anton.gule...@googlemail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit