[pypy-svn] r16865 - pypy/release/0.7.x/pypy/module/_sre

nik at codespeak.net nik at codespeak.net
Sat Aug 27 20:57:44 CEST 2005


Author: nik
Date: Sat Aug 27 20:57:43 2005
New Revision: 16865

Modified:
   pypy/release/0.7.x/pypy/module/_sre/interp_sre.py
Log:
some tentative fixes to a int overflow problem


Modified: pypy/release/0.7.x/pypy/module/_sre/interp_sre.py
==============================================================================
--- pypy/release/0.7.x/pypy/module/_sre/interp_sre.py	(original)
+++ pypy/release/0.7.x/pypy/module/_sre/interp_sre.py	Sat Aug 27 20:57:43 2005
@@ -2,6 +2,7 @@
 from pypy.interpreter.typedef import GetSetProperty, TypeDef
 from pypy.interpreter.typedef import interp_attrproperty, interp_attrproperty_w
 from pypy.interpreter.gateway import interp2app
+from pypy.rpython.rarithmetic import intmask
 import sys
 
 #### Constants and exposed functions
@@ -206,6 +207,9 @@
         return self.state.end - self.string_position
 
     def peek_code(self, peek=0):
+        return intmask(self.pattern_codes[self.code_position + peek])
+
+    def peek_code_uint(self, peek=0):
         return self.pattern_codes[self.code_position + peek]
 
     def skip_code(self, skip_count):
@@ -250,7 +254,7 @@
 
 def w_search(space, w_state, w_pattern_codes):
     assert isinstance(w_state, W_State)
-    pattern_codes = [space.int_w(code) for code
+    pattern_codes = [space.uint_w(code) for code
                                     in space.unpackiterable(w_pattern_codes)]
     return space.newbool(search(space, w_state, pattern_codes))
 
@@ -323,7 +327,7 @@
 
 def w_match(space, w_state, w_pattern_codes):
     assert isinstance(w_state, W_State)
-    pattern_codes = [space.int_w(code) for code
+    pattern_codes = [space.uint_w(code) for code
                                     in space.unpackiterable(w_pattern_codes)]
     return space.newbool(match(space, w_state, pattern_codes))
 
@@ -1160,7 +1164,7 @@
             shift = 4
         else:
             shift = 5
-        block_value = ctx.peek_code(block * (32 / CODESIZE)
+        block_value = ctx.peek_code_uint(block * (32 / CODESIZE)
                                                 + ((char_code & 255) >> shift))
         if block_value & (1 << (char_code & ((8 * CODESIZE) - 1))):
             return ctx.set_ok



More information about the Pypy-commit mailing list