[pypy-commit] pypy default: merge heads
arigo
noreply at buildbot.pypy.org
Fri Mar 8 15:23:43 CET 2013
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r62234:3108a9e42aec
Date: 2013-03-08 15:23 +0100
http://bitbucket.org/pypy/pypy/changeset/3108a9e42aec/
Log: merge heads
diff --git a/lib_pypy/__init__.py b/lib_pypy/__init__.py
--- a/lib_pypy/__init__.py
+++ b/lib_pypy/__init__.py
@@ -1,4 +1,4 @@
# This __init__.py shows up in PyPy's app-level standard library.
# Let's try to prevent that confusion...
if __name__ != 'lib_pypy':
- raise ImportError, '__init__'
+ raise ImportError('__init__')
diff --git a/lib_pypy/_collections.py b/lib_pypy/_collections.py
--- a/lib_pypy/_collections.py
+++ b/lib_pypy/_collections.py
@@ -10,7 +10,7 @@
import operator
try:
- from thread import get_ident as _thread_ident
+ from threading import _get_ident as _thread_ident
except ImportError:
def _thread_ident():
return -1
@@ -97,7 +97,7 @@
def pop(self):
if self.left is self.right and self.leftndx > self.rightndx:
- raise IndexError, "pop from an empty deque"
+ raise IndexError("pop from an empty deque")
x = self.right[self.rightndx]
self.right[self.rightndx] = None
self.length -= 1
@@ -118,7 +118,7 @@
def popleft(self):
if self.left is self.right and self.leftndx > self.rightndx:
- raise IndexError, "pop from an empty deque"
+ raise IndexError("pop from an empty deque")
x = self.left[self.leftndx]
self.left[self.leftndx] = None
self.length -= 1
@@ -322,7 +322,7 @@
return type(self), (list(self), self.maxlen)
def __hash__(self):
- raise TypeError, "deque objects are unhashable"
+ raise TypeError("deque objects are unhashable")
def __copy__(self):
return self.__class__(self, self.maxlen)
@@ -374,11 +374,11 @@
self.counter = len(deq)
def giveup():
self.counter = 0
- raise RuntimeError, "deque mutated during iteration"
+ raise RuntimeError("deque mutated during iteration")
self._gen = itergen(deq.state, giveup)
def next(self):
- res = self._gen.next()
+ res = next(self._gen)
self.counter -= 1
return res
diff --git a/lib_pypy/_csv.py b/lib_pypy/_csv.py
--- a/lib_pypy/_csv.py
+++ b/lib_pypy/_csv.py
@@ -225,7 +225,7 @@
self._parse_reset()
while True:
try:
- line = self.input_iter.next()
+ line = next(self.input_iter)
except StopIteration:
# End of input OR exception
if len(self.field) > 0:
diff --git a/lib_pypy/_marshal.py b/lib_pypy/_marshal.py
--- a/lib_pypy/_marshal.py
+++ b/lib_pypy/_marshal.py
@@ -3,9 +3,17 @@
This module contains functions that can read and write Python values in a binary format. The format is specific to Python, but independent of machine architecture issues (e.g., you can write a Python value to a file on a PC, transport the file to a Sun, and read it back there). Details of the format may change between Python versions.
"""
+# NOTE: This module is used in the Python3 interpreter, but also by
+# the "sandboxed" process. It must work for Python2 as well.
+
import types
from _codecs import utf_8_decode, utf_8_encode
+try:
+ intern
+except NameError:
+ from sys import intern
+
try: from __pypy__ import builtinify
except ImportError: builtinify = lambda f: f
@@ -49,7 +57,7 @@
if func:
break
else:
- raise ValueError, "unmarshallable object"
+ raise ValueError("unmarshallable object")
func(self, x)
def w_long64(self, x):
@@ -72,7 +80,7 @@
def dump_none(self, x):
self._write(TYPE_NONE)
- dispatch[types.NoneType] = dump_none
+ dispatch[type(None)] = dump_none
def dump_bool(self, x):
if x:
@@ -83,7 +91,7 @@
def dump_stopiter(self, x):
if x is not StopIteration:
- raise ValueError, "unmarshallable object"
+ raise ValueError("unmarshallable object")
self._write(TYPE_STOPITER)
dispatch[type(StopIteration)] = dump_stopiter
@@ -91,10 +99,11 @@
self._write(TYPE_ELLIPSIS)
try:
- dispatch[types.EllipsisType] = dump_ellipsis
+ dispatch[type(Ellipsis)] = dump_ellipsis
except NameError:
pass
+ # In Python3, this function is not used; see dump_long() below.
def dump_int(self, x):
y = x>>31
if y and y != -1:
@@ -103,7 +112,7 @@
else:
self._write(TYPE_INT)
self.w_long(x)
- dispatch[types.IntType] = dump_int
+ dispatch[int] = dump_int
def dump_long(self, x):
self._write(TYPE_LONG)
@@ -118,27 +127,32 @@
self.w_long(len(digits) * sign)
for d in digits:
self.w_short(d)
- dispatch[types.LongType] = dump_long
+ try:
+ long
+ except NameError:
+ dispatch[int] = dump_long
+ else:
+ dispatch[long] = dump_long
def dump_float(self, x):
write = self._write
write(TYPE_FLOAT)
- s = `x`
+ s = repr(x)
write(chr(len(s)))
write(s)
- dispatch[types.FloatType] = dump_float
+ dispatch[float] = dump_float
def dump_complex(self, x):
write = self._write
write(TYPE_COMPLEX)
- s = `x.real`
+ s = repr(x.real)
write(chr(len(s)))
write(s)
- s = `x.imag`
+ s = repr(x.imag)
write(chr(len(s)))
write(s)
try:
- dispatch[types.ComplexType] = dump_complex
+ dispatch[complex] = dump_complex
except NameError:
pass
@@ -148,7 +162,7 @@
self._write(TYPE_STRING)
self.w_long(len(x))
self._write(x)
- dispatch[types.StringType] = dump_string
+ dispatch[bytes] = dump_string
def dump_unicode(self, x):
self._write(TYPE_UNICODE)
@@ -156,21 +170,26 @@
s, len_s = utf_8_encode(x)
self.w_long(len_s)
self._write(s)
- dispatch[types.UnicodeType] = dump_unicode
+ try:
+ unicode
+ except NameError:
+ dispatch[str] = dump_unicode
+ else:
+ dispatch[unicode] = dump_unicode
def dump_tuple(self, x):
self._write(TYPE_TUPLE)
self.w_long(len(x))
for item in x:
self.dump(item)
- dispatch[types.TupleType] = dump_tuple
+ dispatch[tuple] = dump_tuple
def dump_list(self, x):
self._write(TYPE_LIST)
self.w_long(len(x))
for item in x:
self.dump(item)
- dispatch[types.ListType] = dump_list
+ dispatch[list] = dump_list
def dump_dict(self, x):
self._write(TYPE_DICT)
@@ -178,7 +197,7 @@
self.dump(key)
self.dump(value)
self._write(TYPE_NULL)
- dispatch[types.DictionaryType] = dump_dict
+ dispatch[dict] = dump_dict
def dump_code(self, x):
self._write(TYPE_CODE)
@@ -252,7 +271,7 @@
try:
return self.dispatch[c](self)
except KeyError:
- raise ValueError, "bad marshal code: %c (%d)" % (c, ord(c))
+ raise ValueError("bad marshal code: %c (%d)" % (c, ord(c)))
def r_short(self):
lo = ord(self._read(1))
@@ -270,7 +289,7 @@
d = ord(s[3])
x = a | (b<<8) | (c<<16) | (d<<24)
if d & 0x80 and x > 0:
- x = -((1L<<32) - x)
+ x = -((1<<32) - x)
return int(x)
else:
return x
@@ -280,14 +299,14 @@
b = ord(self._read(1))
c = ord(self._read(1))
d = ord(self._read(1))
- e = long(ord(self._read(1)))
- f = long(ord(self._read(1)))
- g = long(ord(self._read(1)))
- h = long(ord(self._read(1)))
+ e = ord(self._read(1))
+ f = ord(self._read(1))
+ g = ord(self._read(1))
+ h = ord(self._read(1))
x = a | (b<<8) | (c<<16) | (d<<24)
x = x | (e<<32) | (f<<40) | (g<<48) | (h<<56)
if h & 0x80 and x > 0:
- x = -((1L<<64) - x)
+ x = -((1<<64) - x)
return x
def load_null(self):
@@ -324,10 +343,10 @@
if size < 0:
sign = -1
size = -size
- x = 0L
+ x = 0
for i in range(size):
d = self.r_short()
- x = x | (d<<(i*15L))
+ x = x | (d<<(i*15))
return x * sign
dispatch[TYPE_LONG] = load_long
@@ -459,7 +478,7 @@
self.bufpos += 4
x = a | (b<<8) | (c<<16) | (d<<24)
if d & 0x80 and x > 0:
- x = -((1L<<32) - x)
+ x = -((1<<32) - x)
return int(x)
else:
return x
@@ -469,14 +488,14 @@
b = ord(_read1(self))
c = ord(_read1(self))
d = ord(_read1(self))
- e = long(ord(_read1(self)))
- f = long(ord(_read1(self)))
- g = long(ord(_read1(self)))
- h = long(ord(_read1(self)))
+ e = ord(_read1(self))
+ f = ord(_read1(self))
+ g = ord(_read1(self))
+ h = ord(_read1(self))
x = a | (b<<8) | (c<<16) | (d<<24)
x = x | (e<<32) | (f<<40) | (g<<48) | (h<<56)
if h & 0x80 and x > 0:
- x = -((1L<<64) - x)
+ x = -((1<<64) - x)
return x
_load_dispatch = {}
@@ -498,7 +517,7 @@
self.bufpos += 1
return _load_dispatch[c](self)
except KeyError:
- raise ValueError, "bad marshal code: %c (%d)" % (c, ord(c))
+ raise ValueError("bad marshal code: %c (%d)" % (c, ord(c)))
except IndexError:
raise EOFError
@@ -540,10 +559,10 @@
if size < 0:
sign = -1
size = -size
- x = 0L
+ x = 0
for i in range(size):
d = _r_short(self)
- x = x | (d<<(i*15L))
+ x = x | (d<<(i*15))
return x * sign
dispatch[TYPE_LONG] = load_long
diff --git a/lib_pypy/_md5.py b/lib_pypy/_md5.py
--- a/lib_pypy/_md5.py
+++ b/lib_pypy/_md5.py
@@ -47,16 +47,16 @@
def _bytelist2long(list):
"Transform a list of characters into a list of longs."
- imax = len(list)/4
- hl = [0L] * imax
+ imax = len(list) // 4
+ hl = [0] * imax
j = 0
i = 0
while i < imax:
- b0 = long(ord(list[j]))
- b1 = (long(ord(list[j+1]))) << 8
- b2 = (long(ord(list[j+2]))) << 16
- b3 = (long(ord(list[j+3]))) << 24
+ b0 = ord(list[j])
+ b1 = ord(list[j+1]) << 8
+ b2 = ord(list[j+2]) << 16
+ b3 = ord(list[j+3]) << 24
hl[i] = b0 | b1 |b2 | b3
i = i+1
j = j+4
@@ -100,16 +100,16 @@
(now summed-up in one function).
"""
- res = 0L
+ res = 0
res = res + a + func(b, c, d)
res = res + x
res = res + ac
- res = res & 0xffffffffL
+ res = res & 0xffffffff
res = _rotateLeft(res, s)
- res = res & 0xffffffffL
+ res = res & 0xffffffff
res = res + b
- return res & 0xffffffffL
+ return res & 0xffffffff
class MD5Type:
@@ -122,7 +122,7 @@
"Initialisation."
# Initial message length in bits(!).
- self.length = 0L
+ self.length = 0
self.count = [0, 0]
# Initial empty message as a sequence of bytes (8 bit characters).
@@ -136,15 +136,15 @@
def init(self):
"Initialize the message-digest and set all fields to zero."
- self.length = 0L
+ self.length = 0
self.count = [0, 0]
self.input = []
# Load magic initialization constants.
- self.A = 0x67452301L
- self.B = 0xefcdab89L
- self.C = 0x98badcfeL
- self.D = 0x10325476L
+ self.A = 0x67452301
+ self.B = 0xefcdab89
+ self.C = 0x98badcfe
+ self.D = 0x10325476
def _transform(self, inp):
@@ -161,90 +161,90 @@
S11, S12, S13, S14 = 7, 12, 17, 22
- a = XX(F, a, b, c, d, inp[ 0], S11, 0xD76AA478L) # 1
- d = XX(F, d, a, b, c, inp[ 1], S12, 0xE8C7B756L) # 2
- c = XX(F, c, d, a, b, inp[ 2], S13, 0x242070DBL) # 3
- b = XX(F, b, c, d, a, inp[ 3], S14, 0xC1BDCEEEL) # 4
- a = XX(F, a, b, c, d, inp[ 4], S11, 0xF57C0FAFL) # 5
- d = XX(F, d, a, b, c, inp[ 5], S12, 0x4787C62AL) # 6
- c = XX(F, c, d, a, b, inp[ 6], S13, 0xA8304613L) # 7
- b = XX(F, b, c, d, a, inp[ 7], S14, 0xFD469501L) # 8
- a = XX(F, a, b, c, d, inp[ 8], S11, 0x698098D8L) # 9
- d = XX(F, d, a, b, c, inp[ 9], S12, 0x8B44F7AFL) # 10
- c = XX(F, c, d, a, b, inp[10], S13, 0xFFFF5BB1L) # 11
- b = XX(F, b, c, d, a, inp[11], S14, 0x895CD7BEL) # 12
- a = XX(F, a, b, c, d, inp[12], S11, 0x6B901122L) # 13
- d = XX(F, d, a, b, c, inp[13], S12, 0xFD987193L) # 14
- c = XX(F, c, d, a, b, inp[14], S13, 0xA679438EL) # 15
- b = XX(F, b, c, d, a, inp[15], S14, 0x49B40821L) # 16
+ a = XX(F, a, b, c, d, inp[ 0], S11, 0xD76AA478) # 1
+ d = XX(F, d, a, b, c, inp[ 1], S12, 0xE8C7B756) # 2
+ c = XX(F, c, d, a, b, inp[ 2], S13, 0x242070DB) # 3
+ b = XX(F, b, c, d, a, inp[ 3], S14, 0xC1BDCEEE) # 4
+ a = XX(F, a, b, c, d, inp[ 4], S11, 0xF57C0FAF) # 5
+ d = XX(F, d, a, b, c, inp[ 5], S12, 0x4787C62A) # 6
+ c = XX(F, c, d, a, b, inp[ 6], S13, 0xA8304613) # 7
+ b = XX(F, b, c, d, a, inp[ 7], S14, 0xFD469501) # 8
+ a = XX(F, a, b, c, d, inp[ 8], S11, 0x698098D8) # 9
+ d = XX(F, d, a, b, c, inp[ 9], S12, 0x8B44F7AF) # 10
+ c = XX(F, c, d, a, b, inp[10], S13, 0xFFFF5BB1) # 11
+ b = XX(F, b, c, d, a, inp[11], S14, 0x895CD7BE) # 12
+ a = XX(F, a, b, c, d, inp[12], S11, 0x6B901122) # 13
+ d = XX(F, d, a, b, c, inp[13], S12, 0xFD987193) # 14
+ c = XX(F, c, d, a, b, inp[14], S13, 0xA679438E) # 15
+ b = XX(F, b, c, d, a, inp[15], S14, 0x49B40821) # 16
# Round 2.
S21, S22, S23, S24 = 5, 9, 14, 20
- a = XX(G, a, b, c, d, inp[ 1], S21, 0xF61E2562L) # 17
- d = XX(G, d, a, b, c, inp[ 6], S22, 0xC040B340L) # 18
- c = XX(G, c, d, a, b, inp[11], S23, 0x265E5A51L) # 19
- b = XX(G, b, c, d, a, inp[ 0], S24, 0xE9B6C7AAL) # 20
- a = XX(G, a, b, c, d, inp[ 5], S21, 0xD62F105DL) # 21
- d = XX(G, d, a, b, c, inp[10], S22, 0x02441453L) # 22
- c = XX(G, c, d, a, b, inp[15], S23, 0xD8A1E681L) # 23
- b = XX(G, b, c, d, a, inp[ 4], S24, 0xE7D3FBC8L) # 24
- a = XX(G, a, b, c, d, inp[ 9], S21, 0x21E1CDE6L) # 25
- d = XX(G, d, a, b, c, inp[14], S22, 0xC33707D6L) # 26
- c = XX(G, c, d, a, b, inp[ 3], S23, 0xF4D50D87L) # 27
- b = XX(G, b, c, d, a, inp[ 8], S24, 0x455A14EDL) # 28
- a = XX(G, a, b, c, d, inp[13], S21, 0xA9E3E905L) # 29
- d = XX(G, d, a, b, c, inp[ 2], S22, 0xFCEFA3F8L) # 30
- c = XX(G, c, d, a, b, inp[ 7], S23, 0x676F02D9L) # 31
- b = XX(G, b, c, d, a, inp[12], S24, 0x8D2A4C8AL) # 32
+ a = XX(G, a, b, c, d, inp[ 1], S21, 0xF61E2562) # 17
+ d = XX(G, d, a, b, c, inp[ 6], S22, 0xC040B340) # 18
+ c = XX(G, c, d, a, b, inp[11], S23, 0x265E5A51) # 19
+ b = XX(G, b, c, d, a, inp[ 0], S24, 0xE9B6C7AA) # 20
+ a = XX(G, a, b, c, d, inp[ 5], S21, 0xD62F105D) # 21
+ d = XX(G, d, a, b, c, inp[10], S22, 0x02441453) # 22
+ c = XX(G, c, d, a, b, inp[15], S23, 0xD8A1E681) # 23
+ b = XX(G, b, c, d, a, inp[ 4], S24, 0xE7D3FBC8) # 24
+ a = XX(G, a, b, c, d, inp[ 9], S21, 0x21E1CDE6) # 25
+ d = XX(G, d, a, b, c, inp[14], S22, 0xC33707D6) # 26
+ c = XX(G, c, d, a, b, inp[ 3], S23, 0xF4D50D87) # 27
+ b = XX(G, b, c, d, a, inp[ 8], S24, 0x455A14ED) # 28
+ a = XX(G, a, b, c, d, inp[13], S21, 0xA9E3E905) # 29
+ d = XX(G, d, a, b, c, inp[ 2], S22, 0xFCEFA3F8) # 30
+ c = XX(G, c, d, a, b, inp[ 7], S23, 0x676F02D9) # 31
+ b = XX(G, b, c, d, a, inp[12], S24, 0x8D2A4C8A) # 32
# Round 3.
S31, S32, S33, S34 = 4, 11, 16, 23
- a = XX(H, a, b, c, d, inp[ 5], S31, 0xFFFA3942L) # 33
- d = XX(H, d, a, b, c, inp[ 8], S32, 0x8771F681L) # 34
- c = XX(H, c, d, a, b, inp[11], S33, 0x6D9D6122L) # 35
- b = XX(H, b, c, d, a, inp[14], S34, 0xFDE5380CL) # 36
- a = XX(H, a, b, c, d, inp[ 1], S31, 0xA4BEEA44L) # 37
- d = XX(H, d, a, b, c, inp[ 4], S32, 0x4BDECFA9L) # 38
- c = XX(H, c, d, a, b, inp[ 7], S33, 0xF6BB4B60L) # 39
- b = XX(H, b, c, d, a, inp[10], S34, 0xBEBFBC70L) # 40
- a = XX(H, a, b, c, d, inp[13], S31, 0x289B7EC6L) # 41
- d = XX(H, d, a, b, c, inp[ 0], S32, 0xEAA127FAL) # 42
- c = XX(H, c, d, a, b, inp[ 3], S33, 0xD4EF3085L) # 43
- b = XX(H, b, c, d, a, inp[ 6], S34, 0x04881D05L) # 44
- a = XX(H, a, b, c, d, inp[ 9], S31, 0xD9D4D039L) # 45
- d = XX(H, d, a, b, c, inp[12], S32, 0xE6DB99E5L) # 46
- c = XX(H, c, d, a, b, inp[15], S33, 0x1FA27CF8L) # 47
- b = XX(H, b, c, d, a, inp[ 2], S34, 0xC4AC5665L) # 48
+ a = XX(H, a, b, c, d, inp[ 5], S31, 0xFFFA3942) # 33
+ d = XX(H, d, a, b, c, inp[ 8], S32, 0x8771F681) # 34
+ c = XX(H, c, d, a, b, inp[11], S33, 0x6D9D6122) # 35
+ b = XX(H, b, c, d, a, inp[14], S34, 0xFDE5380C) # 36
+ a = XX(H, a, b, c, d, inp[ 1], S31, 0xA4BEEA44) # 37
+ d = XX(H, d, a, b, c, inp[ 4], S32, 0x4BDECFA9) # 38
+ c = XX(H, c, d, a, b, inp[ 7], S33, 0xF6BB4B60) # 39
+ b = XX(H, b, c, d, a, inp[10], S34, 0xBEBFBC70) # 40
+ a = XX(H, a, b, c, d, inp[13], S31, 0x289B7EC6) # 41
+ d = XX(H, d, a, b, c, inp[ 0], S32, 0xEAA127FA) # 42
+ c = XX(H, c, d, a, b, inp[ 3], S33, 0xD4EF3085) # 43
+ b = XX(H, b, c, d, a, inp[ 6], S34, 0x04881D05) # 44
+ a = XX(H, a, b, c, d, inp[ 9], S31, 0xD9D4D039) # 45
+ d = XX(H, d, a, b, c, inp[12], S32, 0xE6DB99E5) # 46
+ c = XX(H, c, d, a, b, inp[15], S33, 0x1FA27CF8) # 47
+ b = XX(H, b, c, d, a, inp[ 2], S34, 0xC4AC5665) # 48
# Round 4.
S41, S42, S43, S44 = 6, 10, 15, 21
- a = XX(I, a, b, c, d, inp[ 0], S41, 0xF4292244L) # 49
- d = XX(I, d, a, b, c, inp[ 7], S42, 0x432AFF97L) # 50
- c = XX(I, c, d, a, b, inp[14], S43, 0xAB9423A7L) # 51
- b = XX(I, b, c, d, a, inp[ 5], S44, 0xFC93A039L) # 52
- a = XX(I, a, b, c, d, inp[12], S41, 0x655B59C3L) # 53
- d = XX(I, d, a, b, c, inp[ 3], S42, 0x8F0CCC92L) # 54
- c = XX(I, c, d, a, b, inp[10], S43, 0xFFEFF47DL) # 55
- b = XX(I, b, c, d, a, inp[ 1], S44, 0x85845DD1L) # 56
- a = XX(I, a, b, c, d, inp[ 8], S41, 0x6FA87E4FL) # 57
- d = XX(I, d, a, b, c, inp[15], S42, 0xFE2CE6E0L) # 58
- c = XX(I, c, d, a, b, inp[ 6], S43, 0xA3014314L) # 59
- b = XX(I, b, c, d, a, inp[13], S44, 0x4E0811A1L) # 60
- a = XX(I, a, b, c, d, inp[ 4], S41, 0xF7537E82L) # 61
- d = XX(I, d, a, b, c, inp[11], S42, 0xBD3AF235L) # 62
- c = XX(I, c, d, a, b, inp[ 2], S43, 0x2AD7D2BBL) # 63
- b = XX(I, b, c, d, a, inp[ 9], S44, 0xEB86D391L) # 64
+ a = XX(I, a, b, c, d, inp[ 0], S41, 0xF4292244) # 49
+ d = XX(I, d, a, b, c, inp[ 7], S42, 0x432AFF97) # 50
+ c = XX(I, c, d, a, b, inp[14], S43, 0xAB9423A7) # 51
+ b = XX(I, b, c, d, a, inp[ 5], S44, 0xFC93A039) # 52
+ a = XX(I, a, b, c, d, inp[12], S41, 0x655B59C3) # 53
+ d = XX(I, d, a, b, c, inp[ 3], S42, 0x8F0CCC92) # 54
+ c = XX(I, c, d, a, b, inp[10], S43, 0xFFEFF47D) # 55
+ b = XX(I, b, c, d, a, inp[ 1], S44, 0x85845DD1) # 56
+ a = XX(I, a, b, c, d, inp[ 8], S41, 0x6FA87E4F) # 57
+ d = XX(I, d, a, b, c, inp[15], S42, 0xFE2CE6E0) # 58
+ c = XX(I, c, d, a, b, inp[ 6], S43, 0xA3014314) # 59
+ b = XX(I, b, c, d, a, inp[13], S44, 0x4E0811A1) # 60
+ a = XX(I, a, b, c, d, inp[ 4], S41, 0xF7537E82) # 61
+ d = XX(I, d, a, b, c, inp[11], S42, 0xBD3AF235) # 62
+ c = XX(I, c, d, a, b, inp[ 2], S43, 0x2AD7D2BB) # 63
+ b = XX(I, b, c, d, a, inp[ 9], S44, 0xEB86D391) # 64
- A = (A + a) & 0xffffffffL
- B = (B + b) & 0xffffffffL
- C = (C + c) & 0xffffffffL
- D = (D + d) & 0xffffffffL
+ A = (A + a) & 0xffffffff
+ B = (B + b) & 0xffffffff
+ C = (C + c) & 0xffffffff
+ D = (D + d) & 0xffffffff
self.A, self.B, self.C, self.D = A, B, C, D
@@ -267,10 +267,10 @@
the hashed string.
"""
- leninBuf = long(len(inBuf))
+ leninBuf = len(inBuf)
# Compute number of bytes mod 64.
- index = (self.count[0] >> 3) & 0x3FL
+ index = (self.count[0] >> 3) & 0x3F
# Update number of bits.
self.count[0] = self.count[0] + (leninBuf << 3)
@@ -309,7 +309,7 @@
input = [] + self.input
count = [] + self.count
- index = (self.count[0] >> 3) & 0x3fL
+ index = (self.count[0] >> 3) & 0x3f
if index < 56:
padLen = 56 - index
diff --git a/lib_pypy/_pypy_wait.py b/lib_pypy/_pypy_wait.py
--- a/lib_pypy/_pypy_wait.py
+++ b/lib_pypy/_pypy_wait.py
@@ -1,6 +1,6 @@
+from resource import _struct_rusage, struct_rusage
from ctypes import CDLL, c_int, POINTER, byref
from ctypes.util import find_library
-from resource import _struct_rusage, struct_rusage
__all__ = ["wait3", "wait4"]
diff --git a/lib_pypy/_sha.py b/lib_pypy/_sha.py
--- a/lib_pypy/_sha.py
+++ b/lib_pypy/_sha.py
@@ -35,15 +35,15 @@
"""
# After much testing, this algorithm was deemed to be the fastest.
- s = ''
+ s = b''
pack = struct.pack
while n > 0:
- s = pack('>I', n & 0xffffffffL) + s
+ s = pack('>I', n & 0xffffffff) + s
n = n >> 32
# Strip off leading zeros.
for i in range(len(s)):
- if s[i] <> '\000':
+ if s[i] != '\000':
break
else:
# Only happens when n == 0.
@@ -63,16 +63,16 @@
def _bytelist2longBigEndian(list):
"Transform a list of characters into a list of longs."
- imax = len(list)/4
- hl = [0L] * imax
+ imax = len(list) // 4
+ hl = [0] * imax
j = 0
i = 0
while i < imax:
- b0 = long(ord(list[j])) << 24
- b1 = long(ord(list[j+1])) << 16
- b2 = long(ord(list[j+2])) << 8
- b3 = long(ord(list[j+3]))
+ b0 = ord(list[j]) << 24
+ b1 = ord(list[j+1]) << 16
+ b2 = ord(list[j+2]) << 8
+ b3 = ord(list[j+3])
hl[i] = b0 | b1 | b2 | b3
i = i+1
j = j+4
@@ -108,10 +108,10 @@
# Constants to be used
K = [
- 0x5A827999L, # ( 0 <= t <= 19)
- 0x6ED9EBA1L, # (20 <= t <= 39)
- 0x8F1BBCDCL, # (40 <= t <= 59)
- 0xCA62C1D6L # (60 <= t <= 79)
+ 0x5A827999, # ( 0 <= t <= 19)
+ 0x6ED9EBA1, # (20 <= t <= 39)
+ 0x8F1BBCDC, # (40 <= t <= 59)
+ 0xCA62C1D6 # (60 <= t <= 79)
]
class sha:
@@ -124,7 +124,7 @@
"Initialisation."
# Initial message length in bits(!).
- self.length = 0L
+ self.length = 0
self.count = [0, 0]
# Initial empty message as a sequence of bytes (8 bit characters).
@@ -138,21 +138,21 @@
def init(self):
"Initialize the message-digest and set all fields to zero."
- self.length = 0L
+ self.length = 0
self.input = []
# Initial 160 bit message digest (5 times 32 bit).
- self.H0 = 0x67452301L
- self.H1 = 0xEFCDAB89L
- self.H2 = 0x98BADCFEL
- self.H3 = 0x10325476L
- self.H4 = 0xC3D2E1F0L
+ self.H0 = 0x67452301
+ self.H1 = 0xEFCDAB89
+ self.H2 = 0x98BADCFE
+ self.H3 = 0x10325476
+ self.H4 = 0xC3D2E1F0
def _transform(self, W):
for t in range(16, 80):
W.append(_rotateLeft(
- W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1) & 0xffffffffL)
+ W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1) & 0xffffffff)
A = self.H0
B = self.H1
@@ -166,49 +166,49 @@
TEMP = _rotateLeft(A, 5) + f[t/20] + E + W[t] + K[t/20]
E = D
D = C
- C = _rotateLeft(B, 30) & 0xffffffffL
+ C = _rotateLeft(B, 30) & 0xffffffff
B = A
- A = TEMP & 0xffffffffL
+ A = TEMP & 0xffffffff
"""
for t in range(0, 20):
TEMP = _rotateLeft(A, 5) + ((B & C) | ((~ B) & D)) + E + W[t] + K[0]
E = D
D = C
- C = _rotateLeft(B, 30) & 0xffffffffL
+ C = _rotateLeft(B, 30) & 0xffffffff
B = A
- A = TEMP & 0xffffffffL
+ A = TEMP & 0xffffffff
for t in range(20, 40):
TEMP = _rotateLeft(A, 5) + (B ^ C ^ D) + E + W[t] + K[1]
E = D
D = C
- C = _rotateLeft(B, 30) & 0xffffffffL
+ C = _rotateLeft(B, 30) & 0xffffffff
B = A
- A = TEMP & 0xffffffffL
+ A = TEMP & 0xffffffff
for t in range(40, 60):
TEMP = _rotateLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2]
E = D
D = C
- C = _rotateLeft(B, 30) & 0xffffffffL
+ C = _rotateLeft(B, 30) & 0xffffffff
B = A
- A = TEMP & 0xffffffffL
+ A = TEMP & 0xffffffff
for t in range(60, 80):
TEMP = _rotateLeft(A, 5) + (B ^ C ^ D) + E + W[t] + K[3]
E = D
D = C
- C = _rotateLeft(B, 30) & 0xffffffffL
+ C = _rotateLeft(B, 30) & 0xffffffff
B = A
- A = TEMP & 0xffffffffL
+ A = TEMP & 0xffffffff
- self.H0 = (self.H0 + A) & 0xffffffffL
- self.H1 = (self.H1 + B) & 0xffffffffL
- self.H2 = (self.H2 + C) & 0xffffffffL
- self.H3 = (self.H3 + D) & 0xffffffffL
- self.H4 = (self.H4 + E) & 0xffffffffL
+ self.H0 = (self.H0 + A) & 0xffffffff
+ self.H1 = (self.H1 + B) & 0xffffffff
+ self.H2 = (self.H2 + C) & 0xffffffff
+ self.H3 = (self.H3 + D) & 0xffffffff
+ self.H4 = (self.H4 + E) & 0xffffffff
# Down from here all methods follow the Python Standard Library
@@ -230,10 +230,10 @@
to the hashed string.
"""
- leninBuf = long(len(inBuf))
+ leninBuf = len(inBuf)
# Compute number of bytes mod 64.
- index = (self.count[1] >> 3) & 0x3FL
+ index = (self.count[1] >> 3) & 0x3F
# Update number of bits.
self.count[1] = self.count[1] + (leninBuf << 3)
@@ -273,7 +273,7 @@
input = [] + self.input
count = [] + self.count
- index = (self.count[1] >> 3) & 0x3fL
+ index = (self.count[1] >> 3) & 0x3f
if index < 56:
padLen = 56 - index
diff --git a/lib_pypy/_sha512.py b/lib_pypy/_sha512.py
--- a/lib_pypy/_sha512.py
+++ b/lib_pypy/_sha512.py
@@ -10,7 +10,7 @@
def new_shaobject():
return {
- 'digest': [0L]*8,
+ 'digest': [0]*8,
'count_lo': 0,
'count_hi': 0,
'data': [0]* SHA_BLOCKSIZE,
diff --git a/lib_pypy/_sqlite3.py b/lib_pypy/_sqlite3.py
--- a/lib_pypy/_sqlite3.py
+++ b/lib_pypy/_sqlite3.py
@@ -1219,6 +1219,7 @@
val = None
elif typ == _lib.SQLITE_INTEGER:
val = _lib.sqlite3_column_int64(self._statement, i)
+ val = int(val)
elif typ == _lib.SQLITE_FLOAT:
val = _lib.sqlite3_column_double(self._statement, i)
elif typ == _lib.SQLITE_TEXT:
@@ -1342,6 +1343,7 @@
val = None
elif typ == _lib.SQLITE_INTEGER:
val = _lib.sqlite3_value_int64(params[i])
+ val = int(val)
elif typ == _lib.SQLITE_FLOAT:
val = _lib.sqlite3_value_double(params[i])
elif typ == _lib.SQLITE_TEXT:
diff --git a/lib_pypy/cPickle.py b/lib_pypy/cPickle.py
--- a/lib_pypy/cPickle.py
+++ b/lib_pypy/cPickle.py
@@ -225,10 +225,7 @@
elif data == TRUE[1:]:
val = True
else:
- try:
- val = int(data)
- except ValueError:
- val = long(data)
+ val = int(data)
self.append(val)
dispatch[INT] = load_int
diff --git a/lib_pypy/datetime.py b/lib_pypy/datetime.py
--- a/lib_pypy/datetime.py
+++ b/lib_pypy/datetime.py
@@ -16,14 +16,20 @@
Thanks to Tim Peters for suggesting using it.
"""
+from __future__ import division
import time as _time
import math as _math
+import struct as _struct
+
+def _cmp(x, y):
+ return 0 if x == y else 1 if x > y else -1
def _round(x):
return _math.floor(x + 0.5) if x >= 0.0 else _math.ceil(x - 0.5)
MINYEAR = 1
MAXYEAR = 9999
+_MINYEARFMT = 1900
# Utility functions, adapted from Python's Demo/classes/Dates.py, which
# also assumes the current Gregorian calendar indefinitely extended in
@@ -172,13 +178,14 @@
# Correctly substitute for %z and %Z escapes in strftime formats.
def _wrap_strftime(object, format, timetuple):
year = timetuple[0]
- if year < 1900:
- raise ValueError("year=%d is before 1900; the datetime strftime() "
- "methods require year >= 1900" % year)
- # Don't call _utcoffset() or tzname() unless actually needed.
- freplace = None # the string to use for %f
- zreplace = None # the string to use for %z
- Zreplace = None # the string to use for %Z
+ if year < _MINYEARFMT:
+ raise ValueError("year=%d is before %d; the datetime strftime() "
+ "methods require year >= %d" %
+ (year, _MINYEARFMT, _MINYEARFMT))
+ # Don't call utcoffset() or tzname() unless actually needed.
+ freplace = None # the string to use for %f
+ zreplace = None # the string to use for %z
+ Zreplace = None # the string to use for %Z
# Scan format for %z and %Z escapes, replacing as needed.
newformat = []
@@ -263,9 +270,9 @@
raise ValueError("tzinfo.%s() must return a whole number "
"of minutes" % name)
offset = minutes
- if -1440 < offset < 1440:
- return offset
- raise ValueError("%s()=%d, must be in -1439..1439" % (name, offset))
+ if not -1440 < offset < 1440:
+ raise ValueError("%s()=%d, must be in -1439..1439" % (name, offset))
+ return offset
def _check_int_field(value):
if isinstance(value, int):
@@ -571,7 +578,7 @@
def total_seconds(self):
"""Total seconds in the duration."""
return ((self.days * 86400 + self.seconds) * 10**6 +
- self.microseconds) / 1e6
+ self.microseconds) / 10**6
# Read-only field accessors
@property
@@ -641,12 +648,15 @@
__rmul__ = __mul__
+ def _to_microseconds(self):
+ return ((self._days * (24*3600) + self._seconds) * 1000000 +
+ self._microseconds)
+
def __div__(self, other):
- if isinstance(other, (int, long)):
- usec = ((self._days * (24*3600L) + self._seconds) * 1000000 +
- self._microseconds)
- return timedelta(0, 0, usec // other)
- return NotImplemented
+ if not isinstance(other, (int, long)):
+ return NotImplemented
+ usec = self._to_microseconds()
+ return timedelta(0, 0, usec // other)
__floordiv__ = __div__
@@ -690,7 +700,7 @@
def _cmp(self, other):
assert isinstance(other, timedelta)
- return cmp(self._getstate(), other._getstate())
+ return _cmp(self._getstate(), other._getstate())
def __hash__(self):
return hash(self._getstate())
@@ -750,7 +760,8 @@
year, month, day (required, base 1)
"""
- if isinstance(year, str) and len(year) == 4:
+ if month is None and isinstance(year, bytes) and len(year) == 4 and \
+ 1 <= ord(year[2]) <= 12:
# Pickle support
self = object.__new__(cls)
self.__setstate(year)
@@ -938,7 +949,7 @@
assert isinstance(other, date)
y, m, d = self._year, self._month, self._day
y2, m2, d2 = other._year, other._month, other._day
- return cmp((y, m, d), (y2, m2, d2))
+ return _cmp((y, m, d), (y2, m2, d2))
def __hash__(self):
"Hash."
@@ -1016,13 +1027,12 @@
def _getstate(self):
yhi, ylo = divmod(self._year, 256)
- return ("%c%c%c%c" % (yhi, ylo, self._month, self._day), )
+ return (_struct.pack('4B', yhi, ylo, self._month, self._day),)
def __setstate(self, string):
- if len(string) != 4 or not (1 <= ord(string[2]) <= 12):
- raise TypeError("not enough arguments")
- self._month, self._day = ord(string[2]), ord(string[3])
- self._year = ord(string[0]) * 256 + ord(string[1])
+ yhi, ylo, self._month, self._day = (ord(string[0]), ord(string[1]),
+ ord(string[2]), ord(string[3]))
+ self._year = yhi * 256 + ylo
def __reduce__(self):
return (self.__class__, self._getstate())
@@ -1140,7 +1150,7 @@
second, microsecond (default to zero)
tzinfo (default to None)
"""
- if isinstance(hour, str):
+ if isinstance(hour, bytes) and len(hour) == 6 and ord(hour[0]) < 24:
# Pickle support
self = object.__new__(cls)
self.__setstate(hour, minute or None)
@@ -1235,21 +1245,21 @@
base_compare = myoff == otoff
if base_compare:
- return cmp((self._hour, self._minute, self._second,
- self._microsecond),
- (other._hour, other._minute, other._second,
- other._microsecond))
+ return _cmp((self._hour, self._minute, self._second,
+ self._microsecond),
+ (other._hour, other._minute, other._second,
+ other._microsecond))
if myoff is None or otoff is None:
raise TypeError("cannot compare naive and aware times")
myhhmm = self._hour * 60 + self._minute - myoff
othhmm = other._hour * 60 + other._minute - otoff
- return cmp((myhhmm, self._second, self._microsecond),
- (othhmm, other._second, other._microsecond))
+ return _cmp((myhhmm, self._second, self._microsecond),
+ (othhmm, other._second, other._microsecond))
def __hash__(self):
"""Hash."""
tzoff = self._utcoffset()
- if not tzoff: # zero or None
+ if not tzoff: # zero or None
return hash(self._getstate()[0])
h, m = divmod(self.hour * 60 + self.minute - tzoff, 60)
if 0 <= h < 24:
@@ -1306,7 +1316,7 @@
"""Format using strftime(). The date part of the timestamp passed
to underlying strftime should not be used.
"""
- # The year must be >= 1900 else Python's strftime implementation
+ # The year must be >= _MINYEARFMT else Python's strftime implementation
# can raise a bogus exception.
timetuple = (1900, 1, 1,
self._hour, self._minute, self._second,
@@ -1389,29 +1399,27 @@
def __nonzero__(self):
if self.second or self.microsecond:
- return 1
+ return True
offset = self._utcoffset() or 0
- return self.hour * 60 + self.minute - offset != 0
+ return self.hour * 60 + self.minute != offset
# Pickle support.
def _getstate(self):
us2, us3 = divmod(self._microsecond, 256)
us1, us2 = divmod(us2, 256)
- basestate = ("%c" * 6) % (self._hour, self._minute, self._second,
- us1, us2, us3)
+ basestate = _struct.pack('6B', self._hour, self._minute, self._second,
+ us1, us2, us3)
if self._tzinfo is None:
return (basestate,)
else:
return (basestate, self._tzinfo)
def __setstate(self, string, tzinfo):
- if len(string) != 6 or ord(string[0]) >= 24:
- raise TypeError("an integer is required")
- self._hour, self._minute, self._second = ord(string[0]), \
- ord(string[1]), ord(string[2])
- self._microsecond = (((ord(string[3]) << 8) | \
- ord(string[4])) << 8) | ord(string[5])
+ self._hour, self._minute, self._second, us1, us2, us3 = (
+ ord(string[0]), ord(string[1]), ord(string[2]),
+ ord(string[3]), ord(string[4]), ord(string[5]))
+ self._microsecond = (((us1 << 8) | us2) << 8) | us3
self._tzinfo = tzinfo
def __reduce__(self):
@@ -1433,7 +1441,8 @@
def __new__(cls, year, month=None, day=None, hour=0, minute=0, second=0,
microsecond=0, tzinfo=None):
- if isinstance(year, str) and len(year) == 10:
+ if isinstance(year, bytes) and len(year) == 10 and \
+ 1 <= ord(year[2]) <= 12:
# Pickle support
self = date.__new__(cls, year[:4])
self.__setstate(year, month)
@@ -1608,8 +1617,8 @@
year, month, day = _check_date_fields(year, month, day)
hour, minute, second, microsecond = _check_time_fields(hour, minute, second, microsecond)
_check_tzinfo_arg(tzinfo)
- return datetime(year, month, day, hour, minute, second,
- microsecond, tzinfo)
+ return datetime(year, month, day, hour, minute, second, microsecond,
+ tzinfo)
def astimezone(self, tz):
if not isinstance(tz, tzinfo):
@@ -1655,10 +1664,9 @@
Optional argument sep specifies the separator between date and
time, default 'T'.
"""
- s = ("%04d-%02d-%02d%c" % (self._year, self._month, self._day,
- sep) +
- _format_time(self._hour, self._minute, self._second,
- self._microsecond))
+ s = ("%04d-%02d-%02d%c" % (self._year, self._month, self._day, sep) +
+ _format_time(self._hour, self._minute, self._second,
+ self._microsecond))
off = self._utcoffset()
if off is not None:
if off < 0:
@@ -1672,7 +1680,7 @@
def __repr__(self):
"""Convert to formal string, for repr()."""
- L = [self._year, self._month, self._day, # These are never zero
+ L = [self._year, self._month, self._day, # These are never zero
self._hour, self._minute, self._second, self._microsecond]
if L[-1] == 0:
del L[-1]
@@ -1812,12 +1820,12 @@
base_compare = myoff == otoff
if base_compare:
- return cmp((self._year, self._month, self._day,
- self._hour, self._minute, self._second,
- self._microsecond),
- (other._year, other._month, other._day,
- other._hour, other._minute, other._second,
- other._microsecond))
+ return _cmp((self._year, self._month, self._day,
+ self._hour, self._minute, self._second,
+ self._microsecond),
+ (other._year, other._month, other._day,
+ other._hour, other._minute, other._second,
+ other._microsecond))
if myoff is None or otoff is None:
raise TypeError("cannot compare naive and aware datetimes")
# XXX What follows could be done more efficiently...
@@ -1883,20 +1891,22 @@
yhi, ylo = divmod(self._year, 256)
us2, us3 = divmod(self._microsecond, 256)
us1, us2 = divmod(us2, 256)
- basestate = ("%c" * 10) % (yhi, ylo, self._month, self._day,
- self._hour, self._minute, self._second,
- us1, us2, us3)
+ basestate = _struct.pack('10B', yhi, ylo, self._month, self._day,
+ self._hour, self._minute, self._second,
+ us1, us2, us3)
if self._tzinfo is None:
return (basestate,)
else:
return (basestate, self._tzinfo)
def __setstate(self, string, tzinfo):
- (self._month, self._day, self._hour, self._minute,
- self._second) = (ord(string[2]), ord(string[3]), ord(string[4]),
- ord(string[5]), ord(string[6]))
- self._year = ord(string[0]) * 256 + ord(string[1])
- self._microsecond = (((ord(string[7]) << 8) | ord(string[8])) << 8) | ord(string[9])
+ (yhi, ylo, self._month, self._day, self._hour,
+ self._minute, self._second, us1, us2, us3) = (ord(string[0]),
+ ord(string[1]), ord(string[2]), ord(string[3]),
+ ord(string[4]), ord(string[5]), ord(string[6]),
+ ord(string[7]), ord(string[8]), ord(string[9]))
+ self._year = yhi * 256 + ylo
+ self._microsecond = (((us1 << 8) | us2) << 8) | us3
self._tzinfo = tzinfo
def __reduce__(self):
@@ -1913,7 +1923,7 @@
# XXX This could be done more efficiently
THURSDAY = 3
firstday = _ymd2ord(year, 1, 1)
- firstweekday = (firstday + 6) % 7 # See weekday() above
+ firstweekday = (firstday + 6) % 7 # See weekday() above
week1monday = firstday - firstweekday
if firstweekday > THURSDAY:
week1monday += 7
diff --git a/lib_pypy/greenlet.py b/lib_pypy/greenlet.py
--- a/lib_pypy/greenlet.py
+++ b/lib_pypy/greenlet.py
@@ -111,7 +111,7 @@
# Internal stuff
try:
- from thread import _local
+ from threading import local as _local
except ImportError:
class _local(object): # assume no threads
pass
diff --git a/lib_pypy/grp.py b/lib_pypy/grp.py
--- a/lib_pypy/grp.py
+++ b/lib_pypy/grp.py
@@ -59,6 +59,12 @@
libc.getgrent.argtypes = []
libc.getgrent.restype = POINTER(GroupStruct)
+libc.setgrent.argtypes = []
+libc.setgrent.restype = None
+
+libc.endgrent.argtypes = []
+libc.endgrent.restype = None
+
def _group_from_gstruct(res):
i = 0
mem = []
diff --git a/lib_pypy/stackless.py b/lib_pypy/stackless.py
--- a/lib_pypy/stackless.py
+++ b/lib_pypy/stackless.py
@@ -93,7 +93,7 @@
try:
- from thread import _local
+ from threading import local as _local
except ImportError:
class _local(object): # assume no threads
pass
@@ -433,16 +433,16 @@
def insert(self):
if self.blocked:
- raise RuntimeError, "You cannot run a blocked tasklet"
+ raise RuntimeError("You cannot run a blocked tasklet")
if not self.alive:
- raise RuntimeError, "You cannot run an unbound(dead) tasklet"
+ raise RuntimeError("You cannot run an unbound(dead) tasklet")
_scheduler_append(self)
def remove(self):
if self.blocked:
- raise RuntimeError, "You cannot remove a blocked tasklet."
+ raise RuntimeError("You cannot remove a blocked tasklet.")
if self is getcurrent():
- raise RuntimeError, "The current tasklet cannot be removed."
+ raise RuntimeError("The current tasklet cannot be removed.")
# not sure if I will revive this " Use t=tasklet().capture()"
_scheduler_remove(self)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -4281,6 +4281,35 @@
"""
self.optimize_loop(ops, expected)
+ def test_add_sub_ovf_second_operation_regular(self):
+ py.test.skip("Smalltalk would like this to pass")
+ # This situation occurs in Smalltalk because it uses 1-based indexing.
+ # The below code is equivalent to a loop over an array.
+ ops = """
+ [i1]
+ i2 = int_sub(i1, 1)
+ escape(i2)
+ i3 = int_add_ovf(i1, 1)
+ guard_no_overflow() []
+ jump(i3)
+ """
+ preamble = """
+ [i1]
+ i2 = int_sub(i1, 1)
+ escape(i2)
+ i3 = int_add_ovf(i1, 1)
+ guard_no_overflow() []
+ jump(i3, i1)
+ """
+ expected = """
+ [i1, i2]
+ escape(i2)
+ i3 = int_add_ovf(i1, 1)
+ guard_no_overflow() []
+ jump(i3, i1)
+ """
+ self.optimize_loop(ops, expected, preamble)
+
def test_add_sub_ovf_virtual_unroll(self):
ops = """
[p15]
More information about the pypy-commit
mailing list