Title: Improve the bytecode for mapping patterns
Type: Stage: patch review
Components: Interpreter Core Versions: Python 3.11
Status: open Resolution:
Dependencies: Superseder:
Assigned To: brandtbucher Nosy List: brandtbucher
Priority: normal Keywords: patch

Created on 2021-06-26 00:12 by brandtbucher, last changed 2021-06-27 00:31 by brandtbucher.

Pull Requests
URL Status Linked Edit
PR 26922 open brandtbucher, 2021-06-27 00:31
Messages (1)
msg396533 - (view) Author: Brandt Bucher (brandtbucher) * (Python committer) Date: 2021-06-26 00:11
The generated bytecode for mapping patterns is more complicated than it needs to be:

- Matching sub-patterns involves indexing into a tuple of values in order to extract them. We already know the size of this tuple at compile-time, so we can just unpack it onto the stack instead.

- COPY_DICT_WITHOUT_KEYS isn't used anywhere else, and can be emulated with existing, smaller instructions (albeit using quite a few of them).

- MATCH_KEYS doesn't need to push a boolean indicating match / no match. It already pushes None on no match, so following it with a simple DUP_TOP() + LOAD_CONST(None) + IS_OP(1) should suffice.

These are mostly just refactoring opportunities... quick-and-dirty measurements of Lib/ show no performance impact for these changes.
Date User Action Args
2021-06-27 00:31:15brandtbuchersetkeywords: + patch
stage: patch review
pull_requests: + pull_request25495
2021-06-26 00:12:00brandtbuchercreate