[Python-checkins] bpo-44964: Add a note explaining the new semantics of f_last_i in frame objects (GH-28200)
pablogsal
webhook-mailer at python.org
Tue Sep 7 07:18:59 EDT 2021
https://github.com/python/cpython/commit/fa2c0b85a8d5c9486661083afdf38cbaadb3432a
commit: fa2c0b85a8d5c9486661083afdf38cbaadb3432a
branch: main
author: Pablo Galindo Salgado <Pablogsal at gmail.com>
committer: pablogsal <Pablogsal at gmail.com>
date: 2021-09-07T12:18:54+01:00
summary:
bpo-44964: Add a note explaining the new semantics of f_last_i in frame objects (GH-28200)
files:
M Doc/reference/datamodel.rst
M Doc/whatsnew/3.10.rst
diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst
index 2c76e5656b0e63..46d9c3a95473cf 100644
--- a/Doc/reference/datamodel.rst
+++ b/Doc/reference/datamodel.rst
@@ -1069,8 +1069,9 @@ Internal types
:attr:`f_code` is the code object being executed in this frame; :attr:`f_locals`
is the dictionary used to look up local variables; :attr:`f_globals` is used for
global variables; :attr:`f_builtins` is used for built-in (intrinsic) names;
- :attr:`f_lasti` gives the precise instruction (this is an index into the
- bytecode string of the code object).
+ :attr:`f_lasti` gives the precise instruction (it represents a wordcode index, which
+ means that to get an index into the bytecode string of the code object it needs to be
+ multiplied by 2).
Accessing ``f_code`` raises an :ref:`auditing event <auditing>`
``object.__getattr__`` with arguments ``obj`` and ``"f_code"``.
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index 19ef629b45f486..8b0d38b598706d 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -1948,6 +1948,12 @@ Changes in the C API
source_buf = PyBytes_AsString(source_bytes_object);
code = Py_CompileString(source_buf, filename, Py_file_input);
+ * For ``FrameObject`` objects, the ``f_lasti`` member now represents a wordcode
+ offset instead of a simple offset into the bytecode string. This means that this
+ number needs to be multiplied by 2 to be used with APIs that expect a byte offset
+ instead (like :c:func:`PyCode_Addr2Line` for example). Notice as well that the
+ ``f_lasti`` member of ``FrameObject`` objects is not considered stable.
+
CPython bytecode changes
========================
More information about the Python-checkins
mailing list