no sys.monitoring branches shown for `async for`
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
Bug report
Bug description:
With the code from PR 122564, no branches are indicated for an async for. In the example below, both branches for the if also unexpectedly present (through co_locations) as "going out of scope":
import asyncio
async def g():
yield 1
yield 2
x = 0
async def fun():
global x
async for v in g(): # line 11
if v > 0:
x += v
x += 3
print(x)
asyncio.run(fun())
Results:
Disassembly of <code object fun at 0x103480870, file "/Users/juan/project/slipcover/ex11.py", line 8>:
8 0 RETURN_GENERATOR
2 POP_TOP
L1: 4 RESUME 0
11 6 LOAD_GLOBAL 1 (g + NULL)
16 CALL 0
24 GET_AITER
L2: 26 GET_ANEXT
28 LOAD_CONST 0 (None)
L3: 30 SEND 3 (to L6)
L4: 34 YIELD_VALUE 1
L5: 36 RESUME 3
38 JUMP_BACKWARD_NO_INTERRUPT 5 (to L3)
L6: 40 END_SEND
L7: 42 STORE_FAST 0 (v)
12 44 LOAD_FAST 0 (v)
46 LOAD_CONST 1 (0)
48 COMPARE_OP 148 (bool(>))
L8: 52 POP_JUMP_IF_TRUE 2 (to L9)
56 JUMP_BACKWARD 17 (to L2)
L9: 60 NOT_TAKEN
13 62 LOAD_GLOBAL 2 (x)
72 LOAD_FAST 0 (v)
74 BINARY_OP 13 (+=)
78 STORE_GLOBAL 1 (x)
80 JUMP_BACKWARD 29 (to L2)
11 L10: 84 CLEANUP_THROW
L11: 86 JUMP_BACKWARD_NO_INTERRUPT 24 (to L6)
L12: 88 END_ASYNC_FOR
14 90 LOAD_GLOBAL 2 (x)
100 LOAD_CONST 2 (3)
102 BINARY_OP 13 (+=)
106 STORE_GLOBAL 1 (x)
15 108 LOAD_GLOBAL 5 (print + NULL)
118 LOAD_GLOBAL 2 (x)
128 CALL 1
136 POP_TOP
138 RETURN_CONST 0 (None)
-- L13: 140 CALL_INTRINSIC_1 3 (INTRINSIC_STOPITERATION_ERROR)
142 RERAISE 1
ExceptionTable:
L1 to L2 -> L13 [0] lasti
L2 to L4 -> L12 [1]
L4 to L5 -> L10 [3]
L5 to L7 -> L12 [1]
L7 to L8 -> L13 [0] lasti
L9 to L10 -> L13 [0] lasti
L10 to L11 -> L12 [1]
L12 to L13 -> L13 [0] lasti
'fun' branches:
ex11.py 12:11-12:16 "v > 0" (fun@52) -> 12:11-12:16 "v > 0" (fun@58) [if/while -> out]
ex11.py 12:11-12:16 "v > 0" (fun@52) -> 12:11-12:16 "v > 0" (fun@60) [if/while -> out]
@markshannon @nedbat
CPython versions tested on:
CPython main branch
Operating systems tested on:
macOS
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece reproduzindo o exemplo async-for fornecido no CPython main e compare a saída das branches com o comportamento introduzido pelo PR 122564. Rastreie os dados das branches de sys.monitoring e os co_locations envolvidos; considera-se concluído quando as branches async-for forem relatadas e as branches if não forem mais marcadas como saindo do escopo.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- testing-qa, tooling
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100