Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: ClassRepr
Changeset: r73926:c81da0e396a9
Date: 2014-10-13 19:43 +0100
http://bitbucket.org/pypy/pypy/changeset/c81da0e396a9/

Log:    switch 1st and 3rd argument of ClassRepr.setup_vtable()

diff --git a/rpython/rtyper/rclass.py b/rpython/rtyper/rclass.py
--- a/rpython/rtyper/rclass.py
+++ b/rpython/rtyper/rclass.py
@@ -303,16 +303,15 @@
         vtable_part = self.vtable
         r_parentcls = self
         while r_parentcls.classdef is not None:
-            r_parentcls.setup_vtable(vtable_part, self)
+            self.setup_vtable(vtable_part, r_parentcls)
             vtable_part = vtable_part.super
             r_parentcls = r_parentcls.rbase
         self.fill_vtable_root(vtable_part)
 
-    def setup_vtable(self, vtable, rsubcls):
-        """Initialize the 'self' portion of the 'vtable' belonging to the
-        given subclass."""
+    def setup_vtable(self, vtable, r_parentcls):
+        """Initialize the vtable portion corresponding to 'r_parentcls'."""
         # setup class attributes: for each attribute name at the level
-        # of 'self', look up its value in the subclass rsubcls
+        # of 'r_parentcls', look up its value in the class
         def assign(mangled_name, value):
             if (isinstance(value, Constant) and
                     isinstance(value.value, staticmethod)):
@@ -320,20 +319,20 @@
             llvalue = r.convert_desc_or_const(value)
             setattr(vtable, mangled_name, llvalue)
 
-        for fldname in self.clsfields:
-            mangled_name, r = self.clsfields[fldname]
+        for fldname in r_parentcls.clsfields:
+            mangled_name, r = r_parentcls.clsfields[fldname]
             if r.lowleveltype is Void:
                 continue
-            value = rsubcls.classdef.classdesc.read_attribute(fldname, None)
+            value = self.classdef.classdesc.read_attribute(fldname, None)
             if value is not None:
                 assign(mangled_name, value)
         # extra PBC attributes
-        for (access_set, attr), (mangled_name, r) in self.pbcfields.items():
-            if rsubcls.classdef.classdesc not in access_set.descs:
+        for (access_set, attr), (mangled_name, r) in 
r_parentcls.pbcfields.items():
+            if self.classdef.classdesc not in access_set.descs:
                 continue   # only for the classes in the same pbc access set
             if r.lowleveltype is Void:
                 continue
-            attrvalue = rsubcls.classdef.classdesc.read_attribute(attr, None)
+            attrvalue = self.classdef.classdesc.read_attribute(attr, None)
             if attrvalue is not None:
                 assign(mangled_name, attrvalue)
 
@@ -433,10 +432,9 @@
         self.allmethods = {}
         self.vtable = None
 
-    def setup_vtable(self, vtable, rsubcls):
-        """Initialize the 'self' portion of the 'vtable' belonging to the
-        given subclass."""
-        raise RuntimeError('should not be called')
+    def init_vtable(self):
+        self.vtable = malloc(self.vtable_type, immortal=True)
+        self.fill_vtable_root(self.vtable)
 
 def get_type_repr(rtyper):
     return getclassrepr(rtyper, None)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to