]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-44964: Add a note explaining the new semantics of f_last_i in frame objects ...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 7 Sep 2021 11:36:43 +0000 (04:36 -0700)
committerGitHub <noreply@github.com>
Tue, 7 Sep 2021 11:36:43 +0000 (04:36 -0700)
(cherry picked from commit fa2c0b85a8d5c9486661083afdf38cbaadb3432a)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
Doc/reference/datamodel.rst
Doc/whatsnew/3.10.rst

index eefdc3d5100b56b4874948532e48985c965350cc..477daaed8d3b1f884d2330afa08b0d3d2a2d7fb6 100644 (file)
@@ -1034,8 +1034,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"``.
index 068eb7676324d5ff75c01935704d5ce60476f4f5..dbf89239d652efd7fcfb41aa8412202ce290af8b 100644 (file)
@@ -1944,6 +1944,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
 ========================