[pypy-svn] r4883 - pypy/branch/src-newobjectmodel/pypy/objspace

arigo at codespeak.net arigo at codespeak.net
Thu Jun 3 19:59:29 CEST 2004


Author: arigo
Date: Thu Jun  3 19:59:26 2004
New Revision: 4883

Modified:
   pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py
Log:
Oups.  It works and all the tests (minus 1) suddenly pass.
Go figure out why exactly.


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 19:59:26 2004
@@ -157,26 +157,27 @@
             # make the class dict with descriptors redirecting to the ones
             # in rawdict
             descrdict = {'__internalpypytypedef__': typedef}
-            for descrname, descr in typedef.rawdict.items():
-                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)
+            if typedef.name != 'object':
+                for descrname, descr in typedef.rawdict.items():
+                    if isinstance(descr, interp2app):
+                        def make_stuff(descr=descr, descrname=descrname, space=self):
+                            def stuff(w_obj, *args, **kwds):
+                                fn = descr.get_function(space)
+                                return fn.descr_function_call(w_obj, *args, **kwds)
+                            return stuff
+                        descrdict[descrname] = make_stuff()
+                    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
             return cls
@@ -431,13 +432,9 @@
                     return space.wrap(basedef.rawdict[name])
             return None 
         else:
-            # hack hack hack: ignore the real 'object' and use our own
-            for cls in w_obj.__class__.__mro__[:-1]:
+            for cls in w_obj.__class__.__mro__:
                 if name in cls.__dict__:
                     return cls.__dict__[name]
-            basedef = space.object_typedef
-            if name in basedef.rawdict:
-                return space.wrap(basedef.rawdict[name])
             return None
 
     def get_and_call(self, w_descr, w_obj, w_args, w_kwargs):



More information about the Pypy-commit mailing list