[pypy-svn] r4879 - in pypy/branch/src-newobjectmodel/pypy: interpreter objspace
arigo at codespeak.net
arigo at codespeak.net
Thu Jun 3 18:27:33 CEST 2004
Author: arigo
Date: Thu Jun 3 18:27:33 2004
New Revision: 4879
Modified:
pypy/branch/src-newobjectmodel/pypy/interpreter/function.py
pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py
Log:
Obscure hacks.
Modified: pypy/branch/src-newobjectmodel/pypy/interpreter/function.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/interpreter/function.py (original)
+++ pypy/branch/src-newobjectmodel/pypy/interpreter/function.py Thu Jun 3 18:27:33 2004
@@ -158,7 +158,9 @@
def descr_function_get(self, w_obj, w_cls):
space = self.space
wrap = space.wrap
- if not space.is_true(space.is_(w_obj, space.w_None)):
+ asking_for_bound = (not space.is_true(space.is_(w_obj, space.w_None)) or
+ space.is_true(space.is_(w_cls, space.type(space.w_None))))
+ if asking_for_bound:
if space.is_true(space.is_(w_cls, space.w_None)):
w_cls = space.type(w_obj)
return wrap(Method(space, wrap(self), w_obj, w_cls))
Modified: pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py (original)
+++ pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py Thu Jun 3 18:27:33 2004
@@ -74,7 +74,7 @@
__getattribute__ = gateway.interp2app(Object.descr__getattribute__.im_func),
__setattr__ = gateway.interp2app(Object.descr__setattr__.im_func),
__delattr__ = gateway.interp2app(Object.descr__delattr__.im_func),
- __str__ = gateway.interp2app(lambda space, w_x: str(w_x)),
+ __str__ = gateway.interp2app(lambda space, w_x: space.repr(w_x)),
__repr__ = gateway.interp2app(lambda space, w_x: repr(w_x)),
__class__ = GetSetProperty(self.__class__.type),
__init__ = gateway.interp2app(Object.descr__init__.im_func),
@@ -146,6 +146,8 @@
try:
return typedef.trivialwrapperclass
except AttributeError:
+ from pypy.interpreter.gateway import interp2app
+
# make the base first (assuming single inheritance)
mro = typedef.mro(self)
if len(mro) > 1:
@@ -156,12 +158,24 @@
# in rawdict
descrdict = {'__internalpypytypedef__': typedef}
for descrname, descr in typedef.rawdict.items():
- def fget(w_obj, w_descr=descr, space=self):
- return space.get(w_descr, w_obj, space.type(w_obj))
- def fset(w_obj, w_value, w_descr=descr, space=self):
- return space.set(w_descr, w_obj, w_value)
- def fdel(w_obj, w_descr=descr, space=self):
- return space.set(w_descr, w_obj)
+ if isinstance(descr, interp2app):
+ def fget(w_obj, descr=descr, space=self):
+ fn = descr.get_function()
+ return space.wrap(Method(space, space.wrap(fn), w_obj,
+ space.type(w_obj)))
+ fset = None
+ fdel = None
+ else:
+ # more generally, defining a property
+ def fget(w_obj, descr=descr, space=self):
+ w_descr = space.wrap(descr)
+ return space.get(w_descr, w_obj, space.type(w_obj))
+ def fset(w_obj, w_value, descr=descr, space=self):
+ w_descr = space.wrap(descr)
+ return space.set(w_descr, w_obj, w_value)
+ def fdel(w_obj, descr=descr, space=self):
+ w_descr = space.wrap(descr)
+ return space.set(w_descr, w_obj)
descrdict[descrname] = property(fget, fset, fdel)
cls = type('CPyWrapped '+typedef.name, bases, descrdict)
typedef.trivialwrapperclass = cls
More information about the Pypy-commit
mailing list