[pypy-commit] pypy gc-incminimark-pinning: code cleanup for more consistency

groggi noreply at buildbot.pypy.org
Mon Jun 23 11:48:17 CEST 2014


Author: Gregor Wegberg <code at gregorwegberg.com>
Branch: gc-incminimark-pinning
Changeset: r72154:172776044a92
Date: 2014-06-18 13:51 +0200
http://bitbucket.org/pypy/pypy/changeset/172776044a92/

Log:	code cleanup for more consistency

	used 'can_move()' as the template for 'pin()', 'unpin()' and
	'_is_pinned()'

diff --git a/rpython/memory/gctransform/framework.py b/rpython/memory/gctransform/framework.py
--- a/rpython/memory/gctransform/framework.py
+++ b/rpython/memory/gctransform/framework.py
@@ -983,17 +983,24 @@
 
     def gct_gc_pin(self, hop):
         op = hop.spaceop
-        hop.genop("direct_call", [self.pin_ptr, self.c_const_gc, op.args[0]],
+        v_addr = hop.genop('cast_ptr_to_adr', [op.args[0]],
+            resulttype=llmemory.Address)
+        hop.genop("direct_call", [self.pin_ptr, self.c_const_gc, v_addr],
                   resultvar=op.result)
 
     def gct_gc_unpin(self, hop):
         op = hop.spaceop
-        hop.genop("direct_call", [self.unpin_ptr, self.c_const_gc, op.args[0]])
+        v_addr = hop.genop('cast_ptr_to_adr', [op.args[0]],
+            resulttype=llmemory.Address)
+        hop.genop("direct_call", [self.unpin_ptr, self.c_const_gc, v_addr],
+                  resultvar=op.result)
 
     def gct_gc__is_pinned(self, hop):
         op = hop.spaceop
-        hop.genop("direct_call", [self._is_pinned_ptr, self.c_const_gc, op.args[0]],
-                    resultvar=op.result)
+        v_addr = hop.genop('cast_ptr_to_adr', [op.args[0]],
+            resulttype=llmemory.Address)
+        hop.genop("direct_call", [self._is_pinned_ptr, self.c_const_gc, v_addr],
+                  resultvar=op.result)
 
     def gct_gc_thread_run(self, hop):
         assert self.translator.config.translation.thread
diff --git a/rpython/rlib/rgc.py b/rpython/rlib/rgc.py
--- a/rpython/rlib/rgc.py
+++ b/rpython/rlib/rgc.py
@@ -45,16 +45,13 @@
 class PinEntry(ExtRegistryEntry):
     _about_ = pin
 
-    def compute_result_annotation(self, s_arg):
-        from rpython.annotator.model import s_Bool
-        return s_Bool
+    def compute_result_annotation(self, s_p):
+        from rpython.annotator import model as annmodel
+        return annmodel.SomeBool()
 
     def specialize_call(self, hop):
         hop.exception_cannot_occur()
-        v_obj, = hop.inputargs(hop.args_r[0])
-        v_addr = hop.genop('cast_ptr_to_adr', [v_obj],
-                           resulttype=llmemory.Address)
-        return hop.genop('gc_pin', [v_addr], resulttype=lltype.Bool)
+        return hop.genop('gc_pin', hop.args_v, resulttype=hop.r_result)
 
 def unpin(obj):
     """Unpin 'obj', allowing it to move again.
@@ -66,15 +63,12 @@
 class UnpinEntry(ExtRegistryEntry):
     _about_ = unpin
 
-    def compute_result_annotation(self, s_arg):
+    def compute_result_annotation(self, s_p):
         pass
 
     def specialize_call(self, hop):
         hop.exception_cannot_occur()
-        v_obj, = hop.inputargs(hop.args_r[0])
-        v_addr = hop.genop('cast_ptr_to_adr', [v_obj],
-                           resulttype=llmemory.Address)
-        hop.genop('gc_unpin', [v_addr])
+        hop.genop('gc_unpin', hop.args_v)
 
 def _is_pinned(obj):
     """Method to check if 'obj' is pinned."""
@@ -83,16 +77,13 @@
 class IsPinnedEntry(ExtRegistryEntry):
     _about_ = _is_pinned
 
-    def compute_result_annotation(self, s_arg):
-        from rpython.annotator.model import s_Bool
-        return s_Bool
+    def compute_result_annotation(self, s_p):
+        from rpython.annotator import model as annmodel
+        return annmodel.SomeBool()
 
     def specialize_call(self, hop):
         hop.exception_cannot_occur()
-        v_obj, = hop.inputargs(hop.args_r[0])
-        v_addr = hop.genop('cast_ptr_to_adr', [v_obj],
-                           resulttype=llmemory.Address)
-        return hop.genop('gc__is_pinned', [v_addr], resulttype=lltype.Bool)
+        return hop.genop('gc__is_pinned', hop.args_v, resulttype=hop.r_result)
 
 # ____________________________________________________________
 # Annotation and specialization
diff --git a/rpython/rtyper/llinterp.py b/rpython/rtyper/llinterp.py
--- a/rpython/rtyper/llinterp.py
+++ b/rpython/rtyper/llinterp.py
@@ -860,13 +860,16 @@
         pass       # marker for trackgcroot.py
 
     def op_gc_pin(self, obj):
-        return self.heap.pin(obj)
+        addr = llmemory.cast_ptr_to_adr(obj)
+        return self.heap.pin(addr)
 
     def op_gc_unpin(self, obj):
-        self.heap.unpin(obj)
+        addr = llmemory.cast_ptr_to_adr(obj)
+        self.heap.unpin(addr)
 
     def op_gc__is_pinned(self, obj):
-        return self.heap._is_pinned(obj)
+        addr = llmemory.cast_ptr_to_adr(obj)
+        return self.heap._is_pinned(addr)
 
     def op_gc_detach_callback_pieces(self):
         raise NotImplementedError("gc_detach_callback_pieces")


More information about the pypy-commit mailing list