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

Reply via email to