[pypy-svn] r17876 - pypy/dist/pypy/doc

pedronis at codespeak.net pedronis at codespeak.net
Mon Sep 26 15:12:44 CEST 2005


Author: pedronis
Date: Mon Sep 26 15:12:42 2005
New Revision: 17876

Modified:
   pypy/dist/pypy/doc/draft-dynamic-language-translation.txt
Log:
start of a description of how branching flow paths are captured



Modified: pypy/dist/pypy/doc/draft-dynamic-language-translation.txt
==============================================================================
--- pypy/dist/pypy/doc/draft-dynamic-language-translation.txt	(original)
+++ pypy/dist/pypy/doc/draft-dynamic-language-translation.txt	Mon Sep 26 15:12:42 2005
@@ -277,9 +277,47 @@
 one, the corresponding block will be reused and reset. Otherwise a new
 block is used.
 
-XXX non mergeable data, details
+
+Branching on conditions by the engine usually involves querying the
+truth value of a object through the is_true space operation. This
+needs special treatment to be able to capture all possible flow paths.
+
+Multiple pending blocks can scheduled for abstract interpretation by
+the flow space, which proceeds picking one and reconstructing the
+abstract execution frame from the frame state associated with the
+block. The frame is what will be operated on, its setup is delegated
+to the block and based on the state, the frame setup by the block also
+returns a so called recorder through which, and not directly the
+block, appending of new space operations to the block will be
+delegated. What to do when an is_true operation is about to be
+executed is also responsability to the recorder.
+
+The normal recorder when an is_true operation is encountered will
+create and schedule special blocks which don't have an associated
+frame state, but the previous block ending in the is_true operation
+and an outcome, either True or False.
+
+The special branching blocks when about to be executed, will use the
+chain of previous blocks, and consider all of them up to the first
+non-special branching block included, the state of this one block will
+be used to setup the frame for execution and a chain of so called
+replaying recorders setup except for the scheduled branching block
+which gets a normal recorder. The outcome registered in each special
+block in the chain will be associated with the replayer for the
+previous block.
+
+The replaying recorders will sanity check that the same operations are
+appended by comparing the previous contents of the blocks
+re-encountered by execution and on is_true operation will deliver the
+outcome associated with them on construction.
+
+All this mechanism ensures that all flow paths are considered.
+
+
+
 XXX conditionals, multiple pending blocks
 
+XXX non mergeable data, details
 XXX termination for "reasonable" terminating programs
 
 Geninterp



More information about the Pypy-commit mailing list