[pypy-svn] r4838 - in pypy/branch/src-newobjectmodel/pypy/objspace: . descr

hpk at codespeak.net hpk at codespeak.net
Wed Jun 2 20:14:06 CEST 2004


Author: hpk
Date: Wed Jun  2 20:14:05 2004
New Revision: 4838

Modified:
   pypy/branch/src-newobjectmodel/pypy/objspace/descr/objspace.py
   pypy/branch/src-newobjectmodel/pypy/objspace/trivial.py
Log:
added call to DescrObjSpace 
added lookup to TrivObjSpace 



Modified: pypy/branch/src-newobjectmodel/pypy/objspace/descr/objspace.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/objspace/descr/objspace.py	(original)
+++ pypy/branch/src-newobjectmodel/pypy/objspace/descr/objspace.py	Wed Jun  2 20:14:05 2004
@@ -4,6 +4,13 @@
 
 class DescrObjSpace(ObjSpace):
 
+    def call(space, w_obj, w_args, w_kwargs):
+        w_descr = space.lookup(w_obj, '__call__')
+        if w_descr is None:
+            raise OperationError(space.w_TypeError, 
+                                 space.wrap('object is not callable'))
+        return space.get_and_call(w_descr, w_obj, w_args, w_kwargs)
+
     def getattr(space,w_obj,w_name):
         w_descr = space.lookup(w_obj,'__getattribute__')
         try:

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	Wed Jun  2 20:14:05 2004
@@ -384,6 +384,20 @@
     def round(self, *args):
         return round(*args)
 
+    def lookup(space, w_obj, name):
+        if isinstance(w_obj, Wrappable):
+            for basedef in w_obj.TypeDef.mro():
+                if name in basedef.rawdict:
+                    return space.wrap(basedef.rawdict[name])
+            return None 
+        else:
+            for cls in w_obj.__class__.__mro__:
+                if name in cls.__dict__:
+                    return cls.__dict__[name]
+            return None
+
+
+
 for m in ObjSpace.MethodTable:
     if not hasattr(TrivialObjSpace, m[0]):
         print m[0] # this should raise something



More information about the Pypy-commit mailing list