[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