Skip to content

Annotated assignment in a match block does not generate SETUP_ANNOTATIONS #105164

Description

@martindemello

Bug report

Compiling the following code:

match 0:
    case 0:
        x: int = 1

generates

  1           0 LOAD_CONST               0 (0)

  2           2 LOAD_CONST               0 (0)
              4 COMPARE_OP               2 (==)
              6 POP_JUMP_IF_FALSE       12 (to 24)

  3           8 LOAD_CONST               1 (1)
             10 STORE_NAME               0 (x)
             12 LOAD_NAME                1 (int)
             14 LOAD_NAME                2 (__annotations__)
             16 LOAD_CONST               2 ('x')
             18 STORE_SUBSCR
             20 LOAD_CONST               3 (None)
             22 RETURN_VALUE

  2     >>   24 LOAD_CONST               3 (None)
             26 RETURN_VALUE

There is no SETUP_ANNOTATIONS opcode generated despite the __annotations__ access later on. (Found via google/pytype#1435 - for some reason this does not generate a runtime error, but it does cause issues for tools like pytype.)

Your environment

cpython 3.10

Linked PRs

Activity

  1. yilei commented on May 31, 2023

    @yilei
    Contributor

    FWIW, it's a runtime error when the module is imported, not run as main:

    $ cat lib.py
    match 0:
        case 0:
            x: int = 1
    
    $ cat main.py
    import lib
    
    $ python main.py
    Traceback (most recent call last):
      File "main.py", line 1, in <module>
        import lib
      File "lib.py", line 3, in <module>
        x: int = 1
    NameError: name '__annotations__' is not defined
  2. brandtbucher commented on May 31, 2023

    @brandtbucher
    Member

    I think find_ann in compile.c needs to be taught about Match_kind.

    Looks like @JelleZijlstra picked this up already. Feel free to ping me for review!

  3. added
    3.11only security fixes
    3.12only security fixes
    3.13only security fixes
    interpreter-core(Objects, Python, Grammar, and Parser dirs)
    triagedThe issue has been accepted as valid by a triager.
    on May 31, 2023
  4. changed the title [-]annotated assignment in a match block does not generate SETUP_ANNOTATIONS[/-] [+]Annotated assignment in a `match` block does not generate `SETUP_ANNOTATIONS`[/+] on May 31, 2023
  5. added 2 commits that reference this issue on Jun 1, 2023
  6. added a commit that references this issue on Jun 5, 2023
  7. added 3 commits that reference this issue on Jun 5, 2023
  8. hauntsaninja commented on Sep 7, 2023

    @hauntsaninja
    Contributor

    Thanks, looks like this is fixed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

3.11only security fixes3.12only security fixes3.13only security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)triagedThe issue has been accepted as valid by a triager.type-bugAn unexpected behavior, bug, or error

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions