[pypy-svn] r49746 - pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__

cfbolz at codespeak.net cfbolz at codespeak.net
Thu Dec 13 22:58:13 CET 2007


Author: cfbolz
Date: Thu Dec 13 22:58:13 2007
New Revision: 49746

Modified:
   pypy/branch/interplevel-oldstyle-classes/pypy/module/__builtin__/interp_classobj.py
Log:
translation fixes. not perfectly efficient, but not too bad either


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	Thu Dec 13 22:58:13 2007
@@ -27,6 +27,7 @@
 
     # XXX missing: lengthy and obscure logic about "__module__"
         
+    bases = []
     for w_base in space.unpackiterable(w_bases):
         if not isinstance(w_base, W_ClassObject):
             w_metaclass = space.type(w_base)
@@ -35,13 +36,14 @@
                                            w_bases, w_dict)
             raise OperationError(space.w_TypeError,
                                  space.wrap("base must be class"))
+        bases.append(w_base)
 
-    return W_ClassObject(space, w_name, w_bases, w_dict)
+    return W_ClassObject(space, w_name, bases, w_dict)
 
 class W_ClassObject(Wrappable):
-    def __init__(self, space, w_name, w_bases, w_dict):
+    def __init__(self, space, w_name, bases, w_dict):
         self.name = space.str_w(w_name)
-        self.bases_w = space.unpackiterable(w_bases)
+        self.bases_w = bases
         self.w_dict = w_dict
 
     def getdict(self):
@@ -82,7 +84,7 @@
 
 
     def fget_bases(space, self):
-        return space.wrap(self.bases_w)
+        return space.newtuple(self.bases_w)
 
     def fset_bases(space, self, w_bases):
         # XXX in theory, this misses a check against inheritance cycles
@@ -93,11 +95,13 @@
                     space.w_TypeError,
                     space.wrap("__bases__ must be a tuple object"))
         bases_w = space.unpackiterable(w_bases)
+        bases = []
         for w_base in bases_w:
             if not isinstance(w_base, W_ClassObject):
                 raise OperationError(space.w_TypeError,
                                      space.wrap("__bases__ items must be classes"))
-        self.bases_w = bases_w
+            bases.append(w_base)
+        self.bases_w = bases
 
     def fdel_bases(space, self):
         raise OperationError(



More information about the Pypy-commit mailing list