Author: Armin Rigo <[email protected]>
Branch: stm-thread-2
Changeset: r61591:7d37f41f86cb
Date: 2013-02-22 11:14 +0100
http://bitbucket.org/pypy/pypy/changeset/7d37f41f86cb/

Log:    Fix for fields that actually belong to parent classes

diff --git a/rpython/rlib/rstm.py b/rpython/rlib/rstm.py
--- a/rpython/rlib/rstm.py
+++ b/rpython/rlib/rstm.py
@@ -133,7 +133,6 @@
         fieldnames = hop.args_s[1].const
         lst = []
         v_instance = hop.inputarg(hop.args_r[0], arg=0)
-        STRUCT = v_instance.concretetype.TO
         for fieldname in fieldnames:
             if fieldname == '[':
                 lst.append(-2)    # start of sublist
@@ -142,7 +141,10 @@
                 lst.append(-1)    # end of sublist
                 continue
             fieldname = 'inst_' + fieldname
-            TYPE = getattr(STRUCT, fieldname) #xxx check also in parent structs
+            STRUCT = v_instance.concretetype.TO
+            while not hasattr(STRUCT, fieldname):
+                STRUCT = STRUCT.super
+            TYPE = getattr(STRUCT, fieldname)
             if TYPE == lltype.Signed:
                 kind = 1
             elif TYPE == lltype.Unsigned:
diff --git a/rpython/translator/stm/test/test_ztranslated.py 
b/rpython/translator/stm/test/test_ztranslated.py
--- a/rpython/translator/stm/test/test_ztranslated.py
+++ b/rpython/translator/stm/test/test_ztranslated.py
@@ -132,7 +132,9 @@
     def test_abort_info(self):
         from rpython.rtyper.lltypesystem.rclass import OBJECTPTR
 
-        class Foobar(object):
+        class Parent(object):
+            pass
+        class Foobar(Parent):
             pass
         globf = Foobar()
 
@@ -151,6 +153,7 @@
         perform_transaction = rstm.make_perform_transaction(check, PS)
 
         def main(argv):
+            Parent().xy = 0
             globf.yx = 'hi there %d' % len(argv)
             perform_transaction(lltype.nullptr(PS.TO))
             return 0
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to