Author: Armin Rigo <[email protected]>
Branch: stm
Changeset: r48802:85ce549541e6
Date: 2011-11-05 18:40 +0100
http://bitbucket.org/pypy/pypy/changeset/85ce549541e6/
Log: malloc_varsize.
diff --git a/pypy/translator/stm/llstminterp.py
b/pypy/translator/stm/llstminterp.py
--- a/pypy/translator/stm/llstminterp.py
+++ b/pypy/translator/stm/llstminterp.py
@@ -131,6 +131,11 @@
self.check_stm_mode(lambda m: m != "regular_transaction")
return LLFrame.op_malloc(self, TYPE, flags)
+ def opstm_malloc_varsize(self, TYPE, flags, size):
+ if flags['flavor'] != 'gc':
+ self.check_stm_mode(lambda m: m != "regular_transaction")
+ return LLFrame.op_malloc_varsize(self, TYPE, flags, size)
+
# ---------- stm-only operations ----------
# Note that for these tests we assume no real multithreading,
# so that we just emulate the operations the easy way
diff --git a/pypy/translator/stm/test/test_transform.py
b/pypy/translator/stm/test/test_transform.py
--- a/pypy/translator/stm/test/test_transform.py
+++ b/pypy/translator/stm/test/test_transform.py
@@ -129,6 +129,12 @@
lltype.malloc(S)
eval_stm_func(func, [], final_stm_mode="regular_transaction")
+def test_supported_malloc_varsize():
+ A = lltype.GcArray(lltype.Signed)
+ def func():
+ lltype.malloc(A, 5)
+ eval_stm_func(func, [], final_stm_mode="regular_transaction")
+
def test_unsupported_malloc():
S = lltype.Struct('S', ('x', lltype.Signed)) # non-GC structure
def func():
diff --git a/pypy/translator/stm/transform.py b/pypy/translator/stm/transform.py
--- a/pypy/translator/stm/transform.py
+++ b/pypy/translator/stm/transform.py
@@ -194,6 +194,10 @@
flags = op.args[1].value
return flags['flavor'] == 'gc'
+ def stt_malloc_varsize(self, newoperations, op):
+ flags = op.args[1].value
+ return flags['flavor'] == 'gc'
+
def stt_gc_stack_bottom(self, newoperations, op):
self.seen_gc_stack_bottom = True
newoperations.append(op)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit