Author: Armin Rigo <[email protected]>
Branch: stmgc-c4
Changeset: r65119:6bca9bb3fd22
Date: 2013-06-30 10:54 +0200
http://bitbucket.org/pypy/pypy/changeset/6bca9bb3fd22/
Log: Support gcremovetypeptr with stm, and in fact recommend it, as it is
done by direct reads of the h_tid.
diff --git a/rpython/config/translationoption.py
b/rpython/config/translationoption.py
--- a/rpython/config/translationoption.py
+++ b/rpython/config/translationoption.py
@@ -76,6 +76,9 @@
"stmgc": [("translation.gctransformer", "framework"),
("translation.gcrootfinder", "stm")],
},
+ suggests = {
+ "stmgc": [("translation.gcremovetypeptr", True)],
+ },
cmdline="--gc"),
ChoiceOption("gctransformer", "GC transformer that is used - internal",
["boehm", "ref", "framework", "none"],
diff --git a/rpython/translator/c/database.py b/rpython/translator/c/database.py
--- a/rpython/translator/c/database.py
+++ b/rpython/translator/c/database.py
@@ -87,6 +87,9 @@
elif T == WeakRef:
REALT = self.gcpolicy.get_real_weakref_type()
node = self.gettypedefnode(REALT)
+ elif isinstance(T, OpaqueType) and T.__name__ == "struct
stm_object_s":
+ from rpython.translator.stm.funcgen import
StmHeaderOpaqueDefNode
+ node = StmHeaderOpaqueDefNode(self, T)
else:
raise NoCorrespondingNode("don't know about %r" % (T,))
self.structdefnodes[key] = node
diff --git a/rpython/translator/stm/funcgen.py
b/rpython/translator/stm/funcgen.py
--- a/rpython/translator/stm/funcgen.py
+++ b/rpython/translator/stm/funcgen.py
@@ -1,8 +1,26 @@
from rpython.translator.c.support import c_string_constant, cdecl
-from rpython.translator.c.node import ContainerNode
+from rpython.translator.c.node import Node, ContainerNode
from rpython.translator.c.primitive import name_small_integer
+class StmHeaderOpaqueDefNode(Node):
+ typetag = 'struct'
+
+ def __init__(self, db, T):
+ Node.__init__(self, db)
+ self.T = T
+ self.name = 'stm_object_s'
+
+ def setup(self):
+ pass
+
+ def definition(self):
+ return []
+
+ def c_struct_field_name(self, _):
+ return 'h_tid'
+
+
class StmHeader_OpaqueNode(ContainerNode):
nodekind = 'stmhdr'
globalcontainer = True
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit