[pypy-svn] r54409 - in pypy/branch/io-improvements/pypy/rpython/memory: gctransform test
fijal at codespeak.net
fijal at codespeak.net
Sun May 4 16:35:48 CEST 2008
Author: fijal
Date: Sun May 4 16:35:47 2008
New Revision: 54409
Modified:
pypy/branch/io-improvements/pypy/rpython/memory/gctransform/transform.py
pypy/branch/io-improvements/pypy/rpython/memory/test/test_transformed_gc.py
Log:
Start default transformation of resize_buffer.
Modified: pypy/branch/io-improvements/pypy/rpython/memory/gctransform/transform.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/memory/gctransform/transform.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/memory/gctransform/transform.py Sun May 4 16:35:47 2008
@@ -522,6 +522,38 @@
gct_malloc_nonmovable = gct_malloc
gct_malloc_nonmovable_varsize = gct_malloc_varsize
+
+ gct_malloc_resizable_buffer = gct_malloc_varsize
+
+ def gct_resize_buffer(self, hop):
+ op = hop.spaceop
+ meth = self.gct_fv_gc_malloc_varsize
+ flags = {'flavor':'gc'}
+ self.varsize_malloc_helper(hop, flags, meth, [])
+ # fish resvar
+ v_newbuf = hop.llops[-1].result
+ v_src = op.args[0]
+ TYPE = v_src.concretetype.TO
+ v_arr = hop.genop('getfield', [v_src, rmodel.inputconst(lltype.Void,
+ TYPE._arrayfld)],
+ resulttype=getattr(TYPE, TYPE._arrayfld))
+ v_lgt = hop.genop('getfield', [v_arr, rmodel.inputconst(lltype.Void,
+ 'length')],
+ resulttype=lltype.Signed)
+ v_adrsrc = hop.genop('cast_ptr_to_adr', [v_src],
+ resulttype=llmemory.Address)
+ v_adrnewbuf = hop.genop('cast_ptr_to_adr', [v_newbuf],
+ resulttype=llmemory.Address)
+ ofs = (llmemory.offsetof(TYPE, TYPE._arrayfld) +
+ llmemory.itemoffsetof(getattr(TYPE, TYPE._arrayfld), 0))
+ v_ofs = rmodel.inputconst(lltype.Void, ofs)
+ v_adrsrc = hop.genop('adr_add', [v_adrsrc, v_ofs],
+ resulttype=llmemory.Address)
+ v_adrnewbuf = hop.genop('adr_add', [v_adrnewbuf, v_ofs],
+ resulttype=llmemory.Address)
+ vlist = [v_adrsrc, v_adrnewbuf, v_lgt]
+ hop.genop('raw_memcopy', vlist)
+ return v_newbuf
def varsize_malloc_helper(self, hop, flags, meth, extraargs):
def intconst(c): return rmodel.inputconst(lltype.Signed, c)
@@ -549,10 +581,8 @@
args = [hop] + extraargs + [flags, TYPE,
op.args[-1], c_const_size, c_item_size, c_offset_to_length]
v_raw = meth(*args)
-
hop.cast_result(v_raw)
-
def gct_fv_raw_malloc_varsize(self, hop, flags, TYPE, v_length, c_const_size, c_item_size,
c_offset_to_length):
if c_offset_to_length is None:
Modified: pypy/branch/io-improvements/pypy/rpython/memory/test/test_transformed_gc.py
==============================================================================
--- pypy/branch/io-improvements/pypy/rpython/memory/test/test_transformed_gc.py (original)
+++ pypy/branch/io-improvements/pypy/rpython/memory/test/test_transformed_gc.py Sun May 4 16:35:47 2008
@@ -492,17 +492,18 @@
run = self.runner(func)
assert run([]) == int(self.GC_CAN_MOVE)
- def test_raw_array(self):
+ def test_resizable_buffer(self):
+ py.test.skip("Does not work")
from pypy.rpython.lltypesystem.rstr import STR
from pypy.rpython.annlowlevel import hlstr
from pypy.rlib import rgc
def f():
- arr = rgc.raw_array_of_shape(STR, 1)
- arr[0] = 'a'
- arr = rgc.resize_raw_array(arr, 1, 2)
- arr[1] = 'b'
- return len(hlstr(rgc.cast_raw_array_to_shape(STR, arr, 2)))
+ ptr = rgc.resizable_buffer_of_shape(STR, 1)
+ ptr.chars[0] = 'a'
+ ptr = rgc.resize_buffer(ptr, 2)
+ ptr.chars[1] = 'b'
+ return len(hlstr(rgc.finish_building_buffer(ptr)))
run = self.runner(f)
assert run([]) == 2
More information about the Pypy-commit
mailing list