]> git.proxmox.com Git - mirror_edk2.git/blobdiff - AppPkg/Applications/Python/Python-2.7.10/Objects/boolobject.c
AppPkg/Applications/Python/Python-2.7.10: Initial Checkin part 3/5.
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Objects / boolobject.c
diff --git a/AppPkg/Applications/Python/Python-2.7.10/Objects/boolobject.c b/AppPkg/Applications/Python/Python-2.7.10/Objects/boolobject.c
new file mode 100644 (file)
index 0000000..6791ee7
--- /dev/null
@@ -0,0 +1,202 @@
+/* Boolean type, a subtype of int */\r
+\r
+#include "Python.h"\r
+\r
+/* We need to define bool_print to override int_print */\r
+\r
+static int\r
+bool_print(PyBoolObject *self, FILE *fp, int flags)\r
+{\r
+    Py_BEGIN_ALLOW_THREADS\r
+    fputs(self->ob_ival == 0 ? "False" : "True", fp);\r
+    Py_END_ALLOW_THREADS\r
+    return 0;\r
+}\r
+\r
+/* We define bool_repr to return "False" or "True" */\r
+\r
+static PyObject *false_str = NULL;\r
+static PyObject *true_str = NULL;\r
+\r
+static PyObject *\r
+bool_repr(PyBoolObject *self)\r
+{\r
+    PyObject *s;\r
+\r
+    if (self->ob_ival)\r
+        s = true_str ? true_str :\r
+            (true_str = PyString_InternFromString("True"));\r
+    else\r
+        s = false_str ? false_str :\r
+            (false_str = PyString_InternFromString("False"));\r
+    Py_XINCREF(s);\r
+    return s;\r
+}\r
+\r
+/* Function to return a bool from a C long */\r
+\r
+PyObject *PyBool_FromLong(long ok)\r
+{\r
+    PyObject *result;\r
+\r
+    if (ok)\r
+        result = Py_True;\r
+    else\r
+        result = Py_False;\r
+    Py_INCREF(result);\r
+    return result;\r
+}\r
+\r
+/* We define bool_new to always return either Py_True or Py_False */\r
+\r
+static PyObject *\r
+bool_new(PyTypeObject *type, PyObject *args, PyObject *kwds)\r
+{\r
+    static char *kwlist[] = {"x", 0};\r
+    PyObject *x = Py_False;\r
+    long ok;\r
+\r
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:bool", kwlist, &x))\r
+        return NULL;\r
+    ok = PyObject_IsTrue(x);\r
+    if (ok < 0)\r
+        return NULL;\r
+    return PyBool_FromLong(ok);\r
+}\r
+\r
+/* Arithmetic operations redefined to return bool if both args are bool. */\r
+\r
+static PyObject *\r
+bool_and(PyObject *a, PyObject *b)\r
+{\r
+    if (!PyBool_Check(a) || !PyBool_Check(b))\r
+        return PyInt_Type.tp_as_number->nb_and(a, b);\r
+    return PyBool_FromLong(\r
+        ((PyBoolObject *)a)->ob_ival & ((PyBoolObject *)b)->ob_ival);\r
+}\r
+\r
+static PyObject *\r
+bool_or(PyObject *a, PyObject *b)\r
+{\r
+    if (!PyBool_Check(a) || !PyBool_Check(b))\r
+        return PyInt_Type.tp_as_number->nb_or(a, b);\r
+    return PyBool_FromLong(\r
+        ((PyBoolObject *)a)->ob_ival | ((PyBoolObject *)b)->ob_ival);\r
+}\r
+\r
+static PyObject *\r
+bool_xor(PyObject *a, PyObject *b)\r
+{\r
+    if (!PyBool_Check(a) || !PyBool_Check(b))\r
+        return PyInt_Type.tp_as_number->nb_xor(a, b);\r
+    return PyBool_FromLong(\r
+        ((PyBoolObject *)a)->ob_ival ^ ((PyBoolObject *)b)->ob_ival);\r
+}\r
+\r
+/* Doc string */\r
+\r
+PyDoc_STRVAR(bool_doc,\r
+"bool(x) -> bool\n\\r
+\n\\r
+Returns True when the argument x is true, False otherwise.\n\\r
+The builtins True and False are the only two instances of the class bool.\n\\r
+The class bool is a subclass of the class int, and cannot be subclassed.");\r
+\r
+/* Arithmetic methods -- only so we can override &, |, ^. */\r
+\r
+static PyNumberMethods bool_as_number = {\r
+    0,                          /* nb_add */\r
+    0,                          /* nb_subtract */\r
+    0,                          /* nb_multiply */\r
+    0,                          /* nb_divide */\r
+    0,                          /* nb_remainder */\r
+    0,                          /* nb_divmod */\r
+    0,                          /* nb_power */\r
+    0,                          /* nb_negative */\r
+    0,                          /* nb_positive */\r
+    0,                          /* nb_absolute */\r
+    0,                          /* nb_nonzero */\r
+    0,                          /* nb_invert */\r
+    0,                          /* nb_lshift */\r
+    0,                          /* nb_rshift */\r
+    bool_and,                   /* nb_and */\r
+    bool_xor,                   /* nb_xor */\r
+    bool_or,                    /* nb_or */\r
+    0,                          /* nb_coerce */\r
+    0,                          /* nb_int */\r
+    0,                          /* nb_long */\r
+    0,                          /* nb_float */\r
+    0,                          /* nb_oct */\r
+    0,                          /* nb_hex */\r
+    0,                          /* nb_inplace_add */\r
+    0,                          /* nb_inplace_subtract */\r
+    0,                          /* nb_inplace_multiply */\r
+    0,                          /* nb_inplace_divide */\r
+    0,                          /* nb_inplace_remainder */\r
+    0,                          /* nb_inplace_power */\r
+    0,                          /* nb_inplace_lshift */\r
+    0,                          /* nb_inplace_rshift */\r
+    0,                          /* nb_inplace_and */\r
+    0,                          /* nb_inplace_xor */\r
+    0,                          /* nb_inplace_or */\r
+    0,                          /* nb_floor_divide */\r
+    0,                          /* nb_true_divide */\r
+    0,                          /* nb_inplace_floor_divide */\r
+    0,                          /* nb_inplace_true_divide */\r
+};\r
+\r
+/* The type object for bool.  Note that this cannot be subclassed! */\r
+\r
+PyTypeObject PyBool_Type = {\r
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)\r
+    "bool",\r
+    sizeof(PyIntObject),\r
+    0,\r
+    0,                                          /* tp_dealloc */\r
+    (printfunc)bool_print,                      /* tp_print */\r
+    0,                                          /* tp_getattr */\r
+    0,                                          /* tp_setattr */\r
+    0,                                          /* tp_compare */\r
+    (reprfunc)bool_repr,                        /* tp_repr */\r
+    &bool_as_number,                            /* tp_as_number */\r
+    0,                                          /* tp_as_sequence */\r
+    0,                                          /* tp_as_mapping */\r
+    0,                                          /* tp_hash */\r
+    0,                                          /* tp_call */\r
+    (reprfunc)bool_repr,                        /* tp_str */\r
+    0,                                          /* tp_getattro */\r
+    0,                                          /* tp_setattro */\r
+    0,                                          /* tp_as_buffer */\r
+    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, /* tp_flags */\r
+    bool_doc,                                   /* tp_doc */\r
+    0,                                          /* tp_traverse */\r
+    0,                                          /* tp_clear */\r
+    0,                                          /* tp_richcompare */\r
+    0,                                          /* tp_weaklistoffset */\r
+    0,                                          /* tp_iter */\r
+    0,                                          /* tp_iternext */\r
+    0,                                          /* tp_methods */\r
+    0,                                          /* tp_members */\r
+    0,                                          /* tp_getset */\r
+    &PyInt_Type,                                /* tp_base */\r
+    0,                                          /* tp_dict */\r
+    0,                                          /* tp_descr_get */\r
+    0,                                          /* tp_descr_set */\r
+    0,                                          /* tp_dictoffset */\r
+    0,                                          /* tp_init */\r
+    0,                                          /* tp_alloc */\r
+    bool_new,                                   /* tp_new */\r
+};\r
+\r
+/* The objects representing bool values False and True */\r
+\r
+/* Named Zero for link-level compatibility */\r
+PyIntObject _Py_ZeroStruct = {\r
+    PyObject_HEAD_INIT(&PyBool_Type)\r
+    0\r
+};\r
+\r
+PyIntObject _Py_TrueStruct = {\r
+    PyObject_HEAD_INIT(&PyBool_Type)\r
+    1\r
+};\r