LOAD_FAST access names outside of co_varnames
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Documentation
LOAD_FAST is documented (https://docs.python.org/3.13/library/dis.html#opcode-LOAD_FAST) as:
Pushes a reference to the local co_varnames[var_num] onto the stack.
However running dis on the following snippet shows that it may load other names:
def simple_cellvar(): # a cellvar in f
a = 1
def g(): # a freevar in g
return a
return g
import dis
dis.dis(simple_cellvar)
print()
print(f"Var names {simple_cellvar.__code__.co_varnames}")
Output
-- MAKE_CELL 1 (a)
5 RESUME 0
6 LOAD_CONST 1 (1)
STORE_DEREF 1 (a)
8 LOAD_FAST 1 (a) <---- a does not appear in the co_varnames !!!
BUILD_TUPLE 1
LOAD_CONST 2 (<code object g at 0x0000027404FB0ED0, ...)
MAKE_FUNCTION
SET_FUNCTION_ATTRIBUTE 8 (closure)
STORE_FAST 0 (g)
11 LOAD_FAST 0 (g)
RETURN_VALUE
Disassembly of <code object g at 0x0000027404FB0ED0, ...>:
-- COPY_FREE_VARS 1
8 RESUME 0
9 LOAD_DEREF 0 (a)
RETURN_VALUE
Var names ('g',)
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con la entrada LOAD_FAST en la documentación enlazada de dis de Python 3.13 y reproduce el desensamblado proporcionado de simple_cellvar. Comprueba cómo se relaciona el nombre mostrado con co_varnames y las variables de celda, y después actualiza la documentación para que su descripción coincida con el comportamiento demostrado.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- documentation
- Tipo de issue
- Documentación
- Dificultad
- 3/5
- Tiempo estimado
- Medio día
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 48/100