Objetos código
**************

Los objetos código son un detalle de bajo nivel de la implementación
de CPython. Cada uno representa un fragmento de código ejecutable que
aún no se ha vinculado a una función.

type PyCodeObject

   La estructura en C de los objetos utilizados para describir objetos
   código. Los campos de este tipo están sujetos a cambios en
   cualquier momento.

PyTypeObject PyCode_Type

   This is an instance of "PyTypeObject" representing the Python code
   object.

int PyCode_Check(PyObject *co)

   Return true if *co* is a code object. This function always
   succeeds.

int PyCode_GetNumFree(PyCodeObject *co)

   Retorna el número de variables libres en *co*.

PyCodeObject *PyCode_New(int argcount, int kwonlyargcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *freevars, PyObject *cellvars, PyObject *filename, PyObject *name, PyObject *qualname, int firstlineno, PyObject *linetable, PyObject *exceptiontable)
    *Return value: New reference.*

   Retorna un nuevo objeto de código. Si se necesita un objeto de
   código ficticio para crear un marco (*frame*), usar
   "PyCode_NewEmpty()" en su lugar. Llamando "PyCode_New()"
   directamente puede enlazarlo a una versión precisa de Python ya que
   la definición del código de bytes cambia a menudo. Muchos de los
   argumentos de esta función están relacionados mutuamente de formas
   complejas, lo cual significa que cambios sutiles en estos valores
   probablemente resulten en ejecuciones incorrectas o fallas en la
   VM.

   Distinto en la versión 3.11: Added "qualname" and "exceptiontable"
   parameters.

PyCodeObject *PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *freevars, PyObject *cellvars, PyObject *filename, PyObject *name, PyObject *qualname, int firstlineno, PyObject *linetable, PyObject *exceptiontable)
    *Return value: New reference.*

   Similar a "PyCode_New()", pero con un "*posonlyargcount*" adicional
   para argumentos solo posicionales. Las mismas advertencias que
   aplican a "PyCode_New" también aplican a esta función.

   Nuevo en la versión 3.8.

   Distinto en la versión 3.11: Added "qualname" and  "exceptiontable"
   parameters.

PyCodeObject *PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno)
    *Return value: New reference.*

   Retorna un nuevo objeto de código vacío con el nombre de archivo
   especificado, el nombre de la función y el número de la primera
   línea. Si el objeto código resultante es ejecutado, lanzará una
   "Exception".

int PyCode_Addr2Line(PyCodeObject *co, int byte_offset)

   Retorna el número de línea de la instrucción que se produce en o
   antes de "byte_offset" y finaliza después. Si solo necesita el
   número de línea de un marco, use "PyFrame_GetLineNumber()" en su
   lugar.

   Para iterar de manera eficiente sobre los números de línea en un
   objeto de código, use la API descrita en PEP 626.

int PyCode_Addr2Location(PyObject *co, int byte_offset, int *start_line, int *start_column, int *end_line, int *end_column)

   Establece los punteros "int" pasados en los números de línea y
   columna del código fuente para las instrucciones en "byte_offset".
   Establece el valor en "0" cuando la información no está disponible
   para algún elemento en particular.

   Retorna "1" si la función fue exitosa y "0" de lo contrario.

   Nuevo en la versión 3.11.

PyObject *PyCode_GetCode(PyCodeObject *co)

   Equivalente al código Python "getattr(co, 'co_code')". Retorna una
   referencia fuerte a un "PyBytesObject" representando el bytecode en
   un objecto código. En caso de error se retorna "NULL" y se lanza
   una excepción.

   Este "PyBytesObject" puede ser creado a pedido del intérprete y no
   necesariamente representa el bytecode que es realmente ejecutado
   por CPython. Los casos de uso principales para esta función son
   depuradores y perfiladores.

   Nuevo en la versión 3.11.

PyObject *PyCode_GetVarnames(PyCodeObject *co)

   Equivalente al código Python "getattr(co, 'co_varnames')". Retorna
   una nueva referencia a un "PyTupleObject" que contiene los nombres
   de las variables locales. En caso de error, retorna "NULL" y lanza
   una excepción.

   Nuevo en la versión 3.11.

PyObject *PyCode_GetCellvars(PyCodeObject *co)

   Equivalente al código Python "getattr(co, 'co_cellvars')". Retorna
   una nueva referencia a un "PyTupleObject" que contiene los nombres
   de las variables locales referenciadas por funciones anidadas. En
   caso de error, retorna "NULL" y lanza una excepción.

   Nuevo en la versión 3.11.

PyObject *PyCode_GetFreevars(PyCodeObject *co)

   Equivalente al código Python "getattr(co, 'co_freevars')". Retorna
   una nueva referencia a un "PyTupleObject" que contiene los nombres
   de las variables libres. En caso de error, retorna "NULL" y lanza
   una excepción.

   Nuevo en la versión 3.11.
