Author: Tobias Pape <tob...@netshed.de> Branch: Changeset: r78:d87c899dda98 Date: 2013-02-20 17:32 +0100 http://bitbucket.org/pypy/lang-smalltalk/changeset/d87c899dda98/
Log: simplify image header peek logic. rpython does not get literal numbers >64bit, either diff --git a/spyvm/squeakimage.py b/spyvm/squeakimage.py --- a/spyvm/squeakimage.py +++ b/spyvm/squeakimage.py @@ -6,37 +6,33 @@ from rpython.rlib import objectmodel -def chrs2int(b, unsigned): +def chrs2int(b): assert len(b) == 4 first = ord(b[0]) # big endian - if not unsigned: - if first & 0x80 != 0: - first = first - 0x100 + if first & 0x80 != 0: + first = first - 0x100 return (first << 24 | ord(b[1]) << 16 | ord(b[2]) << 8 | ord(b[3])) -def swapped_chrs2int(b, unsigned): +def swapped_chrs2int(b): assert len(b) == 4 first = ord(b[3]) # little endian - if not unsigned: - if first & 0x80 != 0: - first = first - 0x100 + if first & 0x80 != 0: + first = first - 0x100 return (first << 24 | ord(b[2]) << 16 | ord(b[1]) << 8 | ord(b[0])) -def chrs2long(b, unsigned): +def chrs2long(b): assert len(b) == 8 first = ord(b[0]) # big endian - if not unsigned: - if first & 0x80 != 0: - first = first - 0x100 + if first & 0x80 != 0: + first = first - 0x100 return ( first << 56 | ord(b[1]) << 48 | ord(b[2]) << 40 | ord(b[3]) << 32 | ord(b[4]) << 24 | ord(b[5]) << 16 | ord(b[6]) << 8 | ord(b[7]) ) -def swapped_chrs2long(b, unsigned): +def swapped_chrs2long(b): assert len(b) == 8 first = ord(b[7]) # little endian - if not unsigned: - if first & 0x80 != 0: - first = first - 0x100 + if first & 0x80 != 0: + first = first - 0x100 return ( first << 56 | ord(b[6]) << 48 | ord(b[5]) << 40 | ord(b[4]) << 32 | ord(b[3]) << 24 | ord(b[2]) << 16 | ord(b[1]) << 8 | ord(b[0]) ) @@ -60,29 +56,14 @@ data_peek = self.data[self.pos:self.pos + self.word_size] if self.use_long_read: if self.swap: - return swapped_chrs2long(data_peek, False) + return swapped_chrs2long(data_peek) else: - return chrs2long(data_peek, False) + return chrs2long(data_peek) else: if self.swap: - return swapped_chrs2int(data_peek, False) + return swapped_chrs2int(data_peek) else: - return chrs2int(data_peek, False) - - def peek_unsigned(self): - if self.pos >= len(self.data): - raise IndexError - data_peek = self.data[self.pos:self.pos + self.word_size] - if self.use_long_read: - if self.swap: - return swapped_chrs2long(data_peek, True) - else: - return chrs2long(data_peek, True) - else: - if self.swap: - return swapped_chrs2int(data_peek, True) - else: - return chrs2int(data_peek, True) + return chrs2int(data_peek) def next(self): @@ -152,12 +133,18 @@ 0x68190000: ImageVersion(6504, False, False, True, False), 0x00001969: ImageVersion(6505, True, False, True, True ), 0x69190000: ImageVersion(6505, False, False, True, True ), - 0x000109A0: ImageVersion(68000, True, True, False, False), - 0xA009010000000000: ImageVersion(68000, False, True, False, False), + 0x00000000000109A0: ImageVersion(68000, True, True, False, False), + -0x5ff6ff0000000000: + # signed version of 0xA009010000000000: + ImageVersion(68000, False, True, False, False), 0x00000000000109A2: ImageVersion(68002, True, True, True, False), - 0xA209010000000000: ImageVersion(68002, False, True, True, False), + -0x5df6ff0000000000: + # signed version of 0xA209010000000000: + ImageVersion(68002, False, True, True, False), 0x00000000000109A3: ImageVersion(68003, True, True, True, True ), - 0xA309010000000000: ImageVersion(68003, False, True, True, True ), + -0x5cf6ff0000000000: + # signed version of 0xA309010000000000: + ImageVersion(68003, False, True, True, True ), } @@ -174,26 +161,26 @@ def version_from_stream(stream): # 32 bit try: - return version(stream.peek_unsigned()) + return version(stream.peek()) except CorruptImageError as e: if stream.length() > possible_image_offset + 4: stream.skipbytes(possible_image_offset) try: - return version(stream.peek_unsigned()) + return version(stream.peek()) except CorruptImageError: pass # raise original error # 64 bit stream.reset() stream.be_64bit() try: - v = version(stream.peek_unsigned()) + v = version(stream.peek()) assert v.is_64bit return v except CorruptImageError as e: if stream.length() > possible_image_offset + 4: stream.skipbytes(possible_image_offset) try: - v = version(stream.peek_unsigned()) + v = version(stream.peek()) assert v.is_64bit return v except CorruptImageError: diff --git a/spyvm/test/test_squeakimage.py b/spyvm/test/test_squeakimage.py --- a/spyvm/test/test_squeakimage.py +++ b/spyvm/test/test_squeakimage.py @@ -35,18 +35,14 @@ # ----- tests ------------------------------------------------ def test_chrs2int(): - assert 1 == chrs2int('\x00\x00\x00\x01', False) - assert -1 == chrs2int('\xFF\xFF\xFF\xFF', False) - assert 1 == chrs2int('\x00\x00\x00\x01', True) - assert 0xFFFFFFFF == chrs2int('\xFF\xFF\xFF\xFF', True) + assert 1 == chrs2int('\x00\x00\x00\x01') + assert -1 == chrs2int('\xFF\xFF\xFF\xFF') def test_chrs2long(): - assert 1 == chrs2long('\x00\x00\x00\x00\x00\x00\x00\x01', False) - assert -1 == chrs2long('\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', False) - assert 1 == chrs2long('\x00\x00\x00\x00\x00\x00\x00\x01', True) - assert 0xFFFFFFFFFFFFFFFF == chrs2long('\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF', True) - assert 68002 == chrs2long(pack(">Q", 68002), False) - assert 68002 == swapped_chrs2long(pack("<Q", 68002), False) + assert 1 == chrs2long('\x00\x00\x00\x00\x00\x00\x00\x01') + assert -1 == chrs2long('\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF') + assert 68002 == chrs2long(pack(">Q", 68002)) + assert 68002 == swapped_chrs2long(pack("<Q", 68002)) def test_stream(): stream = imagestream_mock(SIMPLE_VERSION_HEADER) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit