Author: Armin Rigo <[email protected]>
Branch: fix-strbuf
Changeset: r78712:8736f18f1529
Date: 2015-07-29 17:21 +0200
http://bitbucket.org/pypy/pypy/changeset/8736f18f1529/
Log: Fixes
diff --git a/pypy/module/cpyext/unicodeobject.py
b/pypy/module/cpyext/unicodeobject.py
--- a/pypy/module/cpyext/unicodeobject.py
+++ b/pypy/module/cpyext/unicodeobject.py
@@ -196,7 +196,6 @@
def PyUnicode_GET_SIZE(space, w_obj):
"""Return the size of the object. o has to be a PyUnicodeObject (not
checked)."""
- assert isinstance(w_obj, unicodeobject.W_UnicodeObject)
return space.len_w(w_obj)
@cpython_api([PyObject], rffi.CWCHARP, error=CANNOT_FAIL)
diff --git a/pypy/objspace/std/bytesobject.py b/pypy/objspace/std/bytesobject.py
--- a/pypy/objspace/std/bytesobject.py
+++ b/pypy/objspace/std/bytesobject.py
@@ -561,9 +561,10 @@
@staticmethod
def _use_rstr_ops(space, w_other):
- from pypy.objspace.std.unicodeobject import W_UnicodeObject
+ from pypy.objspace.std.unicodeobject import W_AbstractUnicodeObject
+ W_AbstractUnicodeObject
return (isinstance(w_other, W_AbstractBytesObject) or
- isinstance(w_other, W_UnicodeObject))
+ isinstance(w_other, W_AbstractUnicodeObject))
@staticmethod
def _op_val(space, w_other):
@@ -760,12 +761,12 @@
_StringMethods_descr_contains = descr_contains
def descr_contains(self, space, w_sub):
if space.isinstance_w(w_sub, space.w_unicode):
- from pypy.objspace.std.unicodeobject import W_UnicodeObject
- assert isinstance(w_sub, W_UnicodeObject)
+ from pypy.objspace.std.unicodeobject import W_AbstractUnicodeObject
+ assert isinstance(w_sub, W_AbstractUnicodeObject)
self_as_unicode = unicode_from_encoded_object(space, self, None,
None)
return space.newbool(
- self_as_unicode._value.find(w_sub._value) >= 0)
+ self_as_unicode._value.find(w_sub.unicode_w(space)) >= 0)
return self._StringMethods_descr_contains(space, w_sub)
_StringMethods_descr_replace = descr_replace
diff --git a/pypy/objspace/std/marshal_impl.py
b/pypy/objspace/std/marshal_impl.py
--- a/pypy/objspace/std/marshal_impl.py
+++ b/pypy/objspace/std/marshal_impl.py
@@ -8,7 +8,7 @@
from pypy.interpreter.pycode import PyCode
from pypy.interpreter import unicodehelper
from pypy.objspace.std.boolobject import W_BoolObject
-from pypy.objspace.std.bytesobject import W_BytesObject
+from pypy.objspace.std.bytesobject import W_AbstractBytesObject
from pypy.objspace.std.complexobject import W_ComplexObject
from pypy.objspace.std.dictmultiobject import W_DictMultiObject
from pypy.objspace.std.intobject import W_IntObject
@@ -19,7 +19,7 @@
from pypy.objspace.std.setobject import W_FrozensetObject, W_SetObject
from pypy.objspace.std.tupleobject import W_AbstractTupleObject
from pypy.objspace.std.typeobject import W_TypeObject
-from pypy.objspace.std.unicodeobject import W_UnicodeObject
+from pypy.objspace.std.unicodeobject import W_AbstractUnicodeObject
TYPE_NULL = '0'
@@ -244,7 +244,7 @@
return space.newcomplex(real, imag)
-@marshaller(W_BytesObject)
+@marshaller(W_AbstractBytesObject)
def marshal_bytes(space, w_str, m):
s = space.str_w(w_str)
if m.version >= 1 and space.is_interned_str(s):
@@ -394,7 +394,7 @@
name, firstlineno, lnotab, freevars, cellvars)
-@marshaller(W_UnicodeObject)
+@marshaller(W_AbstractUnicodeObject)
def marshal_unicode(space, w_unicode, m):
s = unicodehelper.encode_utf8(space, space.unicode_w(w_unicode))
m.atom_str(TYPE_UNICODE, s)
diff --git a/pypy/objspace/std/test/test_unibufobject.py
b/pypy/objspace/std/test/test_unibufobject.py
--- a/pypy/objspace/std/test/test_unibufobject.py
+++ b/pypy/objspace/std/test/test_unibufobject.py
@@ -108,3 +108,15 @@
a += u'bc'
assert a.startswith('abcb')
assert not a.startswith('1234')
+
+ def test_str_contains_u(self):
+ a = u'abc'
+ a += u'bc'
+ assert a in '--abcbc--'
+ assert a not in '--abcBc--'
+
+ def test_int_unicode(self):
+ a = u'12'
+ a += u'3'
+ assert int(a) == 123
+ assert long(a) == 123
diff --git a/pypy/objspace/std/unicodeobject.py
b/pypy/objspace/std/unicodeobject.py
--- a/pypy/objspace/std/unicodeobject.py
+++ b/pypy/objspace/std/unicodeobject.py
@@ -771,8 +771,7 @@
spec = space.unicode_w(w_format_spec)
formatter = newformat.unicode_formatter(space, spec)
self2 = unicode_from_object(space, self)
- assert isinstance(self2, W_UnicodeObject)
- return formatter.format_string(self2._value)
+ return formatter.format_string(self2.unicode_w(space))
def descr_mod(self, space, w_values):
return mod_format(space, self, w_values, do_unicode=True)
@@ -977,11 +976,12 @@
raise oefmt(space.w_TypeError, "decoding bytearray is not supported")
w_retval = decode_object(space, w_obj, encoding, errors)
- if not space.isinstance_w(w_retval, space.w_unicode):
- raise oefmt(space.w_TypeError,
- "decoder did not return an unicode object (type '%T')",
- w_retval)
- assert isinstance(w_retval, W_UnicodeObject)
+ if not isinstance(w_retval, W_UnicodeObject):
+ if not space.isinstance_w(w_retval, space.w_unicode):
+ raise oefmt(space.w_TypeError,
+ "decoder did not return an unicode object (type '%T')",
+ w_retval)
+ w_retval = W_UnicodeObject(w_retval.unicode_w(space))
return w_retval
@@ -1115,9 +1115,9 @@
# Helper for converting int/long
def unicode_to_decimal_w(space, w_unistr):
- if not isinstance(w_unistr, W_UnicodeObject):
+ if not space.isinstance_w(w_unistr, space.w_unicode):
raise oefmt(space.w_TypeError, "expected unicode, got '%T'", w_unistr)
- unistr = w_unistr._value
+ unistr = w_unistr.unicode_w(space)
result = ['\0'] * len(unistr)
digits = ['0', '1', '2', '3', '4',
'5', '6', '7', '8', '9']
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit