File: /Users/paulross/dev/Python-3.6.2/Include/funcobject.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: 
       2: /* Function object interface */
       3: #ifndef Py_LIMITED_API
       4: #ifndef Py_FUNCOBJECT_H
       5: #define Py_FUNCOBJECT_H
       6: #ifdef __cplusplus
       7: extern "C" {
       8: #endif
       9: 
      10: /* Function objects and code objects should not be confused with each other:
      11:  *
      12:  * Function objects are created by the execution of the 'def' statement.
      13:  * They reference a code object in their __code__ attribute, which is a
      14:  * purely syntactic object, i.e. nothing more than a compiled version of some
      15:  * source code lines.  There is one code object per source code "fragment",
      16:  * but each code object can be referenced by zero or many function objects
      17:  * depending only on how many times the 'def' statement in the source was
      18:  * executed so far.
      19:  */
      20: 
      21: typedef struct {
      22:     PyObject_HEAD
      23:     PyObject *func_code;    /* A code object, the __code__ attribute */
      24:     PyObject *func_globals;    /* A dictionary (other mappings won't do) */
      25:     PyObject *func_defaults;    /* NULL or a tuple */
      26:     PyObject *func_kwdefaults;    /* NULL or a dict */
      27:     PyObject *func_closure;    /* NULL or a tuple of cell objects */
      28:     PyObject *func_doc;        /* The __doc__ attribute, can be anything */
      29:     PyObject *func_name;    /* The __name__ attribute, a string object */
      30:     PyObject *func_dict;    /* The __dict__ attribute, a dict or NULL */
      31:     PyObject *func_weakreflist;    /* List of weak references */
      32:     PyObject *func_module;    /* The __module__ attribute, can be anything */
      33:     PyObject *func_annotations;    /* Annotations, a dict or NULL */
      34:     PyObject *func_qualname;    /* The qualified name */
      35: 
      36:     /* Invariant:
      37:      *     func_closure contains the bindings for func_code->co_freevars, so
      38:      *     PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code)
      39:      *     (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0).
      40:      */
      41: } PyFunctionObject;
      42: 
      43: PyAPI_DATA(PyTypeObject) PyFunction_Type;
      44: 
      45: #define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)
      46: 
      47: PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);
      48: PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *);
      49: PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *);
      50: PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *);
      51: PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *);
      52: PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *);
      53: PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *);
      54: PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *);
      55: PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *);
      56: PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);
      57: PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *);
      58: PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *);
      59: PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);
      60: 
      61: #ifndef Py_LIMITED_API
      62: PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict(
      63:     PyObject *func,
      64:     PyObject **args,
      65:     Py_ssize_t nargs,
      66:     PyObject *kwargs);
      67: 
      68: PyAPI_FUNC(PyObject *) _PyFunction_FastCallKeywords(
      69:     PyObject *func,
      70:     PyObject **stack,
      71:     Py_ssize_t nargs,
      72:     PyObject *kwnames);
      73: #endif
      74: 
      75: /* Macros for direct access to these values. Type checks are *not*
      76:    done, so use with care. */
      77: #define PyFunction_GET_CODE(func) \
      78:         (((PyFunctionObject *)func) -> func_code)
      79: #define PyFunction_GET_GLOBALS(func) \
      80:     (((PyFunctionObject *)func) -> func_globals)
      81: #define PyFunction_GET_MODULE(func) \
      82:     (((PyFunctionObject *)func) -> func_module)
      83: #define PyFunction_GET_DEFAULTS(func) \
      84:     (((PyFunctionObject *)func) -> func_defaults)
      85: #define PyFunction_GET_KW_DEFAULTS(func) \
      86:     (((PyFunctionObject *)func) -> func_kwdefaults)
      87: #define PyFunction_GET_CLOSURE(func) \
      88:     (((PyFunctionObject *)func) -> func_closure)
      89: #define PyFunction_GET_ANNOTATIONS(func) \
      90:     (((PyFunctionObject *)func) -> func_annotations)
      91: 
      92: /* The classmethod and staticmethod types lives here, too */
      93: PyAPI_DATA(PyTypeObject) PyClassMethod_Type;
      94: PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;
      95: 
      96: PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);
      97: PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);
      98: 
      99: #ifdef __cplusplus
     100: }
     101: #endif
     102: #endif /* !Py_FUNCOBJECT_H */
     103: #endif /* Py_LIMITED_API */
     104: