[pypy-svn] r73789 - in pypy/trunk/pypy/jit/tl: . test

fijal at codespeak.net fijal at codespeak.net
Thu Apr 15 21:51:27 CEST 2010


Author: fijal
Date: Thu Apr 15 21:51:25 2010
New Revision: 73789

Modified:
   pypy/trunk/pypy/jit/tl/test/test_tinyframe.py
   pypy/trunk/pypy/jit/tl/tinyframe.py
Log:
Function combination


Modified: pypy/trunk/pypy/jit/tl/test/test_tinyframe.py
==============================================================================
--- pypy/trunk/pypy/jit/tl/test/test_tinyframe.py	(original)
+++ pypy/trunk/pypy/jit/tl/test/test_tinyframe.py	Thu Apr 15 21:51:25 2010
@@ -57,3 +57,24 @@
         ''')
         ret = interpret(code)
         assert ret.val == 1 + 1
+
+    def test_function_combination(self):
+        code = compile('''
+        inner:
+        LOAD 2 => r1
+        ADD r1 r0 => r0
+        RETURN r0
+        outer:
+        LOAD 1 => r1
+        ADD r1 r0 => r2
+        RETURN r2
+        main:
+        LOAD_FUNCTION inner => r0
+        LOAD_FUNCTION outer => r1
+        ADD r1 r0 => r2
+        LOAD 1 => r3
+        CALL r2 r3 => r4
+        RETURN r4
+        ''')
+        ret = interpret(code)
+        assert ret.val == 1 + 1 + 2

Modified: pypy/trunk/pypy/jit/tl/tinyframe.py
==============================================================================
--- pypy/trunk/pypy/jit/tl/tinyframe.py	(original)
+++ pypy/trunk/pypy/jit/tl/tinyframe.py	Thu Apr 15 21:51:25 2010
@@ -156,6 +156,17 @@
         f.registers[0] = arg
         return f.interpret()
 
+    def add(self, other):
+        return CombinedFunc(self, other)
+
+class CombinedFunc(Func):
+    def __init__(self, outer, inner):
+        self.outer = outer
+        self.inner = inner
+
+    def call(self, arg):
+        return self.outer.call(self.inner.call(arg))
+
 class Frame(object):
     def __init__(self, code):
         self.code = code



More information about the Pypy-commit mailing list