[pypy-commit] pypy jit-improve-nested-loops: hg merge default
hakanardo
noreply at buildbot.pypy.org
Fri Dec 23 10:15:06 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-improve-nested-loops
Changeset: r50827:896e5b681170
Date: 2011-12-23 10:14 +0100
http://bitbucket.org/pypy/pypy/changeset/896e5b681170/
Log: hg merge default
diff --git a/lib_pypy/_sqlite3.py b/lib_pypy/_sqlite3.py
--- a/lib_pypy/_sqlite3.py
+++ b/lib_pypy/_sqlite3.py
@@ -231,8 +231,10 @@
sqlite.sqlite3_result_text.argtypes = [c_void_p, c_char_p, c_int, c_void_p]
sqlite.sqlite3_result_text.restype = None
-sqlite.sqlite3_enable_load_extension.argtypes = [c_void_p, c_int]
-sqlite.sqlite3_enable_load_extension.restype = c_int
+HAS_LOAD_EXTENSION = hasattr(sqlite, "sqlite3_enable_load_extension")
+if HAS_LOAD_EXTENSION:
+ sqlite.sqlite3_enable_load_extension.argtypes = [c_void_p, c_int]
+ sqlite.sqlite3_enable_load_extension.restype = c_int
##########################################
# END Wrapped SQLite C API and constants
@@ -708,13 +710,14 @@
from sqlite3.dump import _iterdump
return _iterdump(self)
- def enable_load_extension(self, enabled):
- self._check_thread()
- self._check_closed()
+ if HAS_LOAD_EXTENSION:
+ def enable_load_extension(self, enabled):
+ self._check_thread()
+ self._check_closed()
- rc = sqlite.sqlite3_enable_load_extension(self.db, int(enabled))
- if rc != SQLITE_OK:
- raise OperationalError("Error enabling load extension")
+ rc = sqlite.sqlite3_enable_load_extension(self.db, int(enabled))
+ if rc != SQLITE_OK:
+ raise OperationalError("Error enabling load extension")
DML, DQL, DDL = range(3)
diff --git a/pypy/objspace/std/stringobject.py b/pypy/objspace/std/stringobject.py
--- a/pypy/objspace/std/stringobject.py
+++ b/pypy/objspace/std/stringobject.py
@@ -510,16 +510,6 @@
return space.wrap(res)
-def _replace_overflow_check(space, builder, new_piece):
- # Checks if adding new_piece chars to the builder would overflow, and
- # converts into an OverflowError.
- try:
- ovfcheck(builder.getlength() + new_piece)
- except OverflowError:
- raise OperationError(space.w_OverflowError,
- space.wrap("replace string is too long")
- )
-
def _string_replace(space, input, sub, by, maxsplit):
if maxsplit == 0:
return space.wrap(input)
@@ -548,7 +538,19 @@
builder.append_slice(input, upper, len(input))
else:
# An ok guess for the result size
- builder = StringBuilder(len(input))
+ count = input.count(sub)
+ if count > maxsplit and maxsplit > 0:
+ count = maxsplit
+ diff_len = len(by) - len(sub)
+ try:
+ result_size = ovfcheck(diff_len * count)
+ result_size = ovfcheck(result_size + len(input))
+ except OverflowError:
+ raise OperationError(space.w_OverflowError,
+ space.wrap("replace string is too long")
+ )
+
+ builder = StringBuilder(result_size)
start = 0
sublen = len(sub)
first = True
@@ -558,18 +560,14 @@
if next < 0:
break
if not first:
- _replace_overflow_check(space, builder, len(by))
builder.append(by)
first = False
- _replace_overflow_check(space, builder, next - start)
builder.append_slice(input, start, next)
start = next + sublen
maxsplit -= 1 # NB. if it's already < 0, it stays < 0
if not first:
- _replace_overflow_check(space, builder, len(by))
builder.append(by)
- _replace_overflow_check(space, builder, len(input) - start)
builder.append_slice(input, start, len(input))
return space.wrap(builder.build())
More information about the pypy-commit
mailing list