blob: 35ccf43ed23f152c356eddbd400569654fb234ab [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Function object interface */
3
Fred Drakeea9cb5a2000-07-09 00:20:36 +00004#ifndef Py_FUNCOBJECT_H
5#define Py_FUNCOBJECT_H
6#ifdef __cplusplus
7extern "C" {
8#endif
9
Guido van Rossum25831651993-05-19 14:50:45 +000010typedef struct {
Fred Drakeea9cb5a2000-07-09 00:20:36 +000011 PyObject_HEAD
12 PyObject *func_code;
13 PyObject *func_globals;
14 PyObject *func_defaults;
15 PyObject *func_doc;
16 PyObject *func_name;
Barry Warsawd6a9e842001-01-15 20:40:19 +000017 PyObject *func_dict;
Guido van Rossumcaa63801995-01-12 11:45:45 +000018} PyFunctionObject;
Guido van Rossum25831651993-05-19 14:50:45 +000019
Guido van Rossum051ab121995-02-27 10:17:52 +000020extern DL_IMPORT(PyTypeObject) PyFunction_Type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000021
Guido van Rossumcaa63801995-01-12 11:45:45 +000022#define PyFunction_Check(op) ((op)->ob_type == &PyFunction_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000023
Fred Drakeea9cb5a2000-07-09 00:20:36 +000024extern DL_IMPORT(PyObject *) PyFunction_New(PyObject *, PyObject *);
25extern DL_IMPORT(PyObject *) PyFunction_GetCode(PyObject *);
26extern DL_IMPORT(PyObject *) PyFunction_GetGlobals(PyObject *);
27extern DL_IMPORT(PyObject *) PyFunction_GetDefaults(PyObject *);
28extern DL_IMPORT(int) PyFunction_SetDefaults(PyObject *, PyObject *);
Guido van Rossuma3309961993-07-28 09:05:47 +000029
Guido van Rossumba0d0611998-07-10 15:47:08 +000030/* Macros for direct access to these values. Type checks are *not*
31 done, so use with care. */
32#define PyFunction_GET_CODE(func) \
33 (((PyFunctionObject *)func) -> func_code)
34#define PyFunction_GET_GLOBALS(func) \
35 (((PyFunctionObject *)func) -> func_globals)
36#define PyFunction_GET_DEFAULTS(func) \
37 (((PyFunctionObject *)func) -> func_defaults)
38
Guido van Rossuma3309961993-07-28 09:05:47 +000039#ifdef __cplusplus
40}
41#endif
42#endif /* !Py_FUNCOBJECT_H */