Author: Maciej Fijalkowski <[email protected]>
Branch:
Changeset: r47666:8888cd2f14e6
Date: 2011-09-28 23:38 -0300
http://bitbucket.org/pypy/pypy/changeset/8888cd2f14e6/
Log: Merge kill-unary-multimethods. Does not kill all of them, but at
least some like str_w, int_w etc.
diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -3,12 +3,12 @@
from pypy.interpreter.executioncontext import ExecutionContext, ActionFlag
from pypy.interpreter.executioncontext import UserDelAction, FrameTraceAction
from pypy.interpreter.error import OperationError, operationerrfmt
-from pypy.interpreter.error import new_exception_class
+from pypy.interpreter.error import new_exception_class, typed_unwrap_error_msg
from pypy.interpreter.argument import Arguments
from pypy.interpreter.miscutils import ThreadLocals
from pypy.tool.cache import Cache
from pypy.tool.uid import HUGEVAL_BYTES
-from pypy.rlib.objectmodel import we_are_translated, newlist
+from pypy.rlib.objectmodel import we_are_translated, newlist, compute_unique_id
from pypy.rlib.debug import make_sure_not_resized
from pypy.rlib.timer import DummyTimer, Timer
from pypy.rlib.rarithmetic import r_uint
@@ -186,6 +186,28 @@
def _set_mapdict_storage_and_map(self, storage, map):
raise NotImplementedError
+ # -------------------------------------------------------------------
+
+ def str_w(self, space):
+ w_msg = typed_unwrap_error_msg(space, "string", self)
+ raise OperationError(space.w_TypeError, w_msg)
+
+ def unicode_w(self, space):
+ raise OperationError(space.w_TypeError,
+ typed_unwrap_error_msg(space, "unicode", self))
+
+ def int_w(self, space):
+ raise OperationError(space.w_TypeError,
+ typed_unwrap_error_msg(space, "integer", self))
+
+ def uint_w(self, space):
+ raise OperationError(space.w_TypeError,
+ typed_unwrap_error_msg(space, "integer", self))
+
+ def bigint_w(self, space):
+ raise OperationError(space.w_TypeError,
+ typed_unwrap_error_msg(space, "integer", self))
+
class Wrappable(W_Root):
"""A subclass of Wrappable is an internal, interpreter-level class
@@ -901,7 +923,7 @@
ec.c_call_trace(frame, w_func, args)
try:
w_res = self.call_args(w_func, args)
- except OperationError, e:
+ except OperationError:
ec.c_exception_trace(frame, w_func)
raise
ec.c_return_trace(frame, w_func, args)
@@ -947,6 +969,9 @@
def isinstance_w(self, w_obj, w_type):
return self.is_true(self.isinstance(w_obj, w_type))
+ def id(self, w_obj):
+ return self.wrap(compute_unique_id(w_obj))
+
# The code below only works
# for the simple case (new-style instance).
# These methods are patched with the full logic by the __builtin__
@@ -999,8 +1024,6 @@
def eval(self, expression, w_globals, w_locals, hidden_applevel=False):
"NOT_RPYTHON: For internal debugging."
- import types
- from pypy.interpreter.pycode import PyCode
if isinstance(expression, str):
compiler = self.createcompiler()
expression = compiler.compile(expression, '?', 'eval', 0,
@@ -1012,7 +1035,6 @@
def exec_(self, statement, w_globals, w_locals, hidden_applevel=False,
filename=None):
"NOT_RPYTHON: For internal debugging."
- import types
if filename is None:
filename = '?'
from pypy.interpreter.pycode import PyCode
@@ -1210,6 +1232,18 @@
return None
return self.str_w(w_obj)
+ def str_w(self, w_obj):
+ return w_obj.str_w(self)
+
+ def int_w(self, w_obj):
+ return w_obj.int_w(self)
+
+ def uint_w(self, w_obj):
+ return w_obj.uint_w(self)
+
+ def bigint_w(self, w_obj):
+ return w_obj.bigint_w(self)
+
def realstr_w(self, w_obj):
# Like str_w, but only works if w_obj is really of type 'str'.
if not self.is_true(self.isinstance(w_obj, self.w_str)):
@@ -1217,6 +1251,9 @@
self.wrap('argument must be a string'))
return self.str_w(w_obj)
+ def unicode_w(self, w_obj):
+ return w_obj.unicode_w(self)
+
def realunicode_w(self, w_obj):
# Like unicode_w, but only works if w_obj is really of type
# 'unicode'.
diff --git a/pypy/interpreter/error.py b/pypy/interpreter/error.py
--- a/pypy/interpreter/error.py
+++ b/pypy/interpreter/error.py
@@ -458,3 +458,7 @@
if module:
space.setattr(w_exc, space.wrap("__module__"), space.wrap(module))
return w_exc
+
+def typed_unwrap_error_msg(space, expected, w_obj):
+ type_name = space.type(w_obj).getname(space)
+ return space.wrap("expected %s, got %s object" % (expected, type_name))
diff --git a/pypy/module/pypyjit/test/test_policy.py
b/pypy/module/pypyjit/test/test_policy.py
--- a/pypy/module/pypyjit/test/test_policy.py
+++ b/pypy/module/pypyjit/test/test_policy.py
@@ -3,8 +3,8 @@
pypypolicy = policy.PyPyJitPolicy()
def test_id_any():
- from pypy.objspace.std.default import id__ANY
- assert pypypolicy.look_inside_function(id__ANY)
+ from pypy.objspace.std.intobject import add__Int_Int
+ assert pypypolicy.look_inside_function(add__Int_Int)
def test_bigint():
from pypy.rlib.rbigint import rbigint
diff --git a/pypy/objspace/std/boolobject.py b/pypy/objspace/std/boolobject.py
--- a/pypy/objspace/std/boolobject.py
+++ b/pypy/objspace/std/boolobject.py
@@ -1,8 +1,10 @@
+from pypy.rlib.rbigint import rbigint
+from pypy.rlib.rarithmetic import r_uint
+from pypy.interpreter.error import OperationError
from pypy.objspace.std.model import registerimplementation, W_Object
from pypy.objspace.std.register_all import register_all
from pypy.objspace.std.intobject import W_IntObject
-
class W_BoolObject(W_Object):
from pypy.objspace.std.booltype import bool_typedef as typedef
_immutable_fields_ = ['boolval']
@@ -20,6 +22,21 @@
def unwrap(w_self, space):
return w_self.boolval
+ def int_w(w_self, space):
+ return int(w_self.boolval)
+
+ def uint_w(w_self, space):
+ intval = int(w_self.boolval)
+ if intval < 0:
+ raise OperationError(space.w_ValueError,
+ space.wrap("cannot convert negative integer
to unsigned"))
+ else:
+ return r_uint(intval)
+
+ def bigint_w(w_self, space):
+ return rbigint.fromint(int(w_self.boolval))
+
+
registerimplementation(W_BoolObject)
W_BoolObject.w_False = W_BoolObject(False)
diff --git a/pypy/objspace/std/default.py b/pypy/objspace/std/default.py
--- a/pypy/objspace/std/default.py
+++ b/pypy/objspace/std/default.py
@@ -1,48 +1,16 @@
"""Default implementation for some operation."""
-from pypy.interpreter.error import OperationError
+from pypy.interpreter.error import OperationError, typed_unwrap_error_msg
from pypy.objspace.std.register_all import register_all
-from pypy.rlib import objectmodel
-# The following default implementations are used before delegation is tried.
-# 'id' is normally the address of the wrapper.
-
-def id__ANY(space, w_obj):
- #print 'id:', w_obj
- return space.wrap(objectmodel.compute_unique_id(w_obj))
-
# __init__ should succeed if called internally as a multimethod
def init__ANY(space, w_obj, __args__):
pass
-def typed_unwrap_error_msg(space, expected, w_obj):
- type_name = space.type(w_obj).getname(space)
- return space.wrap("expected %s, got %s object" % (expected, type_name))
-
-def int_w__ANY(space,w_obj):
- raise OperationError(space.w_TypeError,
- typed_unwrap_error_msg(space, "integer", w_obj))
-
-def str_w__ANY(space,w_obj):
- raise OperationError(space.w_TypeError,
- typed_unwrap_error_msg(space, "string", w_obj))
-
def float_w__ANY(space,w_obj):
raise OperationError(space.w_TypeError,
typed_unwrap_error_msg(space, "float", w_obj))
-def uint_w__ANY(space,w_obj):
- raise OperationError(space.w_TypeError,
- typed_unwrap_error_msg(space, "integer", w_obj))
-
-def unicode_w__ANY(space,w_obj):
- raise OperationError(space.w_TypeError,
- typed_unwrap_error_msg(space, "unicode", w_obj))
-
-def bigint_w__ANY(space,w_obj):
- raise OperationError(space.w_TypeError,
- typed_unwrap_error_msg(space, "integer", w_obj))
-
register_all(vars())
diff --git a/pypy/objspace/std/intobject.py b/pypy/objspace/std/intobject.py
--- a/pypy/objspace/std/intobject.py
+++ b/pypy/objspace/std/intobject.py
@@ -30,7 +30,18 @@
def unwrap(w_self, space):
return int(w_self.intval)
+ int_w = unwrap
+ def uint_w(w_self, space):
+ intval = w_self.intval
+ if intval < 0:
+ raise OperationError(space.w_ValueError,
+ space.wrap("cannot convert negative integer
to unsigned"))
+ else:
+ return r_uint(intval)
+
+ def bigint_w(w_self, space):
+ return rbigint.fromint(w_self.intval)
registerimplementation(W_IntObject)
@@ -39,20 +50,6 @@
# alias and then teach copy_multimethods in smallintobject.py to override
# it. See int__Int for example.
-def int_w__Int(space, w_int1):
- return int(w_int1.intval)
-
-def uint_w__Int(space, w_int1):
- intval = w_int1.intval
- if intval < 0:
- raise OperationError(space.w_ValueError,
- space.wrap("cannot convert negative integer to
unsigned"))
- else:
- return r_uint(intval)
-
-def bigint_w__Int(space, w_int1):
- return rbigint.fromint(w_int1.intval)
-
def repr__Int(space, w_int1):
a = w_int1.intval
res = str(a)
diff --git a/pypy/objspace/std/longobject.py b/pypy/objspace/std/longobject.py
--- a/pypy/objspace/std/longobject.py
+++ b/pypy/objspace/std/longobject.py
@@ -45,6 +45,26 @@
fromrarith_int._annspecialcase_ = "specialize:argtype(0)"
fromrarith_int = staticmethod(fromrarith_int)
+ def int_w(w_self, space):
+ try:
+ return w_self.num.toint()
+ except OverflowError:
+ raise OperationError(space.w_OverflowError, space.wrap(
+ "long int too large to convert to int"))
+
+ def uint_w(w_self, space):
+ try:
+ return w_self.num.touint()
+ except ValueError:
+ raise OperationError(space.w_ValueError, space.wrap(
+ "cannot convert negative integer to unsigned int"))
+ except OverflowError:
+ raise OperationError(space.w_OverflowError, space.wrap(
+ "long int too large to convert to unsigned int"))
+
+ def bigint_w(w_self, space):
+ return w_self.num
+
def __repr__(self):
return '<W_LongObject(%d)>' % self.num.tolong()
@@ -104,27 +124,6 @@
raise OperationError(space.w_OverflowError,
space.wrap("long int too large to convert to
float"))
-def int_w__Long(space, w_value):
- try:
- return w_value.num.toint()
- except OverflowError:
- raise OperationError(space.w_OverflowError, space.wrap(
- "long int too large to convert to int"))
-
-
-def uint_w__Long(space, w_value):
- try:
- return w_value.num.touint()
- except ValueError:
- raise OperationError(space.w_ValueError, space.wrap(
- "cannot convert negative integer to unsigned int"))
- except OverflowError:
- raise OperationError(space.w_OverflowError, space.wrap(
- "long int too large to convert to unsigned int"))
-
-def bigint_w__Long(space, w_value):
- return w_value.num
-
def repr__Long(space, w_long):
return space.wrap(w_long.num.repr())
diff --git a/pypy/objspace/std/model.py b/pypy/objspace/std/model.py
--- a/pypy/objspace/std/model.py
+++ b/pypy/objspace/std/model.py
@@ -442,6 +442,13 @@
mm.dispatch_tree = merge(self.dispatch_tree, other.dispatch_tree)
return mm
+NOT_MULTIMETHODS = dict.fromkeys(
+ ['delattr', 'delete', 'get', 'id', 'inplace_div', 'inplace_floordiv',
+ 'inplace_lshift', 'inplace_mod', 'inplace_pow', 'inplace_rshift',
+ 'inplace_truediv', 'is_', 'set', 'setattr', 'type', 'userdel',
+ 'isinstance', 'issubtype'])
+# XXX should we just remove those from the method table or we're happy
+# with just not having multimethods?
class MM:
"""StdObjSpace multimethods"""
@@ -451,22 +458,17 @@
init = StdObjSpaceMultiMethod('__init__', 1, general__args__=True)
getnewargs = StdObjSpaceMultiMethod('__getnewargs__', 1)
# special visible multimethods
- int_w = StdObjSpaceMultiMethod('int_w', 1, []) # returns an
unwrapped int
- str_w = StdObjSpaceMultiMethod('str_w', 1, []) # returns an
unwrapped string
float_w = StdObjSpaceMultiMethod('float_w', 1, []) # returns an
unwrapped float
- uint_w = StdObjSpaceMultiMethod('uint_w', 1, []) # returns an
unwrapped unsigned int (r_uint)
- unicode_w = StdObjSpaceMultiMethod('unicode_w', 1, []) # returns an
unwrapped list of unicode characters
- bigint_w = StdObjSpaceMultiMethod('bigint_w', 1, []) # returns an
unwrapped rbigint
# NOTE: when adding more sometype_w() methods, you need to write a
# stub in default.py to raise a space.w_TypeError
marshal_w = StdObjSpaceMultiMethod('marshal_w', 1, [],
extra_args=['marshaller'])
- log = StdObjSpaceMultiMethod('log', 1, [], extra_args=['base'])
# add all regular multimethods here
for _name, _symbol, _arity, _specialnames in ObjSpace.MethodTable:
- if _name not in locals():
+ if _name not in locals() or _name in NOT_MULTIMETHODS:
mm = StdObjSpaceMultiMethod(_symbol, _arity, _specialnames)
locals()[_name] = mm
del mm
pow.extras['defaults'] = (None,)
+
diff --git a/pypy/objspace/std/objspace.py b/pypy/objspace/std/objspace.py
--- a/pypy/objspace/std/objspace.py
+++ b/pypy/objspace/std/objspace.py
@@ -1,6 +1,6 @@
import __builtin__
import types
-from pypy.interpreter import pyframe, function, special
+from pypy.interpreter import special
from pypy.interpreter.baseobjspace import ObjSpace, Wrappable
from pypy.interpreter.error import OperationError, operationerrfmt
from pypy.interpreter.typedef import get_unique_interplevel_subclass
@@ -12,8 +12,6 @@
from pypy.rlib.rarithmetic import base_int, widen
from pypy.rlib.objectmodel import we_are_translated
from pypy.rlib import jit
-from pypy.rlib.rbigint import rbigint
-from pypy.tool.sourcetools import func_with_new_name
# Object imports
from pypy.objspace.std.boolobject import W_BoolObject
diff --git a/pypy/objspace/std/ropeobject.py b/pypy/objspace/std/ropeobject.py
--- a/pypy/objspace/std/ropeobject.py
+++ b/pypy/objspace/std/ropeobject.py
@@ -34,12 +34,18 @@
def unwrap(w_self, space):
return w_self._node.flatten_string()
+ str_w = unwrap
def create_if_subclassed(w_self):
if type(w_self) is W_RopeObject:
return w_self
return W_RopeObject(w_self._node)
+ def unicode_w(w_self, space):
+ # XXX should this use the default encoding?
+ from pypy.objspace.std.unicodetype import plain_str2unicode
+ return plain_str2unicode(space, w_self._node.flatten_string())
+
W_RopeObject.EMPTY = W_RopeObject(rope.LiteralStringNode.EMPTY)
W_RopeObject.PREBUILT = [W_RopeObject(rope.LiteralStringNode.PREBUILT[i])
for i in range(256)]
@@ -663,9 +669,6 @@
return W_RopeObject(rope.concatenate(
rope.multiply(zero, middle), node))
-def str_w__Rope(space, w_str):
- return w_str._node.flatten_string()
-
def hash__Rope(space, w_str):
return wrapint(space, rope.hash_rope(w_str._node))
diff --git a/pypy/objspace/std/ropeunicodeobject.py
b/pypy/objspace/std/ropeunicodeobject.py
--- a/pypy/objspace/std/ropeunicodeobject.py
+++ b/pypy/objspace/std/ropeunicodeobject.py
@@ -91,11 +91,17 @@
# for testing
return w_self._node.flatten_unicode()
+ def str_w(w_self, space):
+ return space.str_w(space.str(w_self))
+
def create_if_subclassed(w_self):
if type(w_self) is W_RopeUnicodeObject:
return w_self
return W_RopeUnicodeObject(w_self._node)
+ def unicode_w(self, space):
+ return self._node.flatten_unicode()
+
W_RopeUnicodeObject.EMPTY = W_RopeUnicodeObject(rope.LiteralStringNode.EMPTY)
registerimplementation(W_RopeUnicodeObject)
@@ -157,12 +163,6 @@
assert isinstance(w_uni, W_RopeUnicodeObject) # help the annotator!
return w_uni
-def str_w__RopeUnicode(space, w_uni):
- return space.str_w(space.str(w_uni))
-
-def unicode_w__RopeUnicode(space, w_uni):
- return w_uni._node.flatten_unicode()
-
def str__RopeUnicode(space, w_uni):
return space.call_method(w_uni, 'encode')
diff --git a/pypy/objspace/std/smallintobject.py
b/pypy/objspace/std/smallintobject.py
--- a/pypy/objspace/std/smallintobject.py
+++ b/pypy/objspace/std/smallintobject.py
@@ -7,16 +7,30 @@
from pypy.objspace.std.register_all import register_all
from pypy.objspace.std.noneobject import W_NoneObject
from pypy.objspace.std.intobject import W_IntObject
+from pypy.interpreter.error import OperationError
from pypy.rlib.objectmodel import UnboxedValue
+from pypy.rlib.rbigint import rbigint
+from pypy.rlib.rarithmetic import r_uint
from pypy.tool.sourcetools import func_with_new_name
-
class W_SmallIntObject(W_Object, UnboxedValue):
__slots__ = 'intval'
from pypy.objspace.std.inttype import int_typedef as typedef
def unwrap(w_self, space):
return int(w_self.intval)
+ int_w = unwrap
+
+ def uint_w(w_self, space):
+ intval = w_self.intval
+ if intval < 0:
+ raise OperationError(space.w_ValueError,
+ space.wrap("cannot convert negative integer
to unsigned"))
+ else:
+ return r_uint(intval)
+
+ def bigint_w(w_self, space):
+ return rbigint.fromint(w_self.intval)
registerimplementation(W_SmallIntObject)
diff --git a/pypy/objspace/std/smalllongobject.py
b/pypy/objspace/std/smalllongobject.py
--- a/pypy/objspace/std/smalllongobject.py
+++ b/pypy/objspace/std/smalllongobject.py
@@ -39,6 +39,30 @@
def __repr__(w_self):
return '<W_SmallLongObject(%d)>' % w_self.longlong
+ def int_w(w_self, space):
+ a = w_self.longlong
+ b = intmask(a)
+ if b == a:
+ return b
+ else:
+ raise OperationError(space.w_OverflowError, space.wrap(
+ "long int too large to convert to int"))
+
+ def uint_w(w_self, space):
+ a = w_self.longlong
+ if a < 0:
+ raise OperationError(space.w_ValueError, space.wrap(
+ "cannot convert negative integer to unsigned int"))
+ b = r_uint(a)
+ if r_longlong(b) == a:
+ return b
+ else:
+ raise OperationError(space.w_OverflowError, space.wrap(
+ "long int too large to convert to unsigned int"))
+
+ def bigint_w(w_self, space):
+ return w_self.asbigint()
+
registerimplementation(W_SmallLongObject)
# ____________________________________________________________
@@ -102,30 +126,6 @@
def float__SmallLong(space, w_value):
return space.newfloat(float(w_value.longlong))
-def int_w__SmallLong(space, w_value):
- a = w_value.longlong
- b = intmask(a)
- if b == a:
- return b
- else:
- raise OperationError(space.w_OverflowError, space.wrap(
- "long int too large to convert to int"))
-
-def uint_w__SmallLong(space, w_value):
- a = w_value.longlong
- if a < 0:
- raise OperationError(space.w_ValueError, space.wrap(
- "cannot convert negative integer to unsigned int"))
- b = r_uint(a)
- if r_longlong(b) == a:
- return b
- else:
- raise OperationError(space.w_OverflowError, space.wrap(
- "long int too large to convert to unsigned int"))
-
-def bigint_w__SmallLong(space, w_value):
- return w_value.asbigint()
-
def lt__SmallLong_SmallLong(space, w_small1, w_small2):
return space.newbool(w_small1.longlong < w_small2.longlong)
def le__SmallLong_SmallLong(space, w_small1, w_small2):
diff --git a/pypy/objspace/std/strbufobject.py
b/pypy/objspace/std/strbufobject.py
--- a/pypy/objspace/std/strbufobject.py
+++ b/pypy/objspace/std/strbufobject.py
@@ -32,6 +32,9 @@
def unwrap(self, space):
return self.force()
+ def str_w(self, space):
+ return self.force()
+
registerimplementation(W_StringBufferObject)
# ____________________________________________________________
@@ -55,9 +58,6 @@
def len__StringBuffer(space, w_self):
return space.wrap(w_self.length)
-def str_w__StringBuffer(space, w_strbuf):
- return w_strbuf.force()
-
def add__StringBuffer_String(space, w_self, w_other):
if w_self.builder.getlength() != w_self.length:
builder = StringBuilder()
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
@@ -33,17 +33,20 @@
def unwrap(w_self, space):
return w_self._value
+ def str_w(w_self, space):
+ return w_self._value
+
+ def unicode_w(w_self, space):
+ # XXX should this use the default encoding?
+ from pypy.objspace.std.unicodetype import plain_str2unicode
+ return plain_str2unicode(space, w_self._value)
+
registerimplementation(W_StringObject)
W_StringObject.EMPTY = W_StringObject('')
W_StringObject.PREBUILT = [W_StringObject(chr(i)) for i in range(256)]
del i
-def unicode_w__String(space, w_self):
- # XXX should this use the default encoding?
- from pypy.objspace.std.unicodetype import plain_str2unicode
- return plain_str2unicode(space, w_self._value)
-
def _is_generic(space, w_self, fun):
v = w_self._value
if len(v) == 0:
@@ -773,8 +776,6 @@
return space.wrap("".join(buf))
-def str_w__String(space, w_str):
- return w_str._value
def hash__String(space, w_str):
s = w_str._value
diff --git a/pypy/objspace/std/strjoinobject.py
b/pypy/objspace/std/strjoinobject.py
--- a/pypy/objspace/std/strjoinobject.py
+++ b/pypy/objspace/std/strjoinobject.py
@@ -29,6 +29,7 @@
def unwrap(w_self, space):
return w_self.force()
+ str_w = unwrap
registerimplementation(W_StringJoinObject)
@@ -45,9 +46,6 @@
result += len(w_self.joined_strs[i])
return space.wrap(result)
-def str_w__StringJoin(space, w_str):
- return w_str.force()
-
def add__StringJoin_StringJoin(space, w_self, w_other):
if len(w_self.joined_strs) > w_self.until:
w_self.force(True)
diff --git a/pypy/objspace/std/strsliceobject.py
b/pypy/objspace/std/strsliceobject.py
--- a/pypy/objspace/std/strsliceobject.py
+++ b/pypy/objspace/std/strsliceobject.py
@@ -31,6 +31,9 @@
w_self.stop = len(str)
return str
+ def str_w(w_self, space):
+ return w_self.force()
+
def __repr__(w_self):
""" representation for debugging purposes """
return "%s(%r[%d:%d])" % (w_self.__class__.__name__,
@@ -165,11 +168,6 @@
return space.w_True
return space.w_False
-
-def str_w__StringSlice(space, w_str):
- return w_str.force()
-
-
def getitem__StringSlice_ANY(space, w_str, w_index):
ival = space.getindex_w(w_index, space.w_IndexError, "string index")
slen = w_str.stop - w_str.start
diff --git a/pypy/objspace/std/test/test_boolobject.py
b/pypy/objspace/std/test/test_boolobject.py
--- a/pypy/objspace/std/test/test_boolobject.py
+++ b/pypy/objspace/std/test/test_boolobject.py
@@ -17,6 +17,12 @@
def test_false(self):
assert not self.space.is_true(self.false)
+
+ def test_uint_w(self):
+ assert self.space.uint_w(self.true) == 1
+
+ def test_rbigint_w(self):
+ assert self.space.bigint_w(self.true)._digits == [1]
class AppTestAppBoolTest:
def test_bool_callable(self):
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
@@ -40,6 +40,12 @@
return w_self
return W_UnicodeObject(w_self._value)
+ def str_w(self, space):
+ return space.str_w(space.str(self))
+
+ def unicode_w(self, space):
+ return self._value
+
W_UnicodeObject.EMPTY = W_UnicodeObject(u'')
registerimplementation(W_UnicodeObject)
@@ -99,12 +105,6 @@
return space.not_(result)
return result
-def str_w__Unicode(space, w_uni):
- return space.str_w(str__Unicode(space, w_uni))
-
-def unicode_w__Unicode(space, w_uni):
- return w_uni._value
-
def str__Unicode(space, w_uni):
from pypy.objspace.std.unicodetype import encode_object
return encode_object(space, w_uni, None, None)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit