2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. _execmodel:
|
|
|
|
|
|
|
|
***************
|
|
|
|
Execution model
|
|
|
|
***************
|
|
|
|
|
|
|
|
.. index:: single: execution model
|
|
|
|
|
|
|
|
|
|
|
|
.. _naming:
|
|
|
|
|
|
|
|
Naming and binding
|
|
|
|
==================
|
|
|
|
|
|
|
|
.. index::
|
|
|
|
pair: code; block
|
|
|
|
single: namespace
|
|
|
|
single: scope
|
|
|
|
|
|
|
|
.. index::
|
|
|
|
single: name
|
|
|
|
pair: binding; name
|
|
|
|
|
|
|
|
:dfn:`Names` refer to objects. Names are introduced by name binding operations.
|
|
|
|
Each occurrence of a name in the program text refers to the :dfn:`binding` of
|
|
|
|
that name established in the innermost function block containing the use.
|
|
|
|
|
2007-09-07 11:15:41 -03:00
|
|
|
.. index:: block
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
A :dfn:`block` is a piece of Python program text that is executed as a unit.
|
|
|
|
The following are blocks: a module, a function body, and a class definition.
|
|
|
|
Each command typed interactively is a block. A script file (a file given as
|
|
|
|
standard input to the interpreter or specified on the interpreter command line
|
|
|
|
the first argument) is a code block. A script command (a command specified on
|
2007-09-07 11:15:41 -03:00
|
|
|
the interpreter command line with the '**-c**' option) is a code block. The
|
|
|
|
string argument passed to the built-in functions :func:`eval` and :func:`exec`
|
|
|
|
is a code block.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. index:: pair: execution; frame
|
|
|
|
|
|
|
|
A code block is executed in an :dfn:`execution frame`. A frame contains some
|
|
|
|
administrative information (used for debugging) and determines where and how
|
|
|
|
execution continues after the code block's execution has completed.
|
|
|
|
|
2007-09-07 11:15:41 -03:00
|
|
|
.. index:: scope
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
A :dfn:`scope` defines the visibility of a name within a block. If a local
|
|
|
|
variable is defined in a block, its scope includes that block. If the
|
|
|
|
definition occurs in a function block, the scope extends to any blocks contained
|
|
|
|
within the defining one, unless a contained block introduces a different binding
|
|
|
|
for the name. The scope of names defined in a class block is limited to the
|
2008-01-18 14:40:46 -04:00
|
|
|
class block; it does not extend to the code blocks of methods -- this includes
|
2009-01-30 23:57:19 -04:00
|
|
|
comprehensions and generator expressions since they are implemented using a
|
|
|
|
function scope. This means that the following will fail::
|
2008-01-18 14:40:46 -04:00
|
|
|
|
|
|
|
class A:
|
|
|
|
a = 42
|
|
|
|
b = list(a + i for i in range(10))
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. index:: single: environment
|
|
|
|
|
|
|
|
When a name is used in a code block, it is resolved using the nearest enclosing
|
|
|
|
scope. The set of all such scopes visible to a code block is called the block's
|
|
|
|
:dfn:`environment`.
|
|
|
|
|
|
|
|
.. index:: pair: free; variable
|
|
|
|
|
2007-09-07 11:15:41 -03:00
|
|
|
If a name is bound in a block, it is a local variable of that block, unless
|
|
|
|
declared as :keyword:`nonlocal`. If a name is bound at the module level, it is
|
|
|
|
a global variable. (The variables of the module code block are local and
|
|
|
|
global.) If a variable is used in a code block but not defined there, it is a
|
|
|
|
:dfn:`free variable`.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. index::
|
|
|
|
single: NameError (built-in exception)
|
|
|
|
single: UnboundLocalError
|
|
|
|
|
|
|
|
When a name is not found at all, a :exc:`NameError` exception is raised. If the
|
|
|
|
name refers to a local variable that has not been bound, a
|
|
|
|
:exc:`UnboundLocalError` exception is raised. :exc:`UnboundLocalError` is a
|
|
|
|
subclass of :exc:`NameError`.
|
|
|
|
|
|
|
|
.. index:: statement: from
|
|
|
|
|
|
|
|
The following constructs bind names: formal parameters to functions,
|
|
|
|
:keyword:`import` statements, class and function definitions (these bind the
|
|
|
|
class or function name in the defining block), and targets that are identifiers
|
2009-03-15 18:57:20 -03:00
|
|
|
if occurring in an assignment, :keyword:`for` loop header, or after
|
|
|
|
:keyword:`as` in a :keyword:`with` statement or :keyword.`except` clause.
|
|
|
|
The :keyword:`import` statement
|
|
|
|
of the form ``from ... import *`` binds all names defined in the imported
|
2007-08-15 11:28:22 -03:00
|
|
|
module, except those beginning with an underscore. This form may only be used
|
|
|
|
at the module level.
|
|
|
|
|
|
|
|
A target occurring in a :keyword:`del` statement is also considered bound for
|
|
|
|
this purpose (though the actual semantics are to unbind the name). It is
|
|
|
|
illegal to unbind a name that is referenced by an enclosing scope; the compiler
|
|
|
|
will report a :exc:`SyntaxError`.
|
|
|
|
|
|
|
|
Each assignment or import statement occurs within a block defined by a class or
|
|
|
|
function definition or at the module level (the top-level code block).
|
|
|
|
|
|
|
|
If a name binding operation occurs anywhere within a code block, all uses of the
|
|
|
|
name within the block are treated as references to the current block. This can
|
2007-09-07 11:15:41 -03:00
|
|
|
lead to errors when a name is used within a block before it is bound. This rule
|
2007-08-15 11:28:22 -03:00
|
|
|
is subtle. Python lacks declarations and allows name binding operations to
|
|
|
|
occur anywhere within a code block. The local variables of a code block can be
|
|
|
|
determined by scanning the entire text of the block for name binding operations.
|
|
|
|
|
2007-09-07 11:15:41 -03:00
|
|
|
If the :keyword:`global` statement occurs within a block, all uses of the name
|
|
|
|
specified in the statement refer to the binding of that name in the top-level
|
|
|
|
namespace. Names are resolved in the top-level namespace by searching the
|
|
|
|
global namespace, i.e. the namespace of the module containing the code block,
|
Merged revisions 73941-73943,74076,74094,74186,74211-74214,74247,74254,74262,74311,74334,74368 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k
................
r73941 | georg.brandl | 2009-07-11 12:39:00 +0200 (Sa, 11 Jul 2009) | 9 lines
Merged revisions 73940 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r73940 | georg.brandl | 2009-07-11 12:37:38 +0200 (Sa, 11 Jul 2009) | 1 line
#6430: add note about size of "u" type.
........
................
r73942 | georg.brandl | 2009-07-11 12:39:23 +0200 (Sa, 11 Jul 2009) | 1 line
#6430: remove mention of "w" array typecode.
................
r73943 | georg.brandl | 2009-07-11 12:43:08 +0200 (Sa, 11 Jul 2009) | 1 line
#6421: The self argument of module-level PyCFunctions is now a reference to the module object.
................
r74076 | georg.brandl | 2009-07-18 11:07:48 +0200 (Sa, 18 Jul 2009) | 1 line
#6502: add missing comma in docstring.
................
r74094 | georg.brandl | 2009-07-19 09:25:56 +0200 (So, 19 Jul 2009) | 10 lines
Recorded merge of revisions 74089 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74089 | senthil.kumaran | 2009-07-19 04:43:43 +0200 (So, 19 Jul 2009) | 3 lines
Fix for issue5102, timeout value propages between redirects, proxy, digest and
auth handlers. Fixed tests to reflect the same.
........
................
r74186 | georg.brandl | 2009-07-23 11:19:09 +0200 (Do, 23 Jul 2009) | 9 lines
Recorded merge of revisions 74185 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74185 | georg.brandl | 2009-07-23 11:17:09 +0200 (Do, 23 Jul 2009) | 1 line
Fix the "pylocals" gdb command.
........
................
r74211 | georg.brandl | 2009-07-26 16:48:09 +0200 (So, 26 Jul 2009) | 9 lines
Recorded merge of revisions 74210 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74210 | georg.brandl | 2009-07-26 16:44:23 +0200 (So, 26 Jul 2009) | 1 line
Move member descriptions inside the classes.
........
................
r74212 | georg.brandl | 2009-07-26 16:54:51 +0200 (So, 26 Jul 2009) | 9 lines
Merged revisions 74209 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74209 | georg.brandl | 2009-07-26 16:37:28 +0200 (So, 26 Jul 2009) | 1 line
builtin -> built-in.
........
................
r74213 | georg.brandl | 2009-07-26 17:02:41 +0200 (So, 26 Jul 2009) | 9 lines
Merged revisions 74207 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74207 | georg.brandl | 2009-07-26 16:19:57 +0200 (So, 26 Jul 2009) | 1 line
#6577: fix (hopefully) all links to builtin instead of module/class-specific objects.
........
................
r74214 | georg.brandl | 2009-07-26 17:03:49 +0200 (So, 26 Jul 2009) | 9 lines
Merged revisions 74205 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74205 | georg.brandl | 2009-07-26 15:36:39 +0200 (So, 26 Jul 2009) | 1 line
#6576: fix cross-refs in re docs.
........
................
r74247 | georg.brandl | 2009-07-29 09:27:08 +0200 (Mi, 29 Jul 2009) | 9 lines
Merged revisions 74239 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74239 | georg.brandl | 2009-07-28 18:55:32 +0000 (Di, 28 Jul 2009) | 1 line
Clarify quote_plus() usage.
........
................
r74254 | georg.brandl | 2009-07-29 18:14:16 +0200 (Mi, 29 Jul 2009) | 1 line
#6586: fix return/argument type doc for os.read() and os.write().
................
r74262 | alexandre.vassalotti | 2009-07-29 21:54:39 +0200 (Mi, 29 Jul 2009) | 57 lines
Merged revisions 74074,74077,74111,74188,74192-74193,74200,74252-74253,74258-74261 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74074 | georg.brandl | 2009-07-18 05:03:10 -0400 (Sat, 18 Jul 2009) | 1 line
#6513: fix example code: warning categories are classes, not instances.
........
r74077 | georg.brandl | 2009-07-18 05:43:40 -0400 (Sat, 18 Jul 2009) | 1 line
#6489: fix an ambiguity in getiterator() documentation.
........
r74111 | benjamin.peterson | 2009-07-20 09:30:10 -0400 (Mon, 20 Jul 2009) | 1 line
remove docs for deprecated -p option
........
r74188 | benjamin.peterson | 2009-07-23 10:25:31 -0400 (Thu, 23 Jul 2009) | 1 line
use bools
........
r74192 | georg.brandl | 2009-07-24 12:28:38 -0400 (Fri, 24 Jul 2009) | 1 line
Fix arg types of et#.
........
r74193 | georg.brandl | 2009-07-24 12:46:38 -0400 (Fri, 24 Jul 2009) | 1 line
Dont put "void" in signature for nullary functions.
........
r74200 | georg.brandl | 2009-07-25 09:02:15 -0400 (Sat, 25 Jul 2009) | 1 line
#6571: add index entries for more operators.
........
r74252 | georg.brandl | 2009-07-29 12:06:31 -0400 (Wed, 29 Jul 2009) | 1 line
#6593: fix link targets.
........
r74253 | georg.brandl | 2009-07-29 12:09:17 -0400 (Wed, 29 Jul 2009) | 1 line
#6591: add reference to ioctl in fcntl module for platforms other than Windows.
........
r74258 | georg.brandl | 2009-07-29 12:57:05 -0400 (Wed, 29 Jul 2009) | 1 line
Add a link to readline, and mention IPython and bpython.
........
r74259 | georg.brandl | 2009-07-29 13:07:21 -0400 (Wed, 29 Jul 2009) | 1 line
Fix some markup and small factual glitches found by M. Markert.
........
r74260 | georg.brandl | 2009-07-29 13:15:20 -0400 (Wed, 29 Jul 2009) | 1 line
Fix a few markup glitches.
........
r74261 | georg.brandl | 2009-07-29 13:50:25 -0400 (Wed, 29 Jul 2009) | 1 line
Rewrite the section about classes a bit; mostly tidbits, and a larger update to the section about "private" variables to reflect the Pythonic consensus better.
........
................
r74311 | georg.brandl | 2009-08-04 22:29:27 +0200 (Di, 04 Aug 2009) | 1 line
Slightly improve buffer-related error message.
................
r74334 | georg.brandl | 2009-08-06 19:51:03 +0200 (Do, 06 Aug 2009) | 1 line
#6648: mention surrogateescape handler where all standard handlers are listed.
................
r74368 | georg.brandl | 2009-08-13 09:56:35 +0200 (Do, 13 Aug 2009) | 21 lines
Merged revisions 74328,74332-74333,74365 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74328 | georg.brandl | 2009-08-06 17:06:25 +0200 (Do, 06 Aug 2009) | 1 line
Fix base keyword arg name for int() and long().
........
r74332 | georg.brandl | 2009-08-06 19:23:21 +0200 (Do, 06 Aug 2009) | 1 line
Fix punctuation and one copy-paste error.
........
r74333 | georg.brandl | 2009-08-06 19:43:55 +0200 (Do, 06 Aug 2009) | 1 line
#6658: fix two typos.
........
r74365 | georg.brandl | 2009-08-13 09:48:05 +0200 (Do, 13 Aug 2009) | 1 line
#6679: Remove mention that sub supports no flags.
........
................
2009-08-13 05:26:44 -03:00
|
|
|
and the builtins namespace, the namespace of the module :mod:`builtins`. The
|
|
|
|
global namespace is searched first. If the name is not found there, the builtins
|
2007-09-07 11:15:41 -03:00
|
|
|
namespace is searched. The global statement must precede all uses of the name.
|
|
|
|
|
|
|
|
.. XXX document "nonlocal" semantics here
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. index:: pair: restricted; execution
|
|
|
|
|
|
|
|
The built-in namespace associated with the execution of a code block is actually
|
|
|
|
found by looking up the name ``__builtins__`` in its global namespace; this
|
|
|
|
should be a dictionary or a module (in the latter case the module's dictionary
|
|
|
|
is used). By default, when in the :mod:`__main__` module, ``__builtins__`` is
|
2007-12-02 05:40:06 -04:00
|
|
|
the built-in module :mod:`builtins`; when in any other module,
|
|
|
|
``__builtins__`` is an alias for the dictionary of the :mod:`builtins` module
|
2007-08-15 11:28:22 -03:00
|
|
|
itself. ``__builtins__`` can be set to a user-created dictionary to create a
|
|
|
|
weak form of restricted execution.
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
Users should not touch ``__builtins__``; it is strictly an implementation
|
|
|
|
detail. Users wanting to override values in the built-in namespace should
|
2007-12-02 05:40:06 -04:00
|
|
|
:keyword:`import` the :mod:`builtins` module and modify its
|
2007-08-15 11:28:22 -03:00
|
|
|
attributes appropriately.
|
|
|
|
|
|
|
|
.. index:: module: __main__
|
|
|
|
|
|
|
|
The namespace for a module is automatically created the first time a module is
|
|
|
|
imported. The main module for a script is always called :mod:`__main__`.
|
|
|
|
|
|
|
|
The global statement has the same scope as a name binding operation in the same
|
|
|
|
block. If the nearest enclosing scope for a free variable contains a global
|
|
|
|
statement, the free variable is treated as a global.
|
|
|
|
|
|
|
|
A class definition is an executable statement that may use and define names.
|
2007-09-07 11:15:41 -03:00
|
|
|
These references follow the normal rules for name resolution. The namespace of
|
2007-08-15 11:28:22 -03:00
|
|
|
the class definition becomes the attribute dictionary of the class. Names
|
|
|
|
defined at the class scope are not visible in methods.
|
|
|
|
|
|
|
|
|
|
|
|
.. _dynamic-features:
|
|
|
|
|
|
|
|
Interaction with dynamic features
|
|
|
|
---------------------------------
|
|
|
|
|
|
|
|
There are several cases where Python statements are illegal when used in
|
|
|
|
conjunction with nested scopes that contain free variables.
|
|
|
|
|
|
|
|
If a variable is referenced in an enclosing scope, it is illegal to delete the
|
|
|
|
name. An error will be reported at compile time.
|
|
|
|
|
|
|
|
If the wild card form of import --- ``import *`` --- is used in a function and
|
|
|
|
the function contains or is a nested block with free variables, the compiler
|
|
|
|
will raise a :exc:`SyntaxError`.
|
|
|
|
|
2007-09-07 11:15:41 -03:00
|
|
|
.. XXX from * also invalid with relative imports (at least currently)
|
|
|
|
|
|
|
|
The :func:`eval` and :func:`exec` functions do not have access to the full
|
|
|
|
environment for resolving names. Names may be resolved in the local and global
|
|
|
|
namespaces of the caller. Free variables are not resolved in the nearest
|
|
|
|
enclosing namespace, but in the global namespace. [#]_ The :func:`exec` and
|
|
|
|
:func:`eval` functions have optional arguments to override the global and local
|
|
|
|
namespace. If only one namespace is specified, it is used for both.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
|
|
|
|
.. _exceptions:
|
|
|
|
|
|
|
|
Exceptions
|
|
|
|
==========
|
|
|
|
|
|
|
|
.. index:: single: exception
|
|
|
|
|
|
|
|
.. index::
|
|
|
|
single: raise an exception
|
|
|
|
single: handle an exception
|
|
|
|
single: exception handler
|
|
|
|
single: errors
|
|
|
|
single: error handling
|
|
|
|
|
|
|
|
Exceptions are a means of breaking out of the normal flow of control of a code
|
|
|
|
block in order to handle errors or other exceptional conditions. An exception
|
|
|
|
is *raised* at the point where the error is detected; it may be *handled* by the
|
|
|
|
surrounding code block or by any code block that directly or indirectly invoked
|
|
|
|
the code block where the error occurred.
|
|
|
|
|
|
|
|
The Python interpreter raises an exception when it detects a run-time error
|
|
|
|
(such as division by zero). A Python program can also explicitly raise an
|
|
|
|
exception with the :keyword:`raise` statement. Exception handlers are specified
|
Merged revisions 63119-63128,63130-63131,63133,63135-63144,63146-63148,63151-63152,63155-63165,63167-63176,63181-63186,63188-63189 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r63119 | benjamin.peterson | 2008-05-11 20:41:23 -0400 (Sun, 11 May 2008) | 2 lines
#2196 hasattr now allows SystemExit and KeyboardInterrupt to propagate
........
r63122 | benjamin.peterson | 2008-05-11 20:46:49 -0400 (Sun, 11 May 2008) | 2 lines
make message slightly more informative, so there's no chance of misunderstanding it
........
r63158 | ronald.oussoren | 2008-05-12 07:24:33 -0400 (Mon, 12 May 2008) | 5 lines
Remove references to platform 'mac'
The 'mac' platform (that is, os.name == 'mac') was used for the MacOS 9 port,
which is no longer supported (as of Python 2.4 IIRC).
........
r63159 | ronald.oussoren | 2008-05-12 07:31:05 -0400 (Mon, 12 May 2008) | 8 lines
MacOSX: remove dependency on Carbon package for urllib
This patch removes the dependency on the Carbon package from urllib.
The mac-specific code for getting proxy configuration is now writting in
Python using ctypes and uses the SystemConfiguration framework instead of
InternetConfig. Also provides a mac-specific implementation of proxy_bypass.
........
r63162 | eric.smith | 2008-05-12 10:00:01 -0400 (Mon, 12 May 2008) | 1 line
Added 'n' presentation type for integers.
........
r63164 | georg.brandl | 2008-05-12 12:26:52 -0400 (Mon, 12 May 2008) | 2 lines
#1713041: fix pprint's handling of maximum depth.
........
r63170 | georg.brandl | 2008-05-12 12:53:42 -0400 (Mon, 12 May 2008) | 2 lines
Fix parameter name for enumerate().
........
r63173 | georg.brandl | 2008-05-12 13:01:58 -0400 (Mon, 12 May 2008) | 2 lines
#2766: remove code without effect.
........
r63174 | georg.brandl | 2008-05-12 13:04:10 -0400 (Mon, 12 May 2008) | 3 lines
#2767: don't clear globs in run() call, since they could be needed in tearDown,
which clears them at the end.
........
r63175 | georg.brandl | 2008-05-12 13:14:51 -0400 (Mon, 12 May 2008) | 2 lines
#1760: try-except-finally is one statement since PEP 341.
........
r63186 | amaury.forgeotdarc | 2008-05-12 17:30:24 -0400 (Mon, 12 May 2008) | 2 lines
Sync code with documentation, and remove Win95 support in winsound module.
........
r63189 | amaury.forgeotdarc | 2008-05-12 18:21:39 -0400 (Mon, 12 May 2008) | 3 lines
Adapt test_pyclbr to the new version of urllib.py:
The new mac-specific functions must be ignored.
........
2008-05-15 23:54:33 -03:00
|
|
|
with the :keyword:`try` ... :keyword:`except` statement. The :keyword:`finally`
|
|
|
|
clause of such a statement can be used to specify cleanup code which does not
|
|
|
|
handle the exception, but is executed whether an exception occurred or not in
|
|
|
|
the preceding code.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
.. index:: single: termination model
|
|
|
|
|
|
|
|
Python uses the "termination" model of error handling: an exception handler can
|
|
|
|
find out what happened and continue execution at an outer level, but it cannot
|
|
|
|
repair the cause of the error and retry the failing operation (except by
|
|
|
|
re-entering the offending piece of code from the top).
|
|
|
|
|
|
|
|
.. index:: single: SystemExit (built-in exception)
|
|
|
|
|
|
|
|
When an exception is not handled at all, the interpreter terminates execution of
|
|
|
|
the program, or returns to its interactive main loop. In either case, it prints
|
2007-09-07 11:15:41 -03:00
|
|
|
a stack backtrace, except when the exception is :exc:`SystemExit`.
|
2007-08-15 11:28:22 -03:00
|
|
|
|
|
|
|
Exceptions are identified by class instances. The :keyword:`except` clause is
|
|
|
|
selected depending on the class of the instance: it must reference the class of
|
|
|
|
the instance or a base class thereof. The instance can be received by the
|
|
|
|
handler and can carry additional information about the exceptional condition.
|
|
|
|
|
2009-04-27 13:20:50 -03:00
|
|
|
.. note::
|
2007-08-15 11:28:22 -03:00
|
|
|
|
2007-09-07 11:15:41 -03:00
|
|
|
Exception messages are not part of the Python API. Their contents may change
|
|
|
|
from one version of Python to the next without warning and should not be
|
2007-08-15 11:28:22 -03:00
|
|
|
relied on by code which will run under multiple versions of the interpreter.
|
|
|
|
|
|
|
|
See also the description of the :keyword:`try` statement in section :ref:`try`
|
|
|
|
and :keyword:`raise` statement in section :ref:`raise`.
|
|
|
|
|
2008-07-19 12:51:07 -03:00
|
|
|
|
2007-08-15 11:28:22 -03:00
|
|
|
.. rubric:: Footnotes
|
|
|
|
|
2007-09-07 11:15:41 -03:00
|
|
|
.. [#] This limitation occurs because the code that is executed by these operations
|
|
|
|
is not available at the time the module is compiled.
|
2007-08-15 11:28:22 -03:00
|
|
|
|