Author: Maciej Fijalkowski <[email protected]>
Branch: imrpove-custom-gc-tracing
Changeset: r60193:7d6bb887766f
Date: 2013-01-19 11:46 +0200
http://bitbucket.org/pypy/pypy/changeset/7d6bb887766f/

Log:    a bit of shuffling before giving up

diff --git a/pypy/rpython/lltypesystem/opimpl.py 
b/pypy/rpython/lltypesystem/opimpl.py
--- a/pypy/rpython/lltypesystem/opimpl.py
+++ b/pypy/rpython/lltypesystem/opimpl.py
@@ -648,7 +648,7 @@
     pass
 
 def op_gc_call_custom_trace(gc, *args):
-    gc._call_custom_trace(*args)
+    gc._call_custom_trace_body(*args)
 
 def op_shrink_array(array, smallersize):
     return False
diff --git a/pypy/rpython/memory/gc/base.py b/pypy/rpython/memory/gc/base.py
--- a/pypy/rpython/memory/gc/base.py
+++ b/pypy/rpython/memory/gc/base.py
@@ -210,7 +210,7 @@
             i += 1
     trace._annspecialcase_ = 'specialize:arg(2)'
 
-    def _call_custom_trace(self, obj, typeid, callback, arg):
+    def _call_custom_trace_body(self, obj, typeid, callback, arg):
         #def wrapper(item, arg):
         #    if self.is_valid_gc_object(item):
         #        callback(item, arg)
@@ -219,6 +219,12 @@
             if typeid == obj_typeid:
                 func(obj, callback, arg)
 
+
+    @specialize.arg(3)
+    def _call_custom_trace(self, obj, typeid, callback, arg):
+        llop.gc_call_custom_trace(lltype.Void, self, obj, typeid, callback,
+                                  arg)
+
     def _trace_slow_path(self, obj, callback, arg):
         typeid = self.get_type_id(obj)
         if self.has_gcptr_in_varsize(typeid):
@@ -238,8 +244,7 @@
         if self.has_custom_trace(typeid):
             # an obscure hack to flow those only when we
             # actually have all typeids
-            llop.gc_call_custom_trace(lltype.Void, self, obj, typeid, callback,
-                                      arg)
+            self._call_custom_trace(obj, typeid, callback, arg)
     _trace_slow_path._annspecialcase_ = 'specialize:arg(2)'
 
     def trace_partial(self, obj, start, stop, callback, arg):
diff --git a/pypy/rpython/memory/gctransform/framework.py 
b/pypy/rpython/memory/gctransform/framework.py
--- a/pypy/rpython/memory/gctransform/framework.py
+++ b/pypy/rpython/memory/gctransform/framework.py
@@ -889,6 +889,8 @@
                   resultvar=op.result)
 
     def gct_gc_call_custom_trace(self, hop):
+        import pdb
+        pdb.set_trace()
         args = hop.spaceop.args
         args[3].concretetype
         hop.genop('direct_call', [])
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to