[pypy-svn] rev 1428 - pypy/trunk/doc/translation
arigo at codespeak.net
arigo at codespeak.net
Mon Sep 29 12:46:26 CEST 2003
Author: arigo
Date: Mon Sep 29 12:46:26 2003
New Revision: 1428
Added:
pypy/trunk/doc/translation/
pypy/trunk/doc/translation/controlflow.txt
Log:
Text we discussed about control flow
Added: pypy/trunk/doc/translation/controlflow.txt
==============================================================================
--- (empty file)
+++ pypy/trunk/doc/translation/controlflow.txt Mon Sep 29 12:46:26 2003
@@ -0,0 +1,105 @@
+Hello again
+
+ def f(i):
+ return g(i)+2
+ def g(i):
+ return i+1
+
+f(3)
+tspace:
+pyxcode.putln('def f(%s):' % sig)
+res = frame.eval(executioncontext)
+pyxcode.putln('return %s' % res)
+
+
+Pyrex: def f(v1):
+dis.dis(f) -->
+ 2 0 LOAD_GLOBAL 0 (g)
+ w_result = space.getitem(f.w_globals, w_varname)
+
+ 3 LOAD_FAST 0 (i)
+ 6 CALL_FUNCTION 1
+space.call(w_function, w_arguments, w_kwds)
+space.call(w_g, ("v1",), {})
+Pyrex: v2 = g(v1)
+ 9 LOAD_CONST 1 (2)
+space.wrap(2)
+ 12 BINARY_ADD
+space.add("v2", "constant 2")
+Pyrex: v3 = v2 + 2
+ 13 RETURN_VALUE
+ 14 LOAD_CONST 0 (None)
+ 17 RETURN_VALUE
+Pyrex: return v3
+
+
+Result:
+def f(v1):
+ v2 = g(v1)
+ v3 = v2 + 2
+ return v3
+
+
+def h(i, j):
+ if i < 0:
+ i = j
+ return i+1
+
+Pyrex: def h(v1, v2):
+--> interpreter
+ 3 0 LOAD_FAST 0 (i)
+ 3 LOAD_CONST 1 (0)
+ 6 COMPARE_OP 0 (<)
+"v3" = space.lt("v1", "constant 0")
+Pyrex: v3 = v1 < 0
+ 9 JUMP_IF_FALSE 10 (to 22)
+space.is_true("v3")
+Pyrex: if v3: cinline "goto Label1;"
+ 12 POP_TOP
+
+ 4 13 LOAD_FAST 1 (j)
+ 16 STORE_FAST 0 (i)
+ 19 JUMP_FORWARD 1 (to 23)
+ >> 22 POP_TOP
+
+Pyrex: cinline "LabelBytecode23:" # just in case for later
+ 5 >> 23 LOAD_FAST 0 (i)
+ 26 LOAD_CONST 2 (1)
+ 29 BINARY_ADD
+space.add("v1", "constant 2")
+Pyrex: v4 = v1 + 2
+ 30 RETURN_VALUE
+ 31 LOAD_CONST 0 (None)
+ 34 RETURN_VALUE
+Pyrex: return v4
+
+pyrex: cinline "Label1:"
+ 12 POP_TOP
+
+ 4 13 LOAD_FAST 1 (j)
+ 16 STORE_FAST 0 (i)
+(in the interpreter fastlocals now: i="v2" j="v2")
+ 19 JUMP_FORWARD 1 (to 23)
+ >> 22 POP_TOP
+
+(bytecode 23 already seen!)
+Pyrex: v1 = v2
+Pyrex: cinline "goto LabelBytecode23;"
+ 5 >> 23 LOAD_FAST 0 (i)
+
+def h(i, j):
+ if i < 0:
+ i = j
+ return i+1
+
+def h(v1, v2):
+ v3 = v1 < 0
+ if v3: cinline "goto label1;"
+
+ cinline "labelBytecode23:"
+ v4=v1+1
+ return v4
+ cinline "label1:"
+ v1=v2
+ cinline "goto labelBytecode23;"
+
More information about the Pypy-commit
mailing list