summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_ctypes/_ctypes_test.c20
-rw-r--r--Modules/_randommodule.c2
-rw-r--r--Modules/_struct.c49
-rw-r--r--Modules/arraymodule.c2
-rw-r--r--Modules/collectionsmodule.c2
-rw-r--r--Modules/itertoolsmodule.c25
6 files changed, 77 insertions, 23 deletions
diff --git a/Modules/_ctypes/_ctypes_test.c b/Modules/_ctypes/_ctypes_test.c
index 9e7c212..53ff303 100644
--- a/Modules/_ctypes/_ctypes_test.c
+++ b/Modules/_ctypes/_ctypes_test.c
@@ -68,22 +68,25 @@ EXPORT(void) _testfunc_v(int a, int b, int *presult)
EXPORT(int) _testfunc_i_bhilfd(signed char b, short h, int i, long l, float f, double d)
{
-// printf("_testfunc_i_bhilfd got %d %d %d %ld %f %f\n",
-// b, h, i, l, f, d);
+/* printf("_testfunc_i_bhilfd got %d %d %d %ld %f %f\n",
+ b, h, i, l, f, d);
+*/
return (int)(b + h + i + l + f + d);
}
EXPORT(float) _testfunc_f_bhilfd(signed char b, short h, int i, long l, float f, double d)
{
-// printf("_testfunc_f_bhilfd got %d %d %d %ld %f %f\n",
-// b, h, i, l, f, d);
+/* printf("_testfunc_f_bhilfd got %d %d %d %ld %f %f\n",
+ b, h, i, l, f, d);
+*/
return (float)(b + h + i + l + f + d);
}
EXPORT(double) _testfunc_d_bhilfd(signed char b, short h, int i, long l, float f, double d)
{
-// printf("_testfunc_d_bhilfd got %d %d %d %ld %f %f\n",
-// b, h, i, l, f, d);
+/* printf("_testfunc_d_bhilfd got %d %d %d %ld %f %f\n",
+ b, h, i, l, f, d);
+*/
return (double)(b + h + i + l + f + d);
}
@@ -378,8 +381,9 @@ PyAPI_FUNC(int) unpack_bitfields(struct BITS *bits, char name)
}
PyMethodDef module_methods[] = {
-// {"get_last_tf_arg_s", get_last_tf_arg_s, METH_NOARGS},
-// {"get_last_tf_arg_u", get_last_tf_arg_u, METH_NOARGS},
+/* {"get_last_tf_arg_s", get_last_tf_arg_s, METH_NOARGS},
+ {"get_last_tf_arg_u", get_last_tf_arg_u, METH_NOARGS},
+*/
{"func_si", py_func_si, METH_VARARGS},
{"func", py_func, METH_NOARGS},
{ NULL, NULL, 0, NULL},
diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c
index bd1c9d3..591947e 100644
--- a/Modules/_randommodule.c
+++ b/Modules/_randommodule.c
@@ -481,7 +481,7 @@ random_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
RandomObject *self;
PyObject *tmp;
- if (!_PyArg_NoKeywords("Random()", kwds))
+ if (type == &Random_Type && !_PyArg_NoKeywords("Random()", kwds))
return NULL;
self = (RandomObject *)type->tp_alloc(type, 0);
diff --git a/Modules/_struct.c b/Modules/_struct.c
index 518a57e..3418c30 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -104,6 +104,15 @@ typedef struct { char c; PY_LONG_LONG x; } s_long_long;
#define LONG_LONG_ALIGN (sizeof(s_long_long) - sizeof(PY_LONG_LONG))
#endif
+#ifdef HAVE_C99_BOOL
+#define BOOL_TYPE _Bool
+typedef struct { char c; _Bool x; } s_bool;
+#define BOOL_ALIGN (sizeof(s_bool) - sizeof(BOOL_TYPE))
+#else
+#define BOOL_TYPE char
+#define BOOL_ALIGN 0
+#endif
+
#define STRINGIFY(x) #x
#ifdef __powerc
@@ -534,6 +543,15 @@ nu_ulonglong(const char *p, const formatdef *f)
#endif
static PyObject *
+nu_bool(const char *p, const formatdef *f)
+{
+ BOOL_TYPE x;
+ memcpy((char *)&x, p, sizeof x);
+ return PyBool_FromLong(x != 0);
+}
+
+
+static PyObject *
nu_float(const char *p, const formatdef *f)
{
float x;
@@ -709,6 +727,16 @@ np_ulonglong(char *p, PyObject *v, const formatdef *f)
}
#endif
+
+static int
+np_bool(char *p, PyObject *v, const formatdef *f)
+{
+ BOOL_TYPE y;
+ y = PyObject_IsTrue(v);
+ memcpy(p, (char *)&y, sizeof y);
+ return 0;
+}
+
static int
np_float(char *p, PyObject *v, const formatdef *f)
{
@@ -769,6 +797,7 @@ static formatdef native_table[] = {
{'q', sizeof(PY_LONG_LONG), LONG_LONG_ALIGN, nu_longlong, np_longlong},
{'Q', sizeof(PY_LONG_LONG), LONG_LONG_ALIGN, nu_ulonglong,np_ulonglong},
#endif
+ {'t', sizeof(BOOL_TYPE), BOOL_ALIGN, nu_bool, np_bool},
{'f', sizeof(float), FLOAT_ALIGN, nu_float, np_float},
{'d', sizeof(double), DOUBLE_ALIGN, nu_double, np_double},
{'P', sizeof(void *), VOID_P_ALIGN, nu_void_p, np_void_p},
@@ -863,6 +892,14 @@ bu_double(const char *p, const formatdef *f)
return unpack_double(p, 0);
}
+static PyObject *
+bu_bool(const char *p, const formatdef *f)
+{
+ char x;
+ memcpy((char *)&x, p, sizeof x);
+ return PyBool_FromLong(x != 0);
+}
+
static int
bp_int(char *p, PyObject *v, const formatdef *f)
{
@@ -967,6 +1004,15 @@ bp_double(char *p, PyObject *v, const formatdef *f)
return _PyFloat_Pack8(x, (unsigned char *)p, 0);
}
+static int
+bp_bool(char *p, PyObject *v, const formatdef *f)
+{
+ char y;
+ y = PyObject_IsTrue(v);
+ memcpy(p, (char *)&y, sizeof y);
+ return 0;
+}
+
static formatdef bigendian_table[] = {
{'x', 1, 0, NULL},
#ifdef PY_STRUCT_OVERFLOW_MASKING
@@ -988,6 +1034,7 @@ static formatdef bigendian_table[] = {
{'L', 4, 0, bu_uint, bp_uint},
{'q', 8, 0, bu_longlong, bp_longlong},
{'Q', 8, 0, bu_ulonglong, bp_ulonglong},
+ {'t', 1, 0, bu_bool, bp_bool},
{'f', 4, 0, bu_float, bp_float},
{'d', 8, 0, bu_double, bp_double},
{0}
@@ -1206,6 +1253,8 @@ static formatdef lilendian_table[] = {
{'L', 4, 0, lu_uint, lp_uint},
{'q', 8, 0, lu_longlong, lp_longlong},
{'Q', 8, 0, lu_ulonglong, lp_ulonglong},
+ {'t', 1, 0, bu_bool, bp_bool}, /* Std rep not endian dep,
+ but potentially different from native rep -- reuse bx_bool funcs. */
{'f', 4, 0, lu_float, lp_float},
{'d', 8, 0, lu_double, lp_double},
{0}
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 552f80c..3d8674c 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1797,7 +1797,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *initial = NULL, *it = NULL;
struct arraydescr *descr;
- if (!_PyArg_NoKeywords("array.array()", kwds))
+ if (type == &Arraytype && !_PyArg_NoKeywords("array.array()", kwds))
return NULL;
if (!PyArg_ParseTuple(args, "c|O:array", &c, &initial))
diff --git a/Modules/collectionsmodule.c b/Modules/collectionsmodule.c
index ca4b327..9fff7f0 100644
--- a/Modules/collectionsmodule.c
+++ b/Modules/collectionsmodule.c
@@ -95,7 +95,7 @@ deque_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
dequeobject *deque;
block *b;
- if (!_PyArg_NoKeywords("deque()", kwds))
+ if (type == &deque_type && !_PyArg_NoKeywords("deque()", kwds))
return NULL;
/* create dequeobject structure */
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 7fcbb10..7896143 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -681,7 +681,7 @@ cycle_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *saved;
cycleobject *lz;
- if (!_PyArg_NoKeywords("cycle()", kwds))
+ if (type == &cycle_type && !_PyArg_NoKeywords("cycle()", kwds))
return NULL;
if (!PyArg_UnpackTuple(args, "cycle", 1, 1, &iterable))
@@ -831,7 +831,7 @@ dropwhile_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *it;
dropwhileobject *lz;
- if (!_PyArg_NoKeywords("dropwhile()", kwds))
+ if (type == &dropwhile_type && !_PyArg_NoKeywords("dropwhile()", kwds))
return NULL;
if (!PyArg_UnpackTuple(args, "dropwhile", 2, 2, &func, &seq))
@@ -975,7 +975,7 @@ takewhile_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *it;
takewhileobject *lz;
- if (!_PyArg_NoKeywords("takewhile()", kwds))
+ if (type == &takewhile_type && !_PyArg_NoKeywords("takewhile()", kwds))
return NULL;
if (!PyArg_UnpackTuple(args, "takewhile", 2, 2, &func, &seq))
@@ -1120,7 +1120,7 @@ islice_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Py_ssize_t numargs;
isliceobject *lz;
- if (!_PyArg_NoKeywords("islice()", kwds))
+ if (type == &islice_type && !_PyArg_NoKeywords("islice()", kwds))
return NULL;
if (!PyArg_UnpackTuple(args, "islice", 2, 4, &seq, &a1, &a2, &a3))
@@ -1311,7 +1311,7 @@ starmap_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *it;
starmapobject *lz;
- if (!_PyArg_NoKeywords("starmap()", kwds))
+ if (type == &starmap_type && !_PyArg_NoKeywords("starmap()", kwds))
return NULL;
if (!PyArg_UnpackTuple(args, "starmap", 2, 2, &func, &seq))
@@ -1443,7 +1443,7 @@ imap_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
imapobject *lz;
Py_ssize_t numargs, i;
- if (!_PyArg_NoKeywords("imap()", kwds))
+ if (type == &imap_type && !_PyArg_NoKeywords("imap()", kwds))
return NULL;
numargs = PyTuple_Size(args);
@@ -1625,7 +1625,7 @@ chain_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Py_ssize_t i;
PyObject *ittuple;
- if (!_PyArg_NoKeywords("chain()", kwds))
+ if (type == &chain_type && !_PyArg_NoKeywords("chain()", kwds))
return NULL;
/* obtain iterators */
@@ -1768,7 +1768,7 @@ ifilter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *it;
ifilterobject *lz;
- if (!_PyArg_NoKeywords("ifilter()", kwds))
+ if (type == &ifilter_type && !_PyArg_NoKeywords("ifilter()", kwds))
return NULL;
if (!PyArg_UnpackTuple(args, "ifilter", 2, 2, &func, &seq))
@@ -1912,7 +1912,8 @@ ifilterfalse_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *it;
ifilterfalseobject *lz;
- if (!_PyArg_NoKeywords("ifilterfalse()", kwds))
+ if (type == &ifilterfalse_type &&
+ !_PyArg_NoKeywords("ifilterfalse()", kwds))
return NULL;
if (!PyArg_UnpackTuple(args, "ifilterfalse", 2, 2, &func, &seq))
@@ -2054,7 +2055,7 @@ count_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
countobject *lz;
Py_ssize_t cnt = 0;
- if (!_PyArg_NoKeywords("count()", kwds))
+ if (type == &count_type && !_PyArg_NoKeywords("count()", kwds))
return NULL;
if (!PyArg_ParseTuple(args, "|n:count", &cnt))
@@ -2153,7 +2154,7 @@ izip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *result;
Py_ssize_t tuplesize = PySequence_Length(args);
- if (!_PyArg_NoKeywords("izip()", kwds))
+ if (type == &izip_type && !_PyArg_NoKeywords("izip()", kwds))
return NULL;
/* args must be a tuple */
@@ -2336,7 +2337,7 @@ repeat_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *element;
Py_ssize_t cnt = -1;
- if (!_PyArg_NoKeywords("repeat()", kwds))
+ if (type == &repeat_type && !_PyArg_NoKeywords("repeat()", kwds))
return NULL;
if (!PyArg_ParseTuple(args, "O|n:repeat", &element, &cnt))