mirror of
https://github.com/python/cpython.git
synced 2025-12-31 04:23:37 +00:00
[3.14] Improve format of InternalDocs/exception_handling.md (GH-134969) (#134975)
Improve format of `InternalDocs/exception_handling.md` (GH-134969)
(cherry picked from commit 5507eff19c)
Co-authored-by: sobolevn <mail@sobolevn.me>
This commit is contained in:
parent
aceb5041d2
commit
0df99207b3
1 changed files with 5 additions and 5 deletions
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
The following code:
|
||||
|
||||
```
|
||||
```python
|
||||
try:
|
||||
g(0)
|
||||
except:
|
||||
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
compiles into intermediate code like the following:
|
||||
|
||||
```
|
||||
```python
|
||||
RESUME 0
|
||||
|
||||
1 SETUP_FINALLY 8 (to L1)
|
||||
|
|
@ -118,13 +118,13 @@
|
|||
|
||||
We want the format to be compact, but quickly searchable.
|
||||
For it to be compact, it needs to have variable sized entries so that we can store common (small) offsets compactly, but handle large offsets if needed.
|
||||
For it to be searchable quickly, we need to support binary search giving us log(n) performance in all cases.
|
||||
For it to be searchable quickly, we need to support binary search giving us `log(n)` performance in all cases.
|
||||
Binary search typically assumes fixed size entries, but that is not necessary, as long as we can identify the start of an entry.
|
||||
|
||||
It is worth noting that the size (end-start) is always smaller than the end, so we encode the entries as:
|
||||
`start, size, target, depth, push-lasti`.
|
||||
|
||||
Also, sizes are limited to 2**30 as the code length cannot exceed 2**31 and each code unit takes 2 bytes.
|
||||
Also, sizes are limited to `2**30` as the code length cannot exceed `2**31` and each code unit takes 2 bytes.
|
||||
It also happens that depth is generally quite small.
|
||||
|
||||
So, we need to encode:
|
||||
|
|
@ -140,7 +140,7 @@
|
|||
We need a marker for the start of the entry, so the first byte of entry will have the most significant bit set.
|
||||
Since the most significant bit is reserved for marking the start of an entry, we have 7 bits per byte to encode offsets.
|
||||
Encoding uses a standard varint encoding, but with only 7 bits instead of the usual 8.
|
||||
The 8 bits of a byte are (msb left) SXdddddd where S is the start bit. X is the extend bit meaning that the next byte is required to extend the offset.
|
||||
The 8 bits of a byte are (msb left) `SXdddddd` where `S` is the start bit. `X` is the extend bit meaning that the next byte is required to extend the offset.
|
||||
|
||||
In addition, we combine `depth` and `lasti` into a single value, `((depth<<1)+lasti)`, before encoding.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue