mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 01:20:42 +00:00
768e812e45
* On windows it's strongly desired to be able to compile straight out of a clean checkout or source download. This means anyone can download the source and investigate something quickly, without having to worry about the hassle of figuring out how the project downloads 3rd party dependencies, fetching them, getting them registered in the right place. * This can't be put in a submodule as git submodules don't get downloaded by default so people new to git will get confusing compilation messages, and someone downloading the source from github directly without cloning via git won't get submodules included. * It does add some extra size to a fresh download/checkout which is unfortunate, but absolutely worth the cost. Shallow checkouts still aren't unfeasibly large, and it's only a one-off cost at clone time.
104 lines
4.0 KiB
C
104 lines
4.0 KiB
C
|
|
/* Function object interface */
|
|
#ifndef Py_LIMITED_API
|
|
#ifndef Py_FUNCOBJECT_H
|
|
#define Py_FUNCOBJECT_H
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Function objects and code objects should not be confused with each other:
|
|
*
|
|
* Function objects are created by the execution of the 'def' statement.
|
|
* They reference a code object in their __code__ attribute, which is a
|
|
* purely syntactic object, i.e. nothing more than a compiled version of some
|
|
* source code lines. There is one code object per source code "fragment",
|
|
* but each code object can be referenced by zero or many function objects
|
|
* depending only on how many times the 'def' statement in the source was
|
|
* executed so far.
|
|
*/
|
|
|
|
typedef struct {
|
|
PyObject_HEAD
|
|
PyObject *func_code; /* A code object, the __code__ attribute */
|
|
PyObject *func_globals; /* A dictionary (other mappings won't do) */
|
|
PyObject *func_defaults; /* NULL or a tuple */
|
|
PyObject *func_kwdefaults; /* NULL or a dict */
|
|
PyObject *func_closure; /* NULL or a tuple of cell objects */
|
|
PyObject *func_doc; /* The __doc__ attribute, can be anything */
|
|
PyObject *func_name; /* The __name__ attribute, a string object */
|
|
PyObject *func_dict; /* The __dict__ attribute, a dict or NULL */
|
|
PyObject *func_weakreflist; /* List of weak references */
|
|
PyObject *func_module; /* The __module__ attribute, can be anything */
|
|
PyObject *func_annotations; /* Annotations, a dict or NULL */
|
|
PyObject *func_qualname; /* The qualified name */
|
|
|
|
/* Invariant:
|
|
* func_closure contains the bindings for func_code->co_freevars, so
|
|
* PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code)
|
|
* (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0).
|
|
*/
|
|
} PyFunctionObject;
|
|
|
|
PyAPI_DATA(PyTypeObject) PyFunction_Type;
|
|
|
|
#define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)
|
|
|
|
PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);
|
|
PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *);
|
|
PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *);
|
|
PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *);
|
|
PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *);
|
|
PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *);
|
|
PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *);
|
|
PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *);
|
|
PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *);
|
|
PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);
|
|
PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *);
|
|
PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *);
|
|
PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);
|
|
|
|
#ifndef Py_LIMITED_API
|
|
PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict(
|
|
PyObject *func,
|
|
PyObject **args,
|
|
Py_ssize_t nargs,
|
|
PyObject *kwargs);
|
|
|
|
PyAPI_FUNC(PyObject *) _PyFunction_FastCallKeywords(
|
|
PyObject *func,
|
|
PyObject **stack,
|
|
Py_ssize_t nargs,
|
|
PyObject *kwnames);
|
|
#endif
|
|
|
|
/* Macros for direct access to these values. Type checks are *not*
|
|
done, so use with care. */
|
|
#define PyFunction_GET_CODE(func) \
|
|
(((PyFunctionObject *)func) -> func_code)
|
|
#define PyFunction_GET_GLOBALS(func) \
|
|
(((PyFunctionObject *)func) -> func_globals)
|
|
#define PyFunction_GET_MODULE(func) \
|
|
(((PyFunctionObject *)func) -> func_module)
|
|
#define PyFunction_GET_DEFAULTS(func) \
|
|
(((PyFunctionObject *)func) -> func_defaults)
|
|
#define PyFunction_GET_KW_DEFAULTS(func) \
|
|
(((PyFunctionObject *)func) -> func_kwdefaults)
|
|
#define PyFunction_GET_CLOSURE(func) \
|
|
(((PyFunctionObject *)func) -> func_closure)
|
|
#define PyFunction_GET_ANNOTATIONS(func) \
|
|
(((PyFunctionObject *)func) -> func_annotations)
|
|
|
|
/* The classmethod and staticmethod types lives here, too */
|
|
PyAPI_DATA(PyTypeObject) PyClassMethod_Type;
|
|
PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;
|
|
|
|
PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);
|
|
PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_FUNCOBJECT_H */
|
|
#endif /* Py_LIMITED_API */
|