[pypy-svn] r27124 - in pypy/dist/pypy/translator/stackless: . test
mwh at codespeak.net
mwh at codespeak.net
Fri May 12 12:45:36 CEST 2006
Author: mwh
Date: Fri May 12 12:45:34 2006
New Revision: 27124
Modified:
pypy/dist/pypy/translator/stackless/test/test_transform.py
pypy/dist/pypy/translator/stackless/transform.py
Log:
reenable test_frame_types
Modified: pypy/dist/pypy/translator/stackless/test/test_transform.py
==============================================================================
--- pypy/dist/pypy/translator/stackless/test/test_transform.py (original)
+++ pypy/dist/pypy/translator/stackless/test/test_transform.py Fri May 12 12:45:34 2006
@@ -1,6 +1,6 @@
import py
import os
-from pypy.translator.stackless.transform import StacklessTransformer
+from pypy.translator.stackless.transform import StacklessTransformer, FrameTyper
from pypy.translator.c.genc import CStandaloneBuilder
from pypy.translator.c import gc
from pypy.rpython.memory.gctransform import varoftype
@@ -12,25 +12,27 @@
from pypy.annotation.listdef import ListDef
from pypy import conftest
-## def test_frame_types():
-## st = StacklessTransfomer(None)
+def test_frame_typer():
+ ft = FrameTyper()
+ ft4vars = lambda types:ft.frame_type_for_vars(types)[0]
+
+ signed = varoftype(lltype.Signed)
+ ptr = varoftype(lltype.Ptr(lltype.GcStruct("S")))
+ addr = varoftype(llmemory.Address)
+ float = varoftype(lltype.Float)
+ longlong = varoftype(lltype.SignedLongLong)
-## signed = varoftype(lltype.Signed)
-## ptr = varoftype(lltype.Ptr(lltype.GcStruct("S")))
-## addr = varoftype(llmemory.Address)
-## float = varoftype(lltype.Float)
-## longlong = varoftype(lltype.SignedLongLong)
-
-## ft4vars = st.frame_type_for_vars
-## s1 = ft4vars([signed])
-## assert 'header' in s1._flds
-## assert len(s1._flds) == 2
+ s1_1 = ft4vars([signed])
+ assert 'header' in s1_1._flds
+ assert len(s1_1._flds) == 2
+ s1_2 = ft4vars([signed])
+ assert s1_1 is s1_2
-## s2_1 = ft4vars([signed, ptr])
-## s2_2 = ft4vars([ptr, signed])
+ s2_1 = ft4vars([signed, ptr])
+ s2_2 = ft4vars([ptr, signed])
-## assert s2_1 is s2_2
+ assert s2_1 is s2_2
from pypy.translator.stackless import code
Modified: pypy/dist/pypy/translator/stackless/transform.py
==============================================================================
--- pypy/dist/pypy/translator/stackless/transform.py (original)
+++ pypy/dist/pypy/translator/stackless/transform.py Fri May 12 12:45:34 2006
@@ -79,6 +79,37 @@
self.frame_state_type = frame_state_type
self.fieldnames = fieldnames
+class FrameTyper:
+ # this class only exists independently to ease testing
+ def __init__(self):
+ self.frametypes = {}
+
+ def frame_type_for_vars(self, vars):
+ fieldnames = []
+ counts = {}
+ for v in vars:
+ t = storage_type(v.concretetype)
+ if t is lltype.Void:
+ fieldnames.append(None)
+ else:
+ n = counts.get(t, 0)
+ fieldnames.append('state_%s_%d' % (STORAGE_FIELDS[t], n))
+ counts[t] = n + 1
+ key = lltype.frozendict(counts)
+ if key in self.frametypes:
+ T = self.frametypes[key]
+ else:
+ fields = []
+ for t in STORAGE_TYPES:
+ for j in range(counts.get(t, 0)):
+ fields.append(('state_%s_%d' % (STORAGE_FIELDS[t], j), t))
+ T = lltype.GcStruct("FrameState",
+ ('header', STATE_HEADER),
+ *fields)
+ self.frametypes[key] = T
+ return T, fieldnames
+
+
class StacklessTransformer(object):
def __init__(self, translator, entrypoint):
self.translator = translator
@@ -89,9 +120,9 @@
self.unwind_exception_type = getinstancerepr(
self.translator.rtyper,
bk.getuniqueclassdef(code.UnwindException)).lowleveltype
- self.frametypes = {}
+ self.frametyper = FrameTyper()
self.curr_graph = None
-
+
mixlevelannotator = MixLevelHelperAnnotator(translator.rtyper)
l2a = annmodel.lltype_to_annotation
@@ -159,32 +190,6 @@
r_global_state.lowleveltype)
self.seen_blocks = set()
-
- def frame_type_for_vars(self, vars):
- fieldnames = []
- counts = {}
- for v in vars:
- t = storage_type(v.concretetype)
- if t is lltype.Void:
- fieldnames.append(None)
- else:
- n = counts.get(t, 0)
- fieldnames.append('state_%s_%d' % (STORAGE_FIELDS[t], n))
- counts[t] = n + 1
- key = lltype.frozendict(counts)
- if key in self.frametypes:
- T = self.frametypes[key]
- else:
- fields = []
- for t in STORAGE_TYPES:
- for j in range(counts.get(t, 0)):
- fields.append(('state_%s_%d' % (STORAGE_FIELDS[t], j), t))
- T = lltype.GcStruct("FrameState",
- ('header', STATE_HEADER),
- *fields)
- self.frametypes[key] = T
- return T, fieldnames
-
def transform_all(self):
for graph in self.translator.graphs:
self.transform_graph(graph)
@@ -430,7 +435,7 @@
var_unwind_exception = unsimplify.copyvar(
None, var_unwind_exception)
- frame_type, fieldnames = self.frame_type_for_vars(varstosave)
+ frame_type, fieldnames = self.frametyper.frame_type_for_vars(varstosave)
save_state_block = model.Block(inputargs + [var_unwind_exception])
saveops = save_state_block.operations
More information about the Pypy-commit
mailing list