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

   Esta es una instancia de "PyTypeObject" que representa el tipo
   Python "code".

int PyCode_Check(PyObject *co)

   Retorna verdadero si *co* es un objeto "code". Esta función siempre
   finaliza con éxito.

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, int firstlineno, PyObject *lnotab)
    *Return value: New reference.*

   Retorna un nuevo objeto de código. Si necesita un objeto de código
   ficticio para crear un marco (*frame*), use "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.

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, int firstlineno, PyObject *lnotab)
    *Return value: New reference.*

   Similar a "PyCode_New()", pero con un "*posonlyargcount*" adicional
   para argumentos solo posicionales.

   Nuevo en la versión 3.8.

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. Es ilegal utilizar "exec()" o "eval()" en el objeto de
   código resultante.

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.
