[pypy-svn] r31944 - in pypy/dist/pypy/translator/transformer: . test
fijal at codespeak.net
fijal at codespeak.net
Sat Sep 2 13:42:36 CEST 2006
Author: fijal
Date: Sat Sep 2 13:42:32 2006
New Revision: 31944
Modified:
pypy/dist/pypy/translator/transformer/ (props changed)
pypy/dist/pypy/translator/transformer/basictransform.py
pypy/dist/pypy/translator/transformer/test/ (props changed)
pypy/dist/pypy/translator/transformer/test/test_basictransform.py
Log:
Added additional test and helpers.
Modified: pypy/dist/pypy/translator/transformer/basictransform.py
==============================================================================
--- pypy/dist/pypy/translator/transformer/basictransform.py (original)
+++ pypy/dist/pypy/translator/transformer/basictransform.py Sat Sep 2 13:42:32 2006
@@ -2,9 +2,6 @@
""" basic transform - some play around graph transformations
"""
-# this is RPython code which handles proper base elements for
-# stack tracing
-
from pypy.translator import unsimplify, simplify
from pypy.translator.unsimplify import varoftype
from pypy.annotation import model as annmodel
@@ -66,80 +63,6 @@
self.transform_graph(graph)
self.translator.annotator.complete()
-##class Transformer(object):
-## def __init__(self, translator):
-## self.translator = translator
-## self.register_helpers()
-##
-## def register_helpers(self):
-## """ Flow necessary additional functions
-## """
-## ann = self.translator.annotator
-## bk = ann.bookkeeper
-##
-## for func_name, func_args in [("enter", [3]), ("leave", []),
-## ("traceback", [])]:
-## self.flow_exc_handler_method(func_name, func_args)
-## self.excdef = bk.getuniqueclassdef(ExceptionHelper)
-##
-## def flow_exc_handler_method(self, func_name, args):
-## ann = self.translator.annotator
-## example_ann = ann.bookkeeper.annotation_from_example
-## s_args = [example_ann(arg) for arg in args]
-## graph = ann.annotate_helper_method(ExceptionHelper, func_name, s_args)
-## graph.exception_handler_explicit = True
-##
-## def transform_graph(self, graph):
-## # XXX: we do not want to flow low level helpers as well
-## # but for now I do not see how to see them
-## ann = self.translator.annotator
-## if graph.name.startswith("ll_"):
-## return
-## if getattr(graph, 'exception_handler_explicit', False):
-## return
-## # for each graph block enter operation which calls apropriate functions
-## old_start_block = graph.startblock
-## new_start_block = model.Block(old_start_block.inputargs[:])
-## newoutputargs = [unsimplify.copyvar(ann, v)
-## for v in old_start_block.inputargs]
-##
-## mapping = {}
-## for old, new in zip(old_start_block.inputargs, newoutputargs):
-## mapping[old] = new
-## old_start_block.renamevariables(mapping)
-## new_start_block.closeblock(model.Link( \
-## new_start_block.inputargs, old_start_block))
-##
-## old_start_block.isstartblock = False
-## new_start_block.isstartblock = True
-##
-## self.add_start_operations(graph, new_start_block)
-##
-## args_s = [ann.bindings[v] for v in new_start_block.inputargs]
-## ann.addpendingblock(graph, new_start_block, args_s)
-## graph.startblock = new_start_block
-##
-## #simplify.simplify_graph(graph, [simplify.eliminate_empty_blocks,
-## # simplify.join_blocks,
-## # simplify.transform_dead_op_vars])
-##
-## #def add_same_as_operations(self, new_block, old_block, old_args, new_args):
-## # mapping = {}
-## # for old, new in zip(old_args, new_args):
-## # new_block.operations.append(model.SpaceOperation("same_as", [old], new))
-## # mapping[old] = new
-## # old_block.renamevariables(mapping)
-##
-## def add_start_operations(self, graph, block):
-## assert len(block.operations) == 0
-## retval = model.Variable()
-## bk = self.translator.annotator.bookkeeper
-## arg = model.Constant(bk.immutablevalue("enter"))
-## block.operations.append(model.SpaceOperation("getattr", [self.main_instance, arg], retval))
-##
-## def transform_all(self):
-## bk = self.translator.annotator.bookkeeper
-## self.main_instance = model.Constant(bk.immutablevalue(main_exception_helper))
-## for graph in self.translator.graphs:
-## self.transform_graph(graph)
-## self.translator.annotator.complete()
+ def get_const(self, arg):
+ bk = self.bookkeeper
+ return model.Constant(arg, bk.immutablevalue(arg))
Modified: pypy/dist/pypy/translator/transformer/test/test_basictransform.py
==============================================================================
--- pypy/dist/pypy/translator/transformer/test/test_basictransform.py (original)
+++ pypy/dist/pypy/translator/transformer/test/test_basictransform.py Sat Sep 2 13:42:32 2006
@@ -75,6 +75,45 @@
res = interp_fun(t, some_fun, [1])
assert res == 2
+class ClassHelper(object):
+ def __init__(self):
+ self.i = 0
+
+ def method(self):
+ self.i = 8
+
+helper_instance = ClassHelper()
+
+class HelperTransformer(BasicTransformer):
+ def __init__(self, translator):
+ BasicTransformer.__init__(self, translator)
+ self.flow_method(ClassHelper, 'method', [])
+ bk = self.bookkeeper
+ self.instance_const = model.Constant(helper_instance, \
+ concretetype=bk.immutablevalue(helper_instance))
+
+ def transform_graph(self, graph):
+ if graph.name != 'helper_call_fun':
+ return
+ block = graph.startblock
+ c = self.get_const("method")
+ op, v = self.genop("getattr", [self.instance_const, c])
+ block.operations.insert(0, op)
+ op, v2 = self.genop("simple_call", [v])
+ block.operations.insert(1, op)
+
+ self.add_block(graph, block)
+
+def test_method_helper():
+ # XXX: retval of method is still wrong
+ def helper_call_fun():
+ return helper_instance.i
+
+ t = transform_function(HelperTransformer, helper_call_fun)
+ res = interp_fun(t, helper_call_fun)
+ assert res == 8
+
+
##def test_transform():
## def fun(i):
## a = 3 + i
More information about the Pypy-commit
mailing list