[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