]> git.proxmox.com Git - mirror_edk2.git/blobdiff - AppPkg/Applications/Python/Python-2.7.10/Include/funcobject.h
AppPkg/Applications/Python/Python-2.7.10: Initial Checkin part 1/5.
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Include / funcobject.h
diff --git a/AppPkg/Applications/Python/Python-2.7.10/Include/funcobject.h b/AppPkg/Applications/Python/Python-2.7.10/Include/funcobject.h
new file mode 100644 (file)
index 0000000..07c05ce
--- /dev/null
@@ -0,0 +1,76 @@
+\r
+/* Function object interface */\r
+\r
+#ifndef Py_FUNCOBJECT_H\r
+#define Py_FUNCOBJECT_H\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/* Function objects and code objects should not be confused with each other:\r
+ *\r
+ * Function objects are created by the execution of the 'def' statement.\r
+ * They reference a code object in their func_code attribute, which is a\r
+ * purely syntactic object, i.e. nothing more than a compiled version of some\r
+ * source code lines.  There is one code object per source code "fragment",\r
+ * but each code object can be referenced by zero or many function objects\r
+ * depending only on how many times the 'def' statement in the source was\r
+ * executed so far.\r
+ */\r
+\r
+typedef struct {\r
+    PyObject_HEAD\r
+    PyObject *func_code;       /* A code object */\r
+    PyObject *func_globals;    /* A dictionary (other mappings won't do) */\r
+    PyObject *func_defaults;   /* NULL or a tuple */\r
+    PyObject *func_closure;    /* NULL or a tuple of cell objects */\r
+    PyObject *func_doc;                /* The __doc__ attribute, can be anything */\r
+    PyObject *func_name;       /* The __name__ attribute, a string object */\r
+    PyObject *func_dict;       /* The __dict__ attribute, a dict or NULL */\r
+    PyObject *func_weakreflist;        /* List of weak references */\r
+    PyObject *func_module;     /* The __module__ attribute, can be anything */\r
+\r
+    /* Invariant:\r
+     *     func_closure contains the bindings for func_code->co_freevars, so\r
+     *     PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code)\r
+     *     (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0).\r
+     */\r
+} PyFunctionObject;\r
+\r
+PyAPI_DATA(PyTypeObject) PyFunction_Type;\r
+\r
+#define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)\r
+\r
+PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);\r
+PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *);\r
+PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *);\r
+PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *);\r
+PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *);\r
+PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *);\r
+PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);\r
+PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *);\r
+\r
+/* Macros for direct access to these values. Type checks are *not*\r
+   done, so use with care. */\r
+#define PyFunction_GET_CODE(func) \\r
+        (((PyFunctionObject *)func) -> func_code)\r
+#define PyFunction_GET_GLOBALS(func) \\r
+       (((PyFunctionObject *)func) -> func_globals)\r
+#define PyFunction_GET_MODULE(func) \\r
+       (((PyFunctionObject *)func) -> func_module)\r
+#define PyFunction_GET_DEFAULTS(func) \\r
+       (((PyFunctionObject *)func) -> func_defaults)\r
+#define PyFunction_GET_CLOSURE(func) \\r
+       (((PyFunctionObject *)func) -> func_closure)\r
+\r
+/* The classmethod and staticmethod types lives here, too */\r
+PyAPI_DATA(PyTypeObject) PyClassMethod_Type;\r
+PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;\r
+\r
+PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);\r
+PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+#endif /* !Py_FUNCOBJECT_H */\r