Merged revisions 62004 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62004 | georg.brandl | 2008-03-28 13:11:56 +0100 (Fr, 28 Mär 2008) | 4 lines
Patch #1810 by Thomas Lee, reviewed by myself:
allow compiling Python AST objects into code objects
in compile().
........
diff --git a/Doc/library/_ast.rst b/Doc/library/_ast.rst
index 9f56156..518798e 100644
--- a/Doc/library/_ast.rst
+++ b/Doc/library/_ast.rst
@@ -10,16 +10,16 @@
The ``_ast`` module helps Python applications to process trees of the Python
-abstract syntax grammar. The Python compiler currently provides read-only access
-to such trees, meaning that applications can only create a tree for a given
-piece of Python source code; generating :term:`bytecode` from a (potentially modified)
-tree is not supported. The abstract syntax itself might change with each Python
-release; this module helps to find out programmatically what the current grammar
-looks like.
+abstract syntax grammar. The abstract syntax itself might change with each
+Python release; this module helps to find out programmatically what the current
+grammar looks like.
-An abstract syntax tree can be generated by passing ``_ast.PyCF_ONLY_AST`` as a
-flag to the :func:`compile` builtin function. The result will be a tree of
-objects whose classes all inherit from ``_ast.AST``.
+An abstract syntax tree can be generated by passing :data:`_ast.PyCF_ONLY_AST`
+as a flag to the :func:`compile` builtin function. The result will be a tree of
+objects whose classes all inherit from :class:`_ast.AST`.
+
+A modified abstract syntax tree can be compiled into a Python code object using
+the built-in :func:`compile` function.
The actual classes are derived from the ``Parser/Python.asdl`` file, which is
reproduced below. There is one class defined for each left-hand side symbol in
@@ -39,12 +39,15 @@
``_ast.stmt`` subclasses also have lineno and col_offset attributes. The lineno
is the line number of source text (1 indexed so the first line is line 1) and
the col_offset is the utf8 byte offset of the first token that generated the
-node. The utf8 offset is recorded because the parser uses utf8 internally.
+node. The utf8 offset is recorded because the parser uses utf8 internally.
If these attributes are marked as optional in the grammar (using a question
mark), the value might be ``None``. If the attributes can have zero-or-more
values (marked with an asterisk), the values are represented as Python lists.
+The constructors of all ``_ast`` classes don't take arguments; instead, if you
+create instances, you must assign the required attributes separately.
+
Abstract Grammar
----------------
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index 7c97edb..d1e979c 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -193,21 +193,21 @@
.. function:: compile(source, filename, mode[, flags[, dont_inherit]])
- Compile the *source* into a code object. Code objects can be executed by a call
- to :func:`exec` or evaluated by a call to :func:`eval`. The *filename* argument
- should give the file from which the code was read; pass some recognizable value
- if it wasn't read from a file (``'<string>'`` is commonly used). The *mode*
- argument specifies what kind of code must be compiled; it can be ``'exec'`` if
- *source* consists of a sequence of statements, ``'eval'`` if it consists of a
- single expression, or ``'single'`` if it consists of a single interactive
- statement (in the latter case, expression statements that evaluate to something
- else than ``None`` will be printed).
+ Compile the *source* into a code object. Code objects can be
+ executed by a call to :func:`exec` or evaluated by a call to
+ :func:`eval`. *source* can either be a string or an AST object.
+ Refer to the :mod:`_ast` module documentation for information on
+ how to compile into and from AST objects.
- When compiling multi-line statements, two caveats apply: line endings must be
- represented by a single newline character (``'\n'``), and the input must be
- terminated by at least one newline character. If line endings are represented
- by ``'\r\n'``, use the string :meth:`replace` method to change them into
- ``'\n'``.
+ The *filename* argument should give the file from
+ which the code was read; pass some recognizable value if it wasn't
+ read from a file (``'<string>'`` is commonly used). The *mode*
+ argument specifies what kind of code must be compiled; it can be
+ ``'exec'`` if *source* consists of a sequence of statements,
+ ``'eval'`` if it consists of a single expression, or ``'single'``
+ if it consists of a single interactive statement (in the latter
+ case, expression statements that evaluate to something else than
+ ``None`` will be printed).
The optional arguments *flags* and *dont_inherit* (which are new in Python 2.2)
control which future statements (see :pep:`236`) affect the compilation of
@@ -227,6 +227,9 @@
This function raises :exc:`SyntaxError` if the compiled source is invalid,
and :exc:`TypeError` if the source contains null bytes.
+ .. versionadded:: 2.6
+ Support for compiling AST objects.
+
.. function:: complex([real[, imag]])