[pypy-svn] r4864 - in pypy/branch/src-newobjectmodel/pypy: interpreter objspace
arigo at codespeak.net
arigo at codespeak.net
Thu Jun 3 15:31:39 CEST 2004
Author: arigo
Date: Thu Jun 3 15:31:39 2004
New Revision: 4864
Modified:
pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py
pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py
pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py
Log:
object.__setattr__, object.__delattr__, and tiny fixes.
Modified: pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py (original)
+++ pypy/branch/src-newobjectmodel/pypy/interpreter/baseobjspace.py Thu Jun 3 15:31:39 2004
@@ -9,8 +9,6 @@
class Wrappable(object):
"""A subclass of Wrappable is an internal, interpreter-level class
that can nevertheless be exposed at application-level by space.wrap()."""
- def __wrap__(self, space):
- return self
class NoValue(Exception):
"""Raised to signal absence of value, e.g. in the iterator accessing
Modified: pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py (original)
+++ pypy/branch/src-newobjectmodel/pypy/objspace/descroperation.py Thu Jun 3 15:31:39 2004
@@ -8,9 +8,9 @@
name = space.unwrap(w_name)
w_descr = space.lookup(w_obj, name)
if w_descr is not None:
- if space.is_data_descr(w_descr): #
+ if space.is_data_descr(w_descr):
return space.get(w_descr,w_obj,space.type(w_obj))
- w_dict = space.getdict(w_obj) #
+ w_dict = space.getdict(w_obj)
if w_dict is not None:
try:
return space.getitem(w_dict,w_name)
@@ -20,7 +20,32 @@
if w_descr is not None:
return space.get(w_descr,w_obj,space.type(w_obj))
raise OperationError(space.w_AttributeError,w_name)
-
+
+ def descr__setattr__(space, w_obj, w_name, w_value):
+ name = space.unwrap(w_name)
+ w_descr = space.lookup(w_obj, name)
+ if w_descr is not None:
+ if space.is_data_descr(w_descr):
+ return space.set(w_descr,w_obj,w_value)
+ w_dict = space.getdict(w_obj)
+ if w_dict is not None:
+ return space.setitem(w_dict,w_name,w_value)
+ raise OperationError(space.w_AttributeError,w_name)
+
+ def descr__delattr__(space, w_obj, w_name):
+ name = space.unwrap(w_name)
+ w_descr = space.lookup(w_obj, name)
+ if w_descr is not None:
+ if space.is_data_descr(w_descr):
+ return space.delete(w_descr,w_obj)
+ w_dict = space.getdict(w_obj)
+ if w_dict is not None:
+ return space.delitem(w_dict,w_name)
+ raise OperationError(space.w_AttributeError,w_name)
+
+ def descr__init__(space, w_obj, *args_w, **kwds_w):
+ pass # XXX some strange checking maybe
+
class DescrOperation:
def getdict(space, w_obj):
@@ -30,9 +55,7 @@
return space.get(w_descr, w_obj, space.type(w_obj))
def is_data_descr(space, w_obj):
- # XXX check this logic
- return (space.lookup(w_obj, '__set__') is not None and
- space.lookup(w_obj, '__get__') is not None)
+ return space.lookup(w_obj, '__set__') is not None
def get_and_call(space, w_descr, w_obj, w_args, w_kwargs):
if isinstance(w_descr, Function): # wrapped Function actually
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 15:31:39 2004
@@ -69,9 +69,12 @@
self.object_typedef = TypeDef('object',
__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)),
__repr__ = gateway.interp2app(lambda space, w_x: repr(w_x)),
__class__ = GetSetProperty(self.__class__.type),
+ __init__ = gateway.interp2app(Object.descr__init__.im_func),
)
self.w_None = None
More information about the Pypy-commit
mailing list