17db96d56Sopenharmony_ci/* Frame object interface */
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci#ifndef Py_CPYTHON_FRAMEOBJECT_H
47db96d56Sopenharmony_ci#  error "this header file must not be included directly"
57db96d56Sopenharmony_ci#endif
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci/* Standard object interface */
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciPyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *,
107db96d56Sopenharmony_ci                                        PyObject *, PyObject *);
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci/* The rest of the interface is specific for frame objects */
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci/* Conversions between "fast locals" and locals in dictionary */
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ciPyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int);
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci/* -- Caveat emptor --
197db96d56Sopenharmony_ci * The concept of entry frames is an implementation detail of the CPython
207db96d56Sopenharmony_ci * interpreter. This API is considered unstable and is provided for the
217db96d56Sopenharmony_ci * convenience of debuggers, profilers and state-inspecting tools. Notice that
227db96d56Sopenharmony_ci * this API can be changed in future minor versions if the underlying frame
237db96d56Sopenharmony_ci * mechanism change or the concept of an 'entry frame' or its semantics becomes
247db96d56Sopenharmony_ci * obsolete or outdated. */
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyFrame_IsEntryFrame(PyFrameObject *frame);
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ciPyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f);
297db96d56Sopenharmony_ciPyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *);
30