File: comparisons.c

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (101 lines) | stat: -rw-r--r-- 3,852 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "Python.h"

#if PY_MAJOR_VERSION >= 3
    #define PyInt_CheckExact PyLong_CheckExact
#endif

typedef struct CmpObject {
    PyObject_HEAD
} CmpObject;


static PyObject* cmp_richcmp(PyObject *self, PyObject *other, int opid) {
    long val;
    if ((opid != Py_EQ && opid != Py_NE) || !PyInt_CheckExact(other)) {
        Py_INCREF(Py_NotImplemented);
        return Py_NotImplemented;
    }
    val = PyLong_AsLong(other);
    if (opid == Py_EQ) {
        return PyBool_FromLong(val == 3);
    }
    else if (opid == Py_NE) {
        return PyBool_FromLong(val != 3);
    }
    return Py_NotImplemented;
}

static long cmp_hashfunc(PyObject *self) {
    return 3;
}


PyTypeObject CmpType = {
    PyVarObject_HEAD_INIT(NULL, 0)
    "comparisons.CmpType",                          /* tp_name */
    sizeof(CmpObject),                              /* tp_basicsize */
    0,                                              /* tp_itemsize */
    0,                                              /* tp_dealloc */
    0,                                              /* tp_print */
    0,                                              /* tp_getattr */
    0,                                              /* tp_setattr */
    0,                                              /* tp_compare */
    0,                                              /* tp_repr */
    0,                                              /* tp_as_number */
    0,                                              /* tp_as_sequence */
    0,                                              /* tp_as_mapping */
    cmp_hashfunc,                                   /* tp_hash */
    0,                                              /* tp_call */
    0,                                              /* tp_str */
    0,                                              /* tp_getattro */
    0,                                              /* tp_setattro */
    0,                                              /* tp_as_buffer */
    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,         /* tp_flags */
    0,                                              /* tp_doc */
    (traverseproc)0,                                /* tp_traverse */
    0,                                              /* tp_clear */
    (richcmpfunc)cmp_richcmp,                       /* tp_richcompare */
    0,                                              /* tp_weaklistoffset */
    0,                                              /* tp_iter */
    0,                                              /* tp_iternext */
    0,                                              /* tp_methods */
    0,                                              /* tp_members */
    0,                                              /* tp_getset */
    0,                                              /* tp_base */
    0,                                              /* tp_dict */
    0,                                              /* tp_descr_get */
    0,                                              /* tp_descr_set */
    0,                                              /* tp_dictoffset */
    0,                                              /* tp_init */
    0,                                              /* tp_alloc */
    PyType_GenericNew,                              /* tp_new */
    0                                               /* tp_free */
};


static struct PyModuleDef moduledef = {
    PyModuleDef_HEAD_INIT,
    "comparisons",
    "Module Doc",
    -1,
    NULL
};


PyMODINIT_FUNC
PyInit_comparisons(void)
{
    PyObject *m, *d;

    if (PyType_Ready(&CmpType) < 0)
        return NULL;
    m = PyModule_Create(&moduledef);
    if (m == NULL)
        return NULL;
    d = PyModule_GetDict(m);
    if (d == NULL)
        return NULL;
    if (PyDict_SetItemString(d, "CmpType", (PyObject *)&CmpType) < 0)
        return NULL;
    return m;
}