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