PEP 657: use 0-indexed offsets (GH-2022)
This commit is contained in:
parent
3b34e282fd
commit
5fc4119624
20
pep-0657.rst
20
pep-0657.rst
|
@ -210,14 +210,18 @@ Offset semantics
|
|||
^^^^^^^^^^^^^^^^
|
||||
|
||||
These offsets are propagated by the compiler from the ones stored currently in
|
||||
all AST nodes. They are 1-indexed and a value of 0 will mean that the
|
||||
information is not available. Although the AST nodes use ``int`` types to store
|
||||
these values, ``uint8_t`` types will be used for storage in the new map to
|
||||
minimize storage impact. This decision allows offsets to go from 0 to 255,
|
||||
while offsets bigger than these values will be treated as missing (value of 0).
|
||||
We believe this is an acceptable compromise as line lengths in Python tend to
|
||||
be much lower than this limit (a query of the top 100 packages in PyPI shows
|
||||
that less than 0.01% of lines were longer than 255 characters).
|
||||
all AST nodes. The output of the public APIs (``co_positions`` and ``PyCode_Addr2Location``)
|
||||
that deal with these attributes use 0-indexed offsets (just like the AST nodes), but the underlying
|
||||
implementation is free to represent the actual data in whatever form they choose to be most efficient.
|
||||
The error code regarding information not available is ``None`` for the ``co_positions()`` API,
|
||||
and ``-1`` for the ``PyCode_Addr2Location`` API. The availability of the information highly depends
|
||||
on whether the offsets fall under the range, as well as the runtime flags for the interpreter
|
||||
configuration.
|
||||
|
||||
The AST nodes use ``int`` types to store these values. The current implementation, however,
|
||||
utilizes ``uint8_t`` types as an implementation detail to minimize storage impact. This decision
|
||||
allows offsets to go from 0 to 255, while offsets bigger than these values will be treated as
|
||||
missing (returning ``-1`` on the ``PyCode_Addr2Location`` and ``None`` API in the ``co_positions()`` API).
|
||||
|
||||
As specified previously, the underlying storage of the offsets should be
|
||||
considered an implementation detail, as the public APIs to obtain this values
|
||||
|
|
Loading…
Reference in New Issue