17db96d56Sopenharmony_ci.. highlight:: c
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci.. index:: object; code, code object
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ci.. _codeobjects:
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ciCode Objects
87db96d56Sopenharmony_ci------------
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci.. sectionauthor:: Jeffrey Yasskin <jyasskin@gmail.com>
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ciCode objects are a low-level detail of the CPython implementation.
137db96d56Sopenharmony_ciEach one represents a chunk of executable code that hasn't yet been
147db96d56Sopenharmony_cibound into a function.
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci.. c:type:: PyCodeObject
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci   The C structure of the objects used to describe code objects.  The
197db96d56Sopenharmony_ci   fields of this type are subject to change at any time.
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci.. c:var:: PyTypeObject PyCode_Type
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci   This is an instance of :c:type:`PyTypeObject` representing the Python
257db96d56Sopenharmony_ci   :class:`code` type.
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci.. c:function:: int PyCode_Check(PyObject *co)
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci   Return true if *co* is a :class:`code` object.  This function always succeeds.
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci.. c:function:: int PyCode_GetNumFree(PyCodeObject *co)
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci   Return the number of free variables in *co*.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci.. c:function:: 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 *linetable, PyObject *exceptiontable)
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   Return a new code object.  If you need a dummy code object to create a frame,
397db96d56Sopenharmony_ci   use :c:func:`PyCode_NewEmpty` instead.  Calling :c:func:`PyCode_New` directly
407db96d56Sopenharmony_ci   will bind you to a precise Python version since the definition of the bytecode
417db96d56Sopenharmony_ci   changes often. The many arguments of this function are inter-dependent in complex
427db96d56Sopenharmony_ci   ways, meaning that subtle changes to values are likely to result in incorrect
437db96d56Sopenharmony_ci   execution or VM crashes. Use this function only with extreme care.
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci   .. versionchanged:: 3.11
467db96d56Sopenharmony_ci      Added ``exceptiontable`` parameter.
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci.. c:function:: 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 *linetable, PyObject *exceptiontable)
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci   Similar to :c:func:`PyCode_New`, but with an extra "posonlyargcount" for positional-only arguments.
517db96d56Sopenharmony_ci   The same caveats that apply to ``PyCode_New`` also apply to this function.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci   .. versionadded:: 3.8
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci   .. versionchanged:: 3.11
567db96d56Sopenharmony_ci      Added ``exceptiontable`` parameter.
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci.. c:function:: PyCodeObject* PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno)
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci   Return a new empty code object with the specified filename,
617db96d56Sopenharmony_ci   function name, and first line number. The resulting code
627db96d56Sopenharmony_ci   object will raise an ``Exception`` if executed.
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci.. c:function:: int PyCode_Addr2Line(PyCodeObject *co, int byte_offset)
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci    Return the line number of the instruction that occurs on or before ``byte_offset`` and ends after it.
677db96d56Sopenharmony_ci    If you just need the line number of a frame, use :c:func:`PyFrame_GetLineNumber` instead.
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci    For efficiently iterating over the line numbers in a code object, use `the API described in PEP 626
707db96d56Sopenharmony_ci    <https://peps.python.org/pep-0626/#out-of-process-debuggers-and-profilers>`_.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci.. c:function:: int PyCode_Addr2Location(PyObject *co, int byte_offset, int *start_line, int *start_column, int *end_line, int *end_column)
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci   Sets the passed ``int`` pointers to the source code line and column numbers
757db96d56Sopenharmony_ci   for the instruction at ``byte_offset``. Sets the value to ``0`` when
767db96d56Sopenharmony_ci   information is not available for any particular element.
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci   Returns ``1`` if the function succeeds and 0 otherwise.
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   .. versionadded:: 3.11
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci.. c:function:: PyObject* PyCode_GetCode(PyCodeObject *co)
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci   Equivalent to the Python code ``getattr(co, 'co_code')``.
857db96d56Sopenharmony_ci   Returns a strong reference to a :c:type:`PyBytesObject` representing the
867db96d56Sopenharmony_ci   bytecode in a code object. On error, ``NULL`` is returned and an exception
877db96d56Sopenharmony_ci   is raised.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci   This ``PyBytesObject`` may be created on-demand by the interpreter and does
907db96d56Sopenharmony_ci   not necessarily represent the bytecode actually executed by CPython. The
917db96d56Sopenharmony_ci   primary use case for this function is debuggers and profilers.
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci   .. versionadded:: 3.11
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci.. c:function:: PyObject* PyCode_GetVarnames(PyCodeObject *co)
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci   Equivalent to the Python code ``getattr(co, 'co_varnames')``.
987db96d56Sopenharmony_ci   Returns a new reference to a :c:type:`PyTupleObject` containing the names of
997db96d56Sopenharmony_ci   the local variables. On error, ``NULL`` is returned and an exception
1007db96d56Sopenharmony_ci   is raised.
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci   .. versionadded:: 3.11
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci.. c:function:: PyObject* PyCode_GetCellvars(PyCodeObject *co)
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci   Equivalent to the Python code ``getattr(co, 'co_cellvars')``.
1077db96d56Sopenharmony_ci   Returns a new reference to a :c:type:`PyTupleObject` containing the names of
1087db96d56Sopenharmony_ci   the local variables that are referenced by nested functions. On error, ``NULL``
1097db96d56Sopenharmony_ci   is returned and an exception is raised.
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci   .. versionadded:: 3.11
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci.. c:function:: PyObject* PyCode_GetFreevars(PyCodeObject *co)
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci   Equivalent to the Python code ``getattr(co, 'co_freevars')``.
1167db96d56Sopenharmony_ci   Returns a new reference to a :c:type:`PyTupleObject` containing the names of
1177db96d56Sopenharmony_ci   the free variables. On error, ``NULL`` is returned and an exception is raised.
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci   .. versionadded:: 3.11
120