For versions up to 3.10 see ./lnotab_notes.txt
In version 3.11 the co_linetable bytes object of code objects contains a compact representation of the positions returned by the co_positions() iterator.
The co_linetable consists of a sequence of location entries. Each entry starts with a byte with the most significant bit set, followed by zero or more bytes with most significant bit unset.
Each entry contains the following information:
The first byte has the following format:
| Bit 7 | Bits 3-6 | Bits 0-2 | 
|---|---|---|
| 1 | Code | Length (in code units) - 1 | 
The codes are enumerated in the _PyCodeLocationInfoKind enum.
Integers are often encoded using a variable length integer encoding
Unsigned integers are encoded in 6 bit chunks, least significant first. Each chunk but the last has bit 6 set. For example:
0x3f0x48, 0x03Signed integers are encoded by converting them to unsigned integers, using the following function:
def convert(s): if s < 0: return ((-s)<<1) | 1 else: return (s<<1)
The meaning of the codes and the following bytes are as follows:
| Code | Meaning | Start line | End line | Start column | End column | 
|---|---|---|---|---|---|
| 0-9 | Short form | Δ 0 | Δ 0 | See below | See below | 
| 10-12 | One line form | Δ (code - 10) | Δ 0 | unsigned byte | unsigned byte | 
| 13 | No column info | Δ svarint | Δ 0 | None | None | 
| 14 | Long form | Δ svarint | Δ varint | varint | varint | 
| 15 | No location | None | None | None | None | 
The Δ means the value is encoded as a delta from another value:
co_firstlineno for the first entry.Codes 0-9 are the short forms. The short form consists of two bytes, the second byte holding additional column information. The code is the start column divided by 8 (and rounded down).
(code*8) + ((second_byte>>4)&7)start_column + (second_byte&15)