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

Reply via email to