[pypy-svn] r49754 - in pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Fri Dec 14 00:17:21 CET 2007
Author: cfbolz
Date: Fri Dec 14 00:17:20 2007
New Revision: 49754
Modified:
pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py
pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py
Log:
make instance.__new__ work
Modified: pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py
==============================================================================
--- pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py (original)
+++ pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py Fri Dec 14 00:17:20 2007
@@ -255,6 +255,18 @@
return [None, None]
return space.unpacktuple(w_tup, 2)
+def descr_instance_new(space, w_type, w_class, w_dict=None):
+ # w_type is not used at all
+ if not isinstance(w_class, W_ClassObject):
+ raise OperationError(
+ space.w_TypeError,
+ space.wrap("instance() first arg must be class"))
+ if w_dict is None:
+ w_dict = space.newdict()
+ elif not space.is_true(space.isinstance(w_dict, space.w_dict)):
+ raise TypeError("instance() second arg must be dictionary or None")
+ return W_InstanceObject(space, w_class, w_dict)
+
class W_InstanceObject(Wrappable):
def __init__(self, space, w_class, w_dict=None):
if w_dict is None:
@@ -281,17 +293,6 @@
space.wrap("__class__ must be set to a class"))
self.w_class = w_class
- def descr_new(space, w_type, w_class, w_dict=None):
- # typ is not used at all
- if not isinstance(w_class, W_ClassObject):
- raise OperationError(
- space.w_TypeError,
- space.wrap("instance() first arg must be class"))
- if w_dict is None:
- w_dict = space.newdict()
- elif not space.is_true(space.isinstance(w_dict, space.w_dict)):
- raise TypeError("instance() second arg must be dictionary or None")
- return W_InstanceObject(space, w_class, w_dict)
def getattr(self, space, w_name, exc=True):
name = space.str_w(w_name)
@@ -621,7 +622,7 @@
unwrap_spec=["self", ObjSpace, W_Root])
W_InstanceObject.typedef = TypeDef("instance",
- __new__ = interp2app(W_InstanceObject.descr_new),
+ __new__ = interp2app(descr_instance_new),
__getattribute__ = interp2app(W_InstanceObject.descr_getattribute,
unwrap_spec=['self', ObjSpace, W_Root]),
__setattr__ = interp2app(W_InstanceObject.descr_setattr,
Modified: pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py
==============================================================================
--- pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py (original)
+++ pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/test/test_classobj.py Fri Dec 14 00:17:20 2007
@@ -569,3 +569,11 @@
raises(TypeError, "_classobj('abc', 1, {})")
raises(TypeError, "_classobj('abc', (1, ), {})")
raises(TypeError, "_classobj('abc', (), 3)")
+
+ def test_instance_new(self):
+ class A:
+ b = 1
+ a = A()
+ a = type(a).__new__(type(a), A, {'c': 2})
+ assert a.b == 1
+ assert a.c == 2
More information about the Pypy-commit
mailing list