Author: Hakan Ardo <ha...@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()) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit