annotate Modules/_testcapimodule.c @ 79691:05c8928362ee

Merge __next__ method link fixes with 3.3.
author Ezio Melotti <ezio.melotti@gmail.com>
date Fri, 12 Oct 2012 13:46:37 +0300
parents 0fc259ac8733
children 0b5f00ccf907
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
1 /*
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2 * C Extension module to test Python interpreter C APIs.
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3 *
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
4 * The 'test_*' functions exported by this module are run as part of the
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
5 * standard Python regression test, via Lib/test/test_capi.py.
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
6 */
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
7
43697
ffaa6ce4bfb4 Try to get this test to pass on Win64 by making clean for ssize_t
Neal Norwitz <nnorwitz@gmail.com>
parents: 42997
diff changeset
8 #define PY_SSIZE_T_CLEAN
ffaa6ce4bfb4 Try to get this test to pass on Win64 by making clean for ssize_t
Neal Norwitz <nnorwitz@gmail.com>
parents: 42997
diff changeset
9
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
10 #include "Python.h"
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
11 #include <float.h>
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
12 #include "structmember.h"
57723
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
13 #include "datetime.h"
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
14
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
15 #ifdef WITH_THREAD
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
16 #include "pythread.h"
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
17 #endif /* WITH_THREAD */
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
18 static PyObject *TestError; /* set to exception object in init */
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
19
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
20 /* Raise TestError with test_name + ": " + msg, and return NULL. */
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
21
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
22 static PyObject *
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
23 raiseTestError(const char* test_name, const char* msg)
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
24 {
68809
4c2135930882 Issue #10833: Use PyErr_Format() and PyUnicode_FromFormat() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68805
diff changeset
25 PyErr_Format(TestError, "%s: %s", test_name, msg);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
26 return NULL;
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
27 }
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
28
18835
2dea40e40d9d Patch #411138: Rename config.h to pyconfig.h. Closes bug #231774.
Martin v. Löwis <martin@v.loewis.de>
parents: 18294
diff changeset
29 /* Test #defines from pyconfig.h (particularly the SIZEOF_* defines).
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
30
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
31 The ones derived from autoconf on the UNIX-like OSes can be relied
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
32 upon (in the absence of sloppy cross-compiling), but the Windows
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
33 platforms have these hardcoded. Better safe than sorry.
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
34 */
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
35 static PyObject*
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
36 sizeof_error(const char* fatname, const char* typname,
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
37 int expected, int got)
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
38 {
68805
74d3dc78f0db Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
39 PyErr_Format(TestError,
74d3dc78f0db Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
40 "%s #define == %d but sizeof(%s) == %d",
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
41 fatname, expected, typname, got);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
42 return (PyObject*)NULL;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
43 }
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
44
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
45 static PyObject*
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
46 test_config(PyObject *self)
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
47 {
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
48 #define CHECK_SIZEOF(FATNAME, TYPE) \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
49 if (FATNAME != sizeof(TYPE)) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
50 return sizeof_error(#FATNAME, #TYPE, FATNAME, sizeof(TYPE))
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
51
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
52 CHECK_SIZEOF(SIZEOF_SHORT, short);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
53 CHECK_SIZEOF(SIZEOF_INT, int);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
54 CHECK_SIZEOF(SIZEOF_LONG, long);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
55 CHECK_SIZEOF(SIZEOF_VOID_P, void*);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
56 CHECK_SIZEOF(SIZEOF_TIME_T, time_t);
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
57 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
58 CHECK_SIZEOF(SIZEOF_LONG_LONG, PY_LONG_LONG);
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
59 #endif
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
60
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
61 #undef CHECK_SIZEOF
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
62
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
63 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
64 return Py_None;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
65 }
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
66
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
67 static PyObject*
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
68 test_list_api(PyObject *self)
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
69 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
70 PyObject* list;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
71 int i;
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
72
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
73 /* SF bug 132008: PyList_Reverse segfaults */
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
74 #define NLIST 30
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
75 list = PyList_New(NLIST);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
76 if (list == (PyObject*)NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
77 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
78 /* list = range(NLIST) */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
79 for (i = 0; i < NLIST; ++i) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
80 PyObject* anint = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
81 if (anint == (PyObject*)NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
82 Py_DECREF(list);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
83 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
84 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
85 PyList_SET_ITEM(list, i, anint);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
86 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
87 /* list.reverse(), via PyList_Reverse() */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
88 i = PyList_Reverse(list); /* should not blow up! */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
89 if (i != 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
90 Py_DECREF(list);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
91 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
92 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
93 /* Check that list == range(29, -1, -1) now */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
94 for (i = 0; i < NLIST; ++i) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
95 PyObject* anint = PyList_GET_ITEM(list, i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
96 if (PyLong_AS_LONG(anint) != NLIST-1-i) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
97 PyErr_SetString(TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
98 "test_list_api: reverse screwed up");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
99 Py_DECREF(list);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
100 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
101 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
102 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
103 Py_DECREF(list);
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
104 #undef NLIST
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
105
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
106 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
107 return Py_None;
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
108 }
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
109
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
110 static int
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
111 test_dict_inner(int count)
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
112 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
113 Py_ssize_t pos = 0, iterations = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
114 int i;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
115 PyObject *dict = PyDict_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
116 PyObject *v, *k;
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
117
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
118 if (dict == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
119 return -1;
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
120
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
121 for (i = 0; i < count; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
122 v = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
123 PyDict_SetItem(dict, v, v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
124 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
125 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
126
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
127 while (PyDict_Next(dict, &pos, &k, &v)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
128 PyObject *o;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
129 iterations++;
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
130
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
131 i = PyLong_AS_LONG(v) + 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
132 o = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
133 if (o == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
134 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
135 if (PyDict_SetItem(dict, k, o) < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
136 Py_DECREF(o);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
137 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
138 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
139 Py_DECREF(o);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
140 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
141
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
142 Py_DECREF(dict);
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
143
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
144 if (iterations != count) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
145 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
146 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
147 "test_dict_iteration: dict iteration went wrong ");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
148 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
149 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
150 return 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
151 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
152 }
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
153
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
154 static PyObject*
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
155 test_dict_iteration(PyObject* self)
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
156 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
157 int i;
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
158
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
159 for (i = 0; i < 200; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
160 if (test_dict_inner(i) < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
161 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
162 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
163 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
164
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
165 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
166 return Py_None;
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
167 }
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
168
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
169
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
170 /* Issue #4701: Check that PyObject_Hash implicitly calls
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
171 * PyType_Ready if it hasn't already been called
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
172 */
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
173 static PyTypeObject _HashInheritanceTester_Type = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
174 PyVarObject_HEAD_INIT(NULL, 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
175 "hashinheritancetester", /* Name of this type */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
176 sizeof(PyObject), /* Basic object size */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
177 0, /* Item size for varobject */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
178 (destructor)PyObject_Del, /* tp_dealloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
179 0, /* tp_print */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
180 0, /* tp_getattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
181 0, /* tp_setattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
182 0, /* tp_reserved */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
183 0, /* tp_repr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
184 0, /* tp_as_number */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
185 0, /* tp_as_sequence */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
186 0, /* tp_as_mapping */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
187 0, /* tp_hash */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
188 0, /* tp_call */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
189 0, /* tp_str */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
190 PyObject_GenericGetAttr, /* tp_getattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
191 0, /* tp_setattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
192 0, /* tp_as_buffer */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
193 Py_TPFLAGS_DEFAULT, /* tp_flags */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
194 0, /* tp_doc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
195 0, /* tp_traverse */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
196 0, /* tp_clear */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
197 0, /* tp_richcompare */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
198 0, /* tp_weaklistoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
199 0, /* tp_iter */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
200 0, /* tp_iternext */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
201 0, /* tp_methods */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
202 0, /* tp_members */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
203 0, /* tp_getset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
204 0, /* tp_base */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
205 0, /* tp_dict */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
206 0, /* tp_descr_get */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
207 0, /* tp_descr_set */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
208 0, /* tp_dictoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
209 0, /* tp_init */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
210 0, /* tp_alloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
211 PyType_GenericNew, /* tp_new */
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
212 };
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
213
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
214 static PyObject*
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
215 test_lazy_hash_inheritance(PyObject* self)
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
216 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
217 PyTypeObject *type;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
218 PyObject *obj;
65610
b9dcfdffcb62 Issue #10185: use Py_hash_t instead of long
Antoine Pitrou <solipsis@pitrou.net>
parents: 65157
diff changeset
219 Py_hash_t hash;
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
220
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
221 type = &_HashInheritanceTester_Type;
53811
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
222
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
223 if (type->tp_dict != NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
224 /* The type has already been initialized. This probably means
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
225 -R is being used. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
226 Py_RETURN_NONE;
53811
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
227
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
228
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
229 obj = PyObject_New(PyObject, type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
230 if (obj == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
231 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
232 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
233 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
234 "test_lazy_hash_inheritance: failed to create object");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
235 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
236 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
237
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
238 if (type->tp_dict != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
239 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
240 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
241 "test_lazy_hash_inheritance: type initialised too soon");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
242 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
243 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
244 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
245
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
246 hash = PyObject_Hash(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
247 if ((hash == -1) && PyErr_Occurred()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
248 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
249 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
250 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
251 "test_lazy_hash_inheritance: could not hash object");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
252 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
253 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
254 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
255
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
256 if (type->tp_dict == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
257 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
258 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
259 "test_lazy_hash_inheritance: type not initialised by hash()");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
260 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
261 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
262 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
263
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
264 if (type->tp_hash != PyType_Type.tp_hash) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
265 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
266 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
267 "test_lazy_hash_inheritance: unexpected hash function");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
268 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
269 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
270 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
271
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
272 Py_DECREF(obj);
53811
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
273
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
274 Py_RETURN_NONE;
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
275 }
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
276
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
277
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
278 /* Tests of PyLong_{As, From}{Unsigned,}Long(), and (#ifdef HAVE_LONG_LONG)
18113
a4763bfed9f0 Fixed typo in comment.
Tim Peters <tim.peters@gmail.com>
parents: 18112
diff changeset
279 PyLong_{As, From}{Unsigned,}LongLong().
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
280
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
281 Note that the meat of the test is contained in testcapi_long.h.
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
282 This is revolting, but delicate code duplication is worse: "almost
28437
871da703e4c0 Rename LONG_LONG to PY_LONG_LONG. Fixes #710285.
Martin v. Löwis <martin@v.loewis.de>
parents: 27549
diff changeset
283 exactly the same" code is needed to test PY_LONG_LONG, but the ubiquitous
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
284 dependence on type names makes it impossible to use a parameterized
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
285 function. A giant macro would be even worse than this. A C++ template
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
286 would be perfect.
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
287
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
288 The "report an error" functions are deliberately not part of the #include
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
289 file: if the test fails, you can set a breakpoint in the appropriate
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
290 error function directly, and crawl back from there in the debugger.
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
291 */
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
292
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
293 #define UNBIND(X) Py_DECREF(X); (X) = NULL
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
294
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
295 static PyObject *
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
296 raise_test_long_error(const char* msg)
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
297 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
298 return raiseTestError("test_long_api", msg);
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
299 }
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
300
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
301 #define TESTNAME test_long_api_inner
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
302 #define TYPENAME long
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
303 #define F_S_TO_PY PyLong_FromLong
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
304 #define F_PY_TO_S PyLong_AsLong
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
305 #define F_U_TO_PY PyLong_FromUnsignedLong
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
306 #define F_PY_TO_U PyLong_AsUnsignedLong
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
307
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
308 #include "testcapi_long.h"
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
309
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
310 static PyObject *
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
311 test_long_api(PyObject* self)
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
312 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
313 return TESTNAME(raise_test_long_error);
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
314 }
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
315
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
316 #undef TESTNAME
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
317 #undef TYPENAME
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
318 #undef F_S_TO_PY
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
319 #undef F_PY_TO_S
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
320 #undef F_U_TO_PY
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
321 #undef F_PY_TO_U
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
322
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
323 #ifdef HAVE_LONG_LONG
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
324
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
325 static PyObject *
18093
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
326 raise_test_longlong_error(const char* msg)
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
327 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
328 return raiseTestError("test_longlong_api", msg);
18093
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
329 }
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
330
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
331 #define TESTNAME test_longlong_api_inner
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
332 #define TYPENAME PY_LONG_LONG
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
333 #define F_S_TO_PY PyLong_FromLongLong
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
334 #define F_PY_TO_S PyLong_AsLongLong
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
335 #define F_U_TO_PY PyLong_FromUnsignedLongLong
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
336 #define F_PY_TO_U PyLong_AsUnsignedLongLong
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
337
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
338 #include "testcapi_long.h"
18093
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
339
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
340 static PyObject *
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
341 test_longlong_api(PyObject* self, PyObject *args)
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
342 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
343 return TESTNAME(raise_test_longlong_error);
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
344 }
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
345
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
346 #undef TESTNAME
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
347 #undef TYPENAME
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
348 #undef F_S_TO_PY
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
349 #undef F_PY_TO_S
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
350 #undef F_U_TO_PY
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
351 #undef F_PY_TO_U
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
352
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
353 /* Test the PyLong_AsLongAndOverflow API. General conversion to PY_LONG
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
354 is tested by test_long_api_inner. This test will concentrate on proper
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
355 handling of overflow.
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
356 */
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
357
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
358 static PyObject *
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
359 test_long_and_overflow(PyObject *self)
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
360 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
361 PyObject *num, *one, *temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
362 long value;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
363 int overflow;
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
364
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
365 /* Test that overflow is set properly for a large value. */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
366 /* num is a number larger than LONG_MAX even on 64-bit platforms */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
367 num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
368 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
369 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
370 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
371 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
372 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
373 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
374 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
375 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
376 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
377 "return value was not set to -1");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
378 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
379 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
380 "overflow was not set to 1");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
381
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
382 /* Same again, with num = LONG_MAX + 1 */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
383 num = PyLong_FromLong(LONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
384 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
385 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
386 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
387 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
388 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
389 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
390 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
391 temp = PyNumber_Add(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
392 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
393 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
394 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
395 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
396 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
397 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
398 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
399 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
400 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
401 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
402 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
403 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
404 "return value was not set to -1");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
405 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
406 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
407 "overflow was not set to 1");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
408
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
409 /* Test that overflow is set properly for a large negative value. */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
410 /* num is a number smaller than LONG_MIN even on 64-bit platforms */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
411 num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
412 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
413 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
414 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
415 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
416 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
417 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
418 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
419 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
420 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
421 "return value was not set to -1");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
422 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
423 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
424 "overflow was not set to -1");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
425
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
426 /* Same again, with num = LONG_MIN - 1 */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
427 num = PyLong_FromLong(LONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
428 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
429 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
430 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
431 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
432 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
433 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
434 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
435 temp = PyNumber_Subtract(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
436 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
437 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
438 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
439 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
440 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
441 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
442 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
443 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
444 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
445 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
446 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
447 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
448 "return value was not set to -1");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
449 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
450 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
451 "overflow was not set to -1");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
452
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
453 /* Test that overflow is cleared properly for small values. */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
454 num = PyLong_FromString("FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
455 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
456 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
457 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
458 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
459 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
460 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
461 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
462 if (value != 0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
463 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
464 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
465 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
466 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
467 "overflow was not cleared");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
468
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
469 num = PyLong_FromString("-FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
470 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
471 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
472 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
473 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
474 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
475 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
476 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
477 if (value != -0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
478 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
479 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
480 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
481 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
482 "overflow was set incorrectly");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
483
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
484 num = PyLong_FromLong(LONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
485 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
486 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
487 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
488 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
489 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
490 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
491 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
492 if (value != LONG_MAX)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
493 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
494 "expected return value LONG_MAX");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
495 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
496 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
497 "overflow was not cleared");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
498
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
499 num = PyLong_FromLong(LONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
500 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
501 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
502 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
503 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
504 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
505 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
506 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
507 if (value != LONG_MIN)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
508 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
509 "expected return value LONG_MIN");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
510 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
511 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
512 "overflow was not cleared");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
513
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
514 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
515 return Py_None;
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
516 }
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
517
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
518 /* Test the PyLong_AsLongLongAndOverflow API. General conversion to
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
519 PY_LONG_LONG is tested by test_long_api_inner. This test will
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
520 concentrate on proper handling of overflow.
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
521 */
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
522
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
523 static PyObject *
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
524 test_long_long_and_overflow(PyObject *self)
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
525 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
526 PyObject *num, *one, *temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
527 PY_LONG_LONG value;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
528 int overflow;
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
529
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
530 /* Test that overflow is set properly for a large value. */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
531 /* num is a number larger than PY_LLONG_MAX on a typical machine. */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
532 num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
533 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
534 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
535 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
536 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
537 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
538 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
539 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
540 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
541 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
542 "return value was not set to -1");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
543 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
544 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
545 "overflow was not set to 1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
546
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
547 /* Same again, with num = PY_LLONG_MAX + 1 */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
548 num = PyLong_FromLongLong(PY_LLONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
549 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
550 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
551 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
552 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
553 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
554 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
555 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
556 temp = PyNumber_Add(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
557 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
558 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
559 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
560 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
561 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
562 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
563 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
564 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
565 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
566 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
567 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
568 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
569 "return value was not set to -1");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
570 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
571 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
572 "overflow was not set to 1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
573
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
574 /* Test that overflow is set properly for a large negative value. */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
575 /* num is a number smaller than PY_LLONG_MIN on a typical platform */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
576 num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
577 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
578 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
579 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
580 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
581 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
582 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
583 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
584 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
585 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
586 "return value was not set to -1");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
587 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
588 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
589 "overflow was not set to -1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
590
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
591 /* Same again, with num = PY_LLONG_MIN - 1 */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
592 num = PyLong_FromLongLong(PY_LLONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
593 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
594 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
595 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
596 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
597 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
598 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
599 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
600 temp = PyNumber_Subtract(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
601 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
602 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
603 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
604 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
605 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
606 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
607 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
608 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
609 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
610 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
611 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
612 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
613 "return value was not set to -1");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
614 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
615 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
616 "overflow was not set to -1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
617
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
618 /* Test that overflow is cleared properly for small values. */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
619 num = PyLong_FromString("FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
620 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
621 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
622 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
623 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
624 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
625 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
626 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
627 if (value != 0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
628 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
629 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
630 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
631 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
632 "overflow was not cleared");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
633
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
634 num = PyLong_FromString("-FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
635 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
636 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
637 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
638 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
639 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
640 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
641 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
642 if (value != -0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
643 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
644 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
645 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
646 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
647 "overflow was set incorrectly");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
648
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
649 num = PyLong_FromLongLong(PY_LLONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
650 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
651 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
652 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
653 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
654 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
655 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
656 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
657 if (value != PY_LLONG_MAX)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
658 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
659 "expected return value PY_LLONG_MAX");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
660 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
661 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
662 "overflow was not cleared");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
663
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
664 num = PyLong_FromLongLong(PY_LLONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
665 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
666 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
667 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
668 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
669 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
670 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
671 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
672 if (value != PY_LLONG_MIN)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
673 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
674 "expected return value PY_LLONG_MIN");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
675 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
676 return raiseTestError("test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
677 "overflow was not cleared");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
678
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
679 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
680 return Py_None;
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
681 }
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
682
72312
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
683 /* Test the PyLong_As{Size,Ssize}_t API. At present this just tests that
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
684 non-integer arguments are handled correctly. It should be extended to
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
685 test overflow handling.
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
686 */
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
687
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
688 static PyObject *
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
689 test_long_as_size_t(PyObject *self)
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
690 {
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
691 size_t out_u;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
692 Py_ssize_t out_s;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
693
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
694 Py_INCREF(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
695
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
696 out_u = PyLong_AsSize_t(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
697 if (out_u != (size_t)-1 || !PyErr_Occurred())
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
698 return raiseTestError("test_long_as_size_t",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
699 "PyLong_AsSize_t(None) didn't complain");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
700 if (!PyErr_ExceptionMatches(PyExc_TypeError))
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
701 return raiseTestError("test_long_as_size_t",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
702 "PyLong_AsSize_t(None) raised "
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
703 "something other than TypeError");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
704 PyErr_Clear();
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
705
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
706 out_s = PyLong_AsSsize_t(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
707 if (out_s != (Py_ssize_t)-1 || !PyErr_Occurred())
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
708 return raiseTestError("test_long_as_size_t",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
709 "PyLong_AsSsize_t(None) didn't complain");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
710 if (!PyErr_ExceptionMatches(PyExc_TypeError))
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
711 return raiseTestError("test_long_as_size_t",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
712 "PyLong_AsSsize_t(None) raised "
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
713 "something other than TypeError");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
714 PyErr_Clear();
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
715
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
716 /* Py_INCREF(Py_None) omitted - we already have a reference to it. */
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
717 return Py_None;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
718 }
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
719
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
720 /* Test the PyLong_AsDouble API. At present this just tests that
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
721 non-integer arguments are handled correctly.
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
722 */
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
723
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
724 static PyObject *
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
725 test_long_as_double(PyObject *self)
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
726 {
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
727 double out;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
728
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
729 Py_INCREF(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
730
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
731 out = PyLong_AsDouble(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
732 if (out != -1.0 || !PyErr_Occurred())
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
733 return raiseTestError("test_long_as_double",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
734 "PyLong_AsDouble(None) didn't complain");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
735 if (!PyErr_ExceptionMatches(PyExc_TypeError))
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
736 return raiseTestError("test_long_as_double",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
737 "PyLong_AsDouble(None) raised "
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
738 "something other than TypeError");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
739 PyErr_Clear();
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
740
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
741 /* Py_INCREF(Py_None) omitted - we already have a reference to it. */
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
742 return Py_None;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
743 }
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
744
28437
871da703e4c0 Rename LONG_LONG to PY_LONG_LONG. Fixes #710285.
Martin v. Löwis <martin@v.loewis.de>
parents: 27549
diff changeset
745 /* Test the L code for PyArg_ParseTuple. This should deliver a PY_LONG_LONG
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
746 for both long and int arguments. The test may leak a little memory if
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
747 it fails.
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
748 */
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
749 static PyObject *
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
750 test_L_code(PyObject *self)
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
751 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
752 PyObject *tuple, *num;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
753 PY_LONG_LONG value;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
754
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
755 tuple = PyTuple_New(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
756 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
757 return NULL;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
758
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
759 num = PyLong_FromLong(42);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
760 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
761 return NULL;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
762
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
763 PyTuple_SET_ITEM(tuple, 0, num);
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
764
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
765 value = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
766 if (PyArg_ParseTuple(tuple, "L:test_L_code", &value) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
767 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
768 if (value != 42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
769 return raiseTestError("test_L_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
770 "L code returned wrong value for long 42");
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
771
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
772 Py_DECREF(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
773 num = PyLong_FromLong(42);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
774 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
775 return NULL;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
776
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
777 PyTuple_SET_ITEM(tuple, 0, num);
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
778
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
779 value = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
780 if (PyArg_ParseTuple(tuple, "L:test_L_code", &value) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
781 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
782 if (value != 42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
783 return raiseTestError("test_L_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
784 "L code returned wrong value for int 42");
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
785
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
786 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
787 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
788 return Py_None;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
789 }
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
790
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
791 #endif /* ifdef HAVE_LONG_LONG */
18112
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
792
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
793 /* Test tuple argument processing */
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
794 static PyObject *
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
795 getargs_tuple(PyObject *self, PyObject *args)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
796 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
797 int a, b, c;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
798 if (!PyArg_ParseTuple(args, "i(ii)", &a, &b, &c))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
799 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
800 return Py_BuildValue("iii", a, b, c);
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
801 }
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
802
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44885
diff changeset
803 /* test PyArg_ParseTupleAndKeywords */
75842
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
804 static PyObject *
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
805 getargs_keywords(PyObject *self, PyObject *args, PyObject *kwargs)
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44885
diff changeset
806 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
807 static char *keywords[] = {"arg1","arg2","arg3","arg4","arg5", NULL};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
808 static char *fmt="(ii)i|(i(ii))(iii)i";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
809 int int_args[10]={-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44885
diff changeset
810
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
811 if (!PyArg_ParseTupleAndKeywords(args, kwargs, fmt, keywords,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
812 &int_args[0], &int_args[1], &int_args[2], &int_args[3], &int_args[4],
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
813 &int_args[5], &int_args[6], &int_args[7], &int_args[8], &int_args[9]))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
814 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
815 return Py_BuildValue("iiiiiiiiii",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
816 int_args[0], int_args[1], int_args[2], int_args[3], int_args[4],
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
817 int_args[5], int_args[6], int_args[7], int_args[8], int_args[9]);
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44885
diff changeset
818 }
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44885
diff changeset
819
75842
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
820 /* test PyArg_ParseTupleAndKeywords keyword-only arguments */
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
821 static PyObject *
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
822 getargs_keyword_only(PyObject *self, PyObject *args, PyObject *kwargs)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
823 {
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
824 static char *keywords[] = {"required", "optional", "keyword_only", NULL};
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
825 int required = -1;
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
826 int optional = -1;
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
827 int keyword_only = -1;
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
828
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
829 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i$i", keywords,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
830 &required, &optional, &keyword_only))
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
831 return NULL;
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
832 return Py_BuildValue("iii", required, optional, keyword_only);
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
833 }
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
834
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
835 /* Functions to call PyArg_ParseTuple with integer format codes,
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
836 and return the result.
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
837 */
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
838 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
839 getargs_b(PyObject *self, PyObject *args)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
840 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
841 unsigned char value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
842 if (!PyArg_ParseTuple(args, "b", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
843 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
844 return PyLong_FromUnsignedLong((unsigned long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
845 }
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
846
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
847 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
848 getargs_B(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
849 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
850 unsigned char value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
851 if (!PyArg_ParseTuple(args, "B", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
852 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
853 return PyLong_FromUnsignedLong((unsigned long)value);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
854 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
855
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
856 static PyObject *
57822
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
857 getargs_h(PyObject *self, PyObject *args)
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
858 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
859 short value;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
860 if (!PyArg_ParseTuple(args, "h", &value))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
861 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
862 return PyLong_FromLong((long)value);
57822
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
863 }
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
864
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
865 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
866 getargs_H(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
867 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
868 unsigned short value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
869 if (!PyArg_ParseTuple(args, "H", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
870 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
871 return PyLong_FromUnsignedLong((unsigned long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
872 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
873
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
874 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
875 getargs_I(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
876 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
877 unsigned int value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
878 if (!PyArg_ParseTuple(args, "I", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
879 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
880 return PyLong_FromUnsignedLong((unsigned long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
881 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
882
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
883 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
884 getargs_k(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
885 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
886 unsigned long value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
887 if (!PyArg_ParseTuple(args, "k", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
888 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
889 return PyLong_FromUnsignedLong(value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
890 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
891
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
892 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
893 getargs_i(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
894 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
895 int value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
896 if (!PyArg_ParseTuple(args, "i", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
897 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
898 return PyLong_FromLong((long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
899 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
900
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
901 static PyObject *
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
902 getargs_l(PyObject *self, PyObject *args)
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
903 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
904 long value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
905 if (!PyArg_ParseTuple(args, "l", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
906 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
907 return PyLong_FromLong(value);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
908 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
909
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
910 static PyObject *
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
911 getargs_n(PyObject *self, PyObject *args)
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
912 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
913 Py_ssize_t value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
914 if (!PyArg_ParseTuple(args, "n", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
915 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
916 return PyLong_FromSsize_t(value);
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
917 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
918
76776
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
919 static PyObject *
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
920 getargs_p(PyObject *self, PyObject *args)
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
921 {
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
922 int value;
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
923 if (!PyArg_ParseTuple(args, "p", &value))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
924 return NULL;
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
925 return PyLong_FromLong(value);
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
926 }
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
927
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
928 #ifdef HAVE_LONG_LONG
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
929 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
930 getargs_L(PyObject *self, PyObject *args)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
931 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
932 PY_LONG_LONG value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
933 if (!PyArg_ParseTuple(args, "L", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
934 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
935 return PyLong_FromLongLong(value);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
936 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
937
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
938 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
939 getargs_K(PyObject *self, PyObject *args)
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
940 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
941 unsigned PY_LONG_LONG value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
942 if (!PyArg_ParseTuple(args, "K", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
943 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
944 return PyLong_FromUnsignedLongLong(value);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
945 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
946 #endif
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
947
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
948 /* This function not only tests the 'k' getargs code, but also the
44099
f324631462a2 Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents: 43866
diff changeset
949 PyLong_AsUnsignedLongMask() and PyLong_AsUnsignedLongMask() functions. */
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
950 static PyObject *
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
951 test_k_code(PyObject *self)
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
952 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
953 PyObject *tuple, *num;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
954 unsigned long value;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
955
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
956 tuple = PyTuple_New(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
957 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
958 return NULL;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
959
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
960 /* a number larger than ULONG_MAX even on 64-bit platforms */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
961 num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
962 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
963 return NULL;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
964
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
965 value = PyLong_AsUnsignedLongMask(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
966 if (value != ULONG_MAX)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
967 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
968 "PyLong_AsUnsignedLongMask() returned wrong value for long 0xFFF...FFF");
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
969
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
970 PyTuple_SET_ITEM(tuple, 0, num);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
971
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
972 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
973 if (PyArg_ParseTuple(tuple, "k:test_k_code", &value) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
974 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
975 if (value != ULONG_MAX)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
976 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
977 "k code returned wrong value for long 0xFFF...FFF");
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
978
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
979 Py_DECREF(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
980 num = PyLong_FromString("-FFFFFFFF000000000000000042", NULL, 16);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
981 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
982 return NULL;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
983
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
984 value = PyLong_AsUnsignedLongMask(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
985 if (value != (unsigned long)-0x42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
986 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
987 "PyLong_AsUnsignedLongMask() returned wrong value for long 0xFFF...FFF");
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
988
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
989 PyTuple_SET_ITEM(tuple, 0, num);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
990
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
991 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
992 if (PyArg_ParseTuple(tuple, "k:test_k_code", &value) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
993 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
994 if (value != (unsigned long)-0x42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
995 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
996 "k code returned wrong value for long -0xFFF..000042");
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
997
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
998 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
999 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1000 return Py_None;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1001 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1002
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1003 static PyObject *
71543
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1004 getargs_c(PyObject *self, PyObject *args)
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1005 {
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1006 char c;
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1007 if (!PyArg_ParseTuple(args, "c", &c))
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1008 return NULL;
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1009 return PyBytes_FromStringAndSize(&c, 1);
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1010 }
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1011
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1012 static PyObject *
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1013 getargs_s(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1014 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1015 char *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1016 if (!PyArg_ParseTuple(args, "s", &str))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1017 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1018 return PyBytes_FromString(str);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1019 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1020
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1021 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1022 getargs_s_star(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1023 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1024 Py_buffer buffer;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1025 PyObject *bytes;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1026 if (!PyArg_ParseTuple(args, "s*", &buffer))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1027 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1028 bytes = PyBytes_FromStringAndSize(buffer.buf, buffer.len);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1029 PyBuffer_Release(&buffer);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1030 return bytes;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1031 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1032
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1033 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1034 getargs_s_hash(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1035 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1036 char *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1037 Py_ssize_t size;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1038 if (!PyArg_ParseTuple(args, "s#", &str, &size))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1039 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1040 return PyBytes_FromStringAndSize(str, size);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1041 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1042
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1043 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1044 getargs_z(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1045 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1046 char *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1047 if (!PyArg_ParseTuple(args, "z", &str))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1048 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1049 if (str != NULL)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1050 return PyBytes_FromString(str);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1051 else
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1052 Py_RETURN_NONE;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1053 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1054
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1055 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1056 getargs_z_star(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1057 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1058 Py_buffer buffer;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1059 PyObject *bytes;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1060 if (!PyArg_ParseTuple(args, "z*", &buffer))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1061 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1062 if (buffer.buf != NULL)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1063 bytes = PyBytes_FromStringAndSize(buffer.buf, buffer.len);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1064 else {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1065 Py_INCREF(Py_None);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1066 bytes = Py_None;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1067 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1068 PyBuffer_Release(&buffer);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1069 return bytes;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1070 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1071
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1072 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1073 getargs_z_hash(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1074 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1075 char *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1076 Py_ssize_t size;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1077 if (!PyArg_ParseTuple(args, "z#", &str, &size))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1078 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1079 if (str != NULL)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1080 return PyBytes_FromStringAndSize(str, size);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1081 else
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1082 Py_RETURN_NONE;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1083 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1084
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1085 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1086 getargs_y(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1087 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1088 char *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1089 if (!PyArg_ParseTuple(args, "y", &str))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1090 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1091 return PyBytes_FromString(str);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1092 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1093
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1094 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1095 getargs_y_star(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1096 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1097 Py_buffer buffer;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1098 PyObject *bytes;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1099 if (!PyArg_ParseTuple(args, "y*", &buffer))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1100 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1101 bytes = PyBytes_FromStringAndSize(buffer.buf, buffer.len);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1102 PyBuffer_Release(&buffer);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1103 return bytes;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1104 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1105
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1106 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1107 getargs_y_hash(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1108 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1109 char *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1110 Py_ssize_t size;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1111 if (!PyArg_ParseTuple(args, "y#", &str, &size))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1112 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1113 return PyBytes_FromStringAndSize(str, size);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1114 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1115
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1116 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1117 getargs_u(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1118 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1119 Py_UNICODE *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1120 Py_ssize_t size;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1121 if (!PyArg_ParseTuple(args, "u", &str))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1122 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1123 size = Py_UNICODE_strlen(str);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1124 return PyUnicode_FromUnicode(str, size);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1125 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1126
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1127 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1128 getargs_u_hash(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1129 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1130 Py_UNICODE *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1131 Py_ssize_t size;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1132 if (!PyArg_ParseTuple(args, "u#", &str, &size))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1133 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1134 return PyUnicode_FromUnicode(str, size);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1135 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1136
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1137 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1138 getargs_Z(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1139 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1140 Py_UNICODE *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1141 Py_ssize_t size;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1142 if (!PyArg_ParseTuple(args, "Z", &str))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1143 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1144 if (str != NULL) {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1145 size = Py_UNICODE_strlen(str);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1146 return PyUnicode_FromUnicode(str, size);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1147 } else
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1148 Py_RETURN_NONE;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1149 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1150
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1151 static PyObject *
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1152 getargs_Z_hash(PyObject *self, PyObject *args)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1153 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1154 Py_UNICODE *str;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1155 Py_ssize_t size;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1156 if (!PyArg_ParseTuple(args, "Z#", &str, &size))
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1157 return NULL;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1158 if (str != NULL)
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1159 return PyUnicode_FromUnicode(str, size);
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1160 else
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1161 Py_RETURN_NONE;
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1162 }
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1163
46944
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1164 /* Test the s and z codes for PyArg_ParseTuple.
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1165 */
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1166 static PyObject *
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1167 test_s_code(PyObject *self)
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1168 {
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1169 /* Unicode strings should be accepted */
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1170 PyObject *tuple, *obj;
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1171 char *value;
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1172
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1173 tuple = PyTuple_New(1);
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1174 if (tuple == NULL)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1175 return NULL;
46944
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1176
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1177 obj = PyUnicode_Decode("t\xeate", strlen("t\xeate"),
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1178 "latin-1", NULL);
46944
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1179 if (obj == NULL)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1180 return NULL;
46944
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1181
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1182 PyTuple_SET_ITEM(tuple, 0, obj);
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1183
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1184 /* These two blocks used to raise a TypeError:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1185 * "argument must be string without null bytes, not str"
46944
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1186 */
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1187 if (PyArg_ParseTuple(tuple, "s:test_s_code1", &value) < 0)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1188 return NULL;
46944
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1189
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1190 if (PyArg_ParseTuple(tuple, "z:test_s_code2", &value) < 0)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1191 return NULL;
46944
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1192
47062
87a79352342c Fixed refleak in _testcapi.test_s_code.
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46944
diff changeset
1193 Py_DECREF(tuple);
46944
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1194 Py_RETURN_NONE;
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1195 }
ba23fc157618 #2798: PyArg_ParseTuple did not correctly handle the "s" code in case of unicode strings
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46664
diff changeset
1196
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1197 static PyObject *
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1198 parse_tuple_and_keywords(PyObject *self, PyObject *args)
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1199 {
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1200 PyObject *sub_args;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1201 PyObject *sub_kwargs;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1202 char *sub_format;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1203 PyObject *sub_keywords;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1204
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1205 Py_ssize_t i, size;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1206 char *keywords[8 + 1]; /* space for NULL at end */
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1207 PyObject *o;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1208 PyObject *converted[8];
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1209
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1210 int result;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1211 PyObject *return_value = NULL;
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1212
78466
efb30bdcfa1e Issue #15589: Ensure double-alignment for brute-force capi argument parser test
Larry Hastings <larry@hastings.org>
parents: 77567
diff changeset
1213 double buffers[8][4]; /* double ensures alignment where necessary */
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1214
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1215 if (!PyArg_ParseTuple(args, "OOyO:parse_tuple_and_keywords",
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1216 &sub_args, &sub_kwargs,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1217 &sub_format, &sub_keywords))
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1218 return NULL;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1219
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1220 if (!(PyList_CheckExact(sub_keywords) || PyTuple_CheckExact(sub_keywords))) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1221 PyErr_SetString(PyExc_ValueError,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1222 "parse_tuple_and_keywords: sub_keywords must be either list or tuple");
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1223 return NULL;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1224 }
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1225
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1226 memset(buffers, 0, sizeof(buffers));
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1227 memset(converted, 0, sizeof(converted));
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1228 memset(keywords, 0, sizeof(keywords));
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1229
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1230 size = PySequence_Fast_GET_SIZE(sub_keywords);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1231 if (size > 8) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1232 PyErr_SetString(PyExc_ValueError,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1233 "parse_tuple_and_keywords: too many keywords in sub_keywords");
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1234 goto exit;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1235 }
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1236
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1237 for (i = 0; i < size; i++) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1238 o = PySequence_Fast_GET_ITEM(sub_keywords, i);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1239 if (!PyUnicode_FSConverter(o, (void *)(converted + i))) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1240 PyErr_Format(PyExc_ValueError,
79452
0fc259ac8733 Closes #16126: PyErr_Format format mismatch in _testcapimodule.c
Jesus Cea <jcea@jcea.es>
parents: 78466
diff changeset
1241 "parse_tuple_and_keywords: could not convert keywords[%zd] to narrow string", i);
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1242 goto exit;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1243 }
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1244 keywords[i] = PyBytes_AS_STRING(converted[i]);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1245 }
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1246
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1247 result = PyArg_ParseTupleAndKeywords(sub_args, sub_kwargs,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1248 sub_format, keywords,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1249 buffers + 0, buffers + 1, buffers + 2, buffers + 3,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1250 buffers + 4, buffers + 5, buffers + 6, buffers + 7);
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1251
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1252 if (result) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1253 return_value = Py_None;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1254 Py_INCREF(Py_None);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1255 }
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1256
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1257 exit:
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1258 size = sizeof(converted) / sizeof(converted[0]);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1259 for (i = 0; i < size; i++) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1260 Py_XDECREF(converted[i]);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1261 }
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1262 return return_value;
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1263 }
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1264
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1265 static volatile int x;
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1266
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1267 /* Test the u and u# codes for PyArg_ParseTuple. May leak memory in case
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1268 of an error.
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1269 */
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1270 static PyObject *
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
1271 test_u_code(PyObject *self)
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1272 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1273 PyObject *tuple, *obj;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1274 Py_UNICODE *value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1275 Py_ssize_t len;
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1276
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1277 /* issue4122: Undefined reference to _Py_ascii_whitespace on Windows */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1278 /* Just use the macro and check that it compiles */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1279 x = Py_UNICODE_ISSPACE(25);
49553
3ff7bb830519 Merged revisions 66887,66891,66902-66903,66905-66906,66911-66913,66922,66927-66928,66936,66939-66940,66962,66964,66973 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49535
diff changeset
1280
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1281 tuple = PyTuple_New(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1282 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1283 return NULL;
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1284
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1285 obj = PyUnicode_Decode("test", strlen("test"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1286 "ascii", NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1287 if (obj == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1288 return NULL;
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1289
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1290 PyTuple_SET_ITEM(tuple, 0, obj);
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1291
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1292 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1293 if (PyArg_ParseTuple(tuple, "u:test_u_code", &value) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1294 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1295 if (value != PyUnicode_AS_UNICODE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1296 return raiseTestError("test_u_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1297 "u code returned wrong value for u'test'");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1298 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1299 if (PyArg_ParseTuple(tuple, "u#:test_u_code", &value, &len) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1300 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1301 if (value != PyUnicode_AS_UNICODE(obj) ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1302 len != PyUnicode_GET_SIZE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1303 return raiseTestError("test_u_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1304 "u# code returned wrong values for u'test'");
27487
0904d878b8f1 Added new private API function _PyLong_NumBits. This will be used at the
Tim Peters <tim.peters@gmail.com>
parents: 24363
diff changeset
1305
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1306 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1307 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1308 return Py_None;
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1309 }
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1310
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1311 /* Test Z and Z# codes for PyArg_ParseTuple */
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1312 static PyObject *
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1313 test_Z_code(PyObject *self)
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1314 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1315 PyObject *tuple, *obj;
72475
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 72312
diff changeset
1316 const Py_UNICODE *value1, *value2;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1317 Py_ssize_t len1, len2;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1318
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1319 tuple = PyTuple_New(2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1320 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1321 return NULL;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1322
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1323 obj = PyUnicode_FromString("test");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1324 PyTuple_SET_ITEM(tuple, 0, obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1325 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1326 PyTuple_SET_ITEM(tuple, 1, Py_None);
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1327
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1328 /* swap values on purpose */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1329 value1 = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1330 value2 = PyUnicode_AS_UNICODE(obj);
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1331
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1332 /* Test Z for both values */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1333 if (PyArg_ParseTuple(tuple, "ZZ:test_Z_code", &value1, &value2) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1334 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1335 if (value1 != PyUnicode_AS_UNICODE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1336 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1337 "Z code returned wrong value for 'test'");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1338 if (value2 != NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1339 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1340 "Z code returned wrong value for None");
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1341
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1342 value1 = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1343 value2 = PyUnicode_AS_UNICODE(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1344 len1 = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1345 len2 = -1;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1346
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1347 /* Test Z# for both values */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1348 if (PyArg_ParseTuple(tuple, "Z#Z#:test_Z_code", &value1, &len1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1349 &value2, &len2) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1350 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1351 if (value1 != PyUnicode_AS_UNICODE(obj) ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1352 len1 != PyUnicode_GET_SIZE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1353 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1354 "Z# code returned wrong values for 'test'");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1355 if (value2 != NULL ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1356 len2 != 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1357 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1358 "Z# code returned wrong values for None'");
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1359
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1360 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1361 Py_RETURN_NONE;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1362 }
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1363
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1364 static PyObject *
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1365 test_widechar(PyObject *self)
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1366 {
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1367 #if defined(SIZEOF_WCHAR_T) && (SIZEOF_WCHAR_T == 4)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1368 const wchar_t wtext[2] = {(wchar_t)0x10ABCDu};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1369 size_t wtextlen = 1;
73906
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1370 const wchar_t invalid[1] = {(wchar_t)0x110000u};
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1371 #else
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1372 const wchar_t wtext[3] = {(wchar_t)0xDBEAu, (wchar_t)0xDFCDu};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1373 size_t wtextlen = 2;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1374 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1375 PyObject *wide, *utf8;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1376
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1377 wide = PyUnicode_FromWideChar(wtext, wtextlen);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1378 if (wide == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1379 return NULL;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1380
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1381 utf8 = PyUnicode_FromString("\xf4\x8a\xaf\x8d");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1382 if (utf8 == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1383 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1384 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1385 }
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1386
73651
893b16723c9f test_widechar() uses the new Unicode API
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73642
diff changeset
1387 if (PyUnicode_GET_LENGTH(wide) != PyUnicode_GET_LENGTH(utf8)) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1388 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1389 Py_DECREF(utf8);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1390 return raiseTestError("test_widechar",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1391 "wide string and utf8 string "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1392 "have different length");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1393 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1394 if (PyUnicode_Compare(wide, utf8)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1395 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1396 Py_DECREF(utf8);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1397 if (PyErr_Occurred())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1398 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1399 return raiseTestError("test_widechar",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1400 "wide string and utf8 string "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1401 "are different");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1402 }
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1403
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1404 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1405 Py_DECREF(utf8);
73906
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1406
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1407 #if defined(SIZEOF_WCHAR_T) && (SIZEOF_WCHAR_T == 4)
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1408 wide = PyUnicode_FromWideChar(invalid, 1);
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1409 if (wide == NULL)
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1410 PyErr_Clear();
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1411 else
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1412 return raiseTestError("test_widechar",
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1413 "PyUnicode_FromWideChar(L\"\\U00110000\", 1) didn't fail");
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1414
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1415 wide = PyUnicode_FromUnicode(invalid, 1);
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1416 if (wide == NULL)
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1417 PyErr_Clear();
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1418 else
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1419 return raiseTestError("test_widechar",
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1420 "PyUnicode_FromUnicode(L\"\\U00110000\", 1) didn't fail");
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1421 #endif
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1422
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1423 Py_RETURN_NONE;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1424 }
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1425
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1426 static PyObject *
65059
8de535def122 Issue #8670: Rename testcapi unicode test methods
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65058
diff changeset
1427 unicode_aswidechar(PyObject *self, PyObject *args)
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1428 {
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1429 PyObject *unicode, *result;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1430 Py_ssize_t buflen, size;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1431 wchar_t *buffer;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1432
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1433 if (!PyArg_ParseTuple(args, "Un", &unicode, &buflen))
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1434 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1435 buffer = PyMem_Malloc(buflen * sizeof(wchar_t));
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1436 if (buffer == NULL)
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1437 return PyErr_NoMemory();
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1438
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66104
diff changeset
1439 size = PyUnicode_AsWideChar(unicode, buffer, buflen);
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1440 if (size == -1) {
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1441 PyMem_Free(buffer);
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1442 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1443 }
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1444
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1445 if (size < buflen)
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1446 buflen = size + 1;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1447 else
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1448 buflen = size;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1449 result = PyUnicode_FromWideChar(buffer, buflen);
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1450 PyMem_Free(buffer);
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1451 if (result == NULL)
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1452 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1453
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1454 return Py_BuildValue("(Nn)", result, size);
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1455 }
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1456
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1457 static PyObject *
65059
8de535def122 Issue #8670: Rename testcapi unicode test methods
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65058
diff changeset
1458 unicode_aswidecharstring(PyObject *self, PyObject *args)
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1459 {
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1460 PyObject *unicode, *result;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1461 Py_ssize_t size;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1462 wchar_t *buffer;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1463
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1464 if (!PyArg_ParseTuple(args, "U", &unicode))
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1465 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1466
65157
e3ae5b00ba15 PyUnicode_AsWideCharString() takes a PyObject*, not a PyUnicodeObject*
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65059
diff changeset
1467 buffer = PyUnicode_AsWideCharString(unicode, &size);
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1468 if (buffer == NULL)
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1469 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1470
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1471 result = PyUnicode_FromWideChar(buffer, size + 1);
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1472 PyMem_Free(buffer);
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1473 if (result == NULL)
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1474 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1475 return Py_BuildValue("(Nn)", result, size);
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1476 }
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1477
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1478 static PyObject *
73680
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1479 unicode_encodedecimal(PyObject *self, PyObject *args)
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1480 {
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1481 Py_UNICODE *unicode;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1482 Py_ssize_t length;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1483 char *errors = NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1484 PyObject *decimal;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1485 Py_ssize_t decimal_length, new_length;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1486 int res;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1487
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1488 if (!PyArg_ParseTuple(args, "u#|s", &unicode, &length, &errors))
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1489 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1490
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1491 decimal_length = length * 7; /* len('&#8364;') */
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1492 decimal = PyBytes_FromStringAndSize(NULL, decimal_length);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1493 if (decimal == NULL)
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1494 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1495
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1496 res = PyUnicode_EncodeDecimal(unicode, length,
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1497 PyBytes_AS_STRING(decimal),
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1498 errors);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1499 if (res < 0) {
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1500 Py_DECREF(decimal);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1501 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1502 }
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1503
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1504 new_length = strlen(PyBytes_AS_STRING(decimal));
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1505 assert(new_length <= decimal_length);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1506 res = _PyBytes_Resize(&decimal, new_length);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1507 if (res < 0)
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1508 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1509
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1510 return decimal;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1511 }
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1512
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1513 static PyObject *
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1514 unicode_transformdecimaltoascii(PyObject *self, PyObject *args)
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1515 {
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1516 Py_UNICODE *unicode;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1517 Py_ssize_t length;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1518 if (!PyArg_ParseTuple(args, "u#|s", &unicode, &length))
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1519 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1520 return PyUnicode_TransformDecimalToASCII(unicode, length);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1521 }
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1522
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1523 static PyObject *
62484
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1524 getargs_w_star(PyObject *self, PyObject *args)
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1525 {
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1526 Py_buffer buffer;
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1527 PyObject *result;
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1528 char *str;
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1529
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1530 if (!PyArg_ParseTuple(args, "w*:getargs_w_star", &buffer))
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1531 return NULL;
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1532
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1533 if (2 <= buffer.len) {
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1534 str = buffer.buf;
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1535 str[0] = '[';
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1536 str[buffer.len-1] = ']';
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1537 }
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1538
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1539 result = PyBytes_FromStringAndSize(buffer.buf, buffer.len);
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1540 PyBuffer_Release(&buffer);
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1541 return result;
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1542 }
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1543
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1544
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1545 static PyObject *
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1546 test_empty_argparse(PyObject *self)
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1547 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1548 /* Test that formats can begin with '|'. See issue #4720. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1549 PyObject *tuple, *dict = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1550 static char *kwlist[] = {NULL};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1551 int result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1552 tuple = PyTuple_New(0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1553 if (!tuple)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1554 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1555 if ((result = PyArg_ParseTuple(tuple, "|:test_empty_argparse")) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1556 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1557 dict = PyDict_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1558 if (!dict)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1559 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1560 result = PyArg_ParseTupleAndKeywords(tuple, dict, "|:test_empty_argparse", kwlist);
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1561 done:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1562 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1563 Py_XDECREF(dict);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1564 if (result < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1565 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1566 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1567 Py_RETURN_NONE;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1568 }
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1569 }
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1570
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1571 static PyObject *
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1572 codec_incrementalencoder(PyObject *self, PyObject *args)
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1573 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1574 const char *encoding, *errors = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1575 if (!PyArg_ParseTuple(args, "s|s:test_incrementalencoder",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1576 &encoding, &errors))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1577 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1578 return PyCodec_IncrementalEncoder(encoding, errors);
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1579 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1580
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1581 static PyObject *
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1582 codec_incrementaldecoder(PyObject *self, PyObject *args)
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1583 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1584 const char *encoding, *errors = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1585 if (!PyArg_ParseTuple(args, "s|s:test_incrementaldecoder",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1586 &encoding, &errors))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1587 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1588 return PyCodec_IncrementalDecoder(encoding, errors);
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1589 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1590
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1591
27549
7fcdeeb16ec0 _PyLong_NumBits(): The definition of this was too specific to the quirky
Tim Peters <tim.peters@gmail.com>
parents: 27487
diff changeset
1592 /* Simple test of _PyLong_NumBits and _PyLong_Sign. */
27487
0904d878b8f1 Added new private API function _PyLong_NumBits. This will be used at the
Tim Peters <tim.peters@gmail.com>
parents: 24363
diff changeset
1593 static PyObject *
0904d878b8f1 Added new private API function _PyLong_NumBits. This will be used at the
Tim Peters <tim.peters@gmail.com>
parents: 24363
diff changeset
1594 test_long_numbits(PyObject *self)
0904d878b8f1 Added new private API function _PyLong_NumBits. This will be used at the
Tim Peters <tim.peters@gmail.com>
parents: 24363
diff changeset
1595 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1596 struct triple {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1597 long input;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1598 size_t nbits;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1599 int sign;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1600 } testcases[] = {{0, 0, 0},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1601 {1L, 1, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1602 {-1L, 1, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1603 {2L, 2, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1604 {-2L, 2, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1605 {3L, 2, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1606 {-3L, 2, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1607 {4L, 3, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1608 {-4L, 3, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1609 {0x7fffL, 15, 1}, /* one Python long digit */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1610 {-0x7fffL, 15, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1611 {0xffffL, 16, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1612 {-0xffffL, 16, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1613 {0xfffffffL, 28, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1614 {-0xfffffffL, 28, -1}};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1615 int i;
27487
0904d878b8f1 Added new private API function _PyLong_NumBits. This will be used at the
Tim Peters <tim.peters@gmail.com>
parents: 24363
diff changeset
1616
72510
b534b56379cb Use the new Py_ARRAY_LENGTH macro
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72475
diff changeset
1617 for (i = 0; i < Py_ARRAY_LENGTH(testcases); ++i) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1618 PyObject *plong = PyLong_FromLong(testcases[i].input);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1619 size_t nbits = _PyLong_NumBits(plong);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1620 int sign = _PyLong_Sign(plong);
27487
0904d878b8f1 Added new private API function _PyLong_NumBits. This will be used at the
Tim Peters <tim.peters@gmail.com>
parents: 24363
diff changeset
1621
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1622 Py_DECREF(plong);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1623 if (nbits != testcases[i].nbits)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1624 return raiseTestError("test_long_numbits",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1625 "wrong result for _PyLong_NumBits");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1626 if (sign != testcases[i].sign)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1627 return raiseTestError("test_long_numbits",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1628 "wrong result for _PyLong_Sign");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1629 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1630 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1631 return Py_None;
27487
0904d878b8f1 Added new private API function _PyLong_NumBits. This will be used at the
Tim Peters <tim.peters@gmail.com>
parents: 24363
diff changeset
1632 }
0904d878b8f1 Added new private API function _PyLong_NumBits. This will be used at the
Tim Peters <tim.peters@gmail.com>
parents: 24363
diff changeset
1633
43866
8ed0280c2ab6 Replace PyObject_Unicode with PyObject_Str everywhere, and remove the
Thomas Heller <theller@ctypes.org>
parents: 43697
diff changeset
1634 /* Example passing NULLs to PyObject_Str(NULL). */
37875
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 36501
diff changeset
1635
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 36501
diff changeset
1636 static PyObject *
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 36501
diff changeset
1637 test_null_strings(PyObject *self)
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 36501
diff changeset
1638 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1639 PyObject *o1 = PyObject_Str(NULL), *o2 = PyObject_Str(NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1640 PyObject *tuple = PyTuple_Pack(2, o1, o2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1641 Py_XDECREF(o1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1642 Py_XDECREF(o2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1643 return tuple;
37875
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 36501
diff changeset
1644 }
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 36501
diff changeset
1645
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1646 static PyObject *
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1647 raise_exception(PyObject *self, PyObject *args)
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1648 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1649 PyObject *exc;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1650 PyObject *exc_args, *v;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1651 int num_args, i;
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1652
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1653 if (!PyArg_ParseTuple(args, "Oi:raise_exception",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1654 &exc, &num_args))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1655 return NULL;
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1656
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1657 exc_args = PyTuple_New(num_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1658 if (exc_args == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1659 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1660 for (i = 0; i < num_args; ++i) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1661 v = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1662 if (v == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1663 Py_DECREF(exc_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1664 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1665 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1666 PyTuple_SET_ITEM(exc_args, i, v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1667 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1668 PyErr_SetObject(exc, exc_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1669 Py_DECREF(exc_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1670 return NULL;
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1671 }
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
1672
76418
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1673 static PyObject *
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1674 test_set_exc_info(PyObject *self, PyObject *args)
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1675 {
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1676 PyObject *orig_exc;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1677 PyObject *new_type, *new_value, *new_tb;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1678 PyObject *type, *value, *tb;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1679 if (!PyArg_ParseTuple(args, "OOO:test_set_exc_info",
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1680 &new_type, &new_value, &new_tb))
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1681 return NULL;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1682
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1683 PyErr_GetExcInfo(&type, &value, &tb);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1684
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1685 Py_INCREF(new_type);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1686 Py_INCREF(new_value);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1687 Py_INCREF(new_tb);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1688 PyErr_SetExcInfo(new_type, new_value, new_tb);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1689
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1690 orig_exc = PyTuple_Pack(3, type ? type : Py_None, value ? value : Py_None, tb ? tb : Py_None);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1691 Py_XDECREF(type);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1692 Py_XDECREF(value);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1693 Py_XDECREF(tb);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1694 return orig_exc;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1695 }
58661
9b351cb9ef98 Merged revisions 77866-77867 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58645
diff changeset
1696
9b351cb9ef98 Merged revisions 77866-77867 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58645
diff changeset
1697 static int test_run_counter = 0;
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1698
57723
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1699 static PyObject *
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1700 test_datetime_capi(PyObject *self, PyObject *args) {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1701 if (PyDateTimeAPI) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1702 if (test_run_counter) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1703 /* Probably regrtest.py -R */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1704 Py_RETURN_NONE;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1705 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1706 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1707 PyErr_SetString(PyExc_AssertionError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1708 "PyDateTime_CAPI somehow initialized");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1709 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1710 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1711 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1712 test_run_counter++;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1713 PyDateTime_IMPORT;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1714 if (PyDateTimeAPI)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1715 Py_RETURN_NONE;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1716 else
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1717 return NULL;
57723
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1718 }
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1719
58661
9b351cb9ef98 Merged revisions 77866-77867 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58645
diff changeset
1720
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1721 #ifdef WITH_THREAD
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1722
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1723 /* test_thread_state spawns a thread of its own, and that thread releases
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1724 * `thread_done` when it's finished. The driver code has to know when the
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1725 * thread finishes, because the thread uses a PyObject (the callable) that
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1726 * may go away when the driver finishes. The former lack of this explicit
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1727 * synchronization caused rare segfaults, so rare that they were seen only
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1728 * on a Mac buildbot (although they were possible on any box).
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1729 */
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1730 static PyThread_type_lock thread_done = NULL;
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1731
48870
82f73b0b5a30 Merged revisions 65910,65977,65980,65984,65986,66000,66011-66012,66014,66017,66020 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48842
diff changeset
1732 static int
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1733 _make_call(void *callable)
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1734 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1735 PyObject *rc;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1736 int success;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1737 PyGILState_STATE s = PyGILState_Ensure();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1738 rc = PyObject_CallFunction((PyObject *)callable, "");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1739 success = (rc != NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1740 Py_XDECREF(rc);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1741 PyGILState_Release(s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1742 return success;
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1743 }
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1744
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1745 /* Same thing, but releases `thread_done` when it returns. This variant
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1746 * should be called only from threads spawned by test_thread_state().
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1747 */
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1748 static void
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1749 _make_call_from_thread(void *callable)
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1750 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1751 _make_call(callable);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1752 PyThread_release_lock(thread_done);
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1753 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1754
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1755 static PyObject *
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1756 test_thread_state(PyObject *self, PyObject *args)
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1757 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1758 PyObject *fn;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1759 int success = 1;
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1760
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1761 if (!PyArg_ParseTuple(args, "O:test_thread_state", &fn))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1762 return NULL;
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1763
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1764 if (!PyCallable_Check(fn)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1765 PyErr_Format(PyExc_TypeError, "'%s' object is not callable",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1766 fn->ob_type->tp_name);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1767 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1768 }
48870
82f73b0b5a30 Merged revisions 65910,65977,65980,65984,65986,66000,66011-66012,66014,66017,66020 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48842
diff changeset
1769
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1770 /* Ensure Python is set up for threading */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1771 PyEval_InitThreads();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1772 thread_done = PyThread_allocate_lock();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1773 if (thread_done == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1774 return PyErr_NoMemory();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1775 PyThread_acquire_lock(thread_done, 1);
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1776
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1777 /* Start a new thread with our callback. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1778 PyThread_start_new_thread(_make_call_from_thread, fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1779 /* Make the callback with the thread lock held by this thread */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1780 success &= _make_call(fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1781 /* Do it all again, but this time with the thread-lock released */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1782 Py_BEGIN_ALLOW_THREADS
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1783 success &= _make_call(fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1784 PyThread_acquire_lock(thread_done, 1); /* wait for thread to finish */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1785 Py_END_ALLOW_THREADS
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1786
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1787 /* And once more with and without a thread
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1788 XXX - should use a lock and work out exactly what we are trying
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1789 to test <wink>
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1790 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1791 Py_BEGIN_ALLOW_THREADS
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1792 PyThread_start_new_thread(_make_call_from_thread, fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1793 success &= _make_call(fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1794 PyThread_acquire_lock(thread_done, 1); /* wait for thread to finish */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1795 Py_END_ALLOW_THREADS
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1796
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1797 /* Release lock we acquired above. This is required on HP-UX. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1798 PyThread_release_lock(thread_done);
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
1799
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1800 PyThread_free_lock(thread_done);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1801 if (!success)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1802 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1803 Py_RETURN_NONE;
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1804 }
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1805
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1806 /* test Py_AddPendingCalls using threads */
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1807 static int _pending_callback(void *arg)
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1808 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1809 /* we assume the argument is callable object to which we own a reference */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1810 PyObject *callable = (PyObject *)arg;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1811 PyObject *r = PyObject_CallObject(callable, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1812 Py_DECREF(callable);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1813 Py_XDECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1814 return r != NULL ? 0 : -1;
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1815 }
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1816
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1817 /* The following requests n callbacks to _pending_callback. It can be
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1818 * run from any python thread.
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1819 */
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1820 PyObject *pending_threadfunc(PyObject *self, PyObject *arg)
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1821 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1822 PyObject *callable;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1823 int r;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1824 if (PyArg_ParseTuple(arg, "O", &callable) == 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1825 return NULL;
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1826
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1827 /* create the reference for the callbackwhile we hold the lock */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1828 Py_INCREF(callable);
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1829
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1830 Py_BEGIN_ALLOW_THREADS
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1831 r = Py_AddPendingCall(&_pending_callback, callable);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1832 Py_END_ALLOW_THREADS
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1833
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1834 if (r<0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1835 Py_DECREF(callable); /* unsuccessful add, destroy the extra reference */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1836 Py_INCREF(Py_False);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1837 return Py_False;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1838 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1839 Py_INCREF(Py_True);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1840 return Py_True;
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1841 }
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1842 #endif
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1843
42813
74b993a8ad6f Use unicode strings
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1844 /* Some tests of PyUnicode_FromFormat(). This needs more tests. */
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1845 static PyObject *
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1846 test_string_from_format(PyObject *self, PyObject *args)
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1847 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1848 PyObject *result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1849 char *msg;
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1850
66799
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1851 #define CHECK_1_FORMAT(FORMAT, TYPE) \
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1852 result = PyUnicode_FromFormat(FORMAT, (TYPE)1); \
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1853 if (result == NULL) \
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1854 return NULL; \
73642
4700e768c7b5 Use PyUnicode_CompareWithASCIIString() instead of Py_UNICODE_strcmp() to avoid
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72510
diff changeset
1855 if (PyUnicode_CompareWithASCIIString(result, "1")) { \
66799
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1856 msg = FORMAT " failed at 1"; \
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1857 goto Fail; \
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1858 } \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1859 Py_DECREF(result)
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1860
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1861 CHECK_1_FORMAT("%d", int);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1862 CHECK_1_FORMAT("%ld", long);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1863 /* The z width modifier was added in Python 2.5. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1864 CHECK_1_FORMAT("%zd", Py_ssize_t);
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1865
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1866 /* The u type code was added in Python 2.5. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1867 CHECK_1_FORMAT("%u", unsigned int);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1868 CHECK_1_FORMAT("%lu", unsigned long);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1869 CHECK_1_FORMAT("%zu", size_t);
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1870
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1871 /* "%lld" and "%llu" support added in Python 2.7. */
57295
ac768c8e13ac Merged revisions 76308 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56900
diff changeset
1872 #ifdef HAVE_LONG_LONG
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1873 CHECK_1_FORMAT("%llu", unsigned PY_LONG_LONG);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1874 CHECK_1_FORMAT("%lld", PY_LONG_LONG);
57295
ac768c8e13ac Merged revisions 76308 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56900
diff changeset
1875 #endif
ac768c8e13ac Merged revisions 76308 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56900
diff changeset
1876
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1877 Py_RETURN_NONE;
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1878
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1879 Fail:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1880 Py_XDECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1881 return raiseTestError("test_string_from_format", msg);
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1882
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1883 #undef CHECK_1_FORMAT
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1884 }
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1885
58226
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1886
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1887 static PyObject *
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1888 test_unicode_compare_with_ascii(PyObject *self) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1889 PyObject *py_s = PyUnicode_FromStringAndSize("str\0", 4);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1890 int result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1891 if (py_s == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1892 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1893 result = PyUnicode_CompareWithASCIIString(py_s, "str");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1894 Py_DECREF(py_s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1895 if (!result) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1896 PyErr_SetString(TestError, "Python string ending in NULL "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1897 "should not compare equal to c string.");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1898 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1899 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1900 Py_RETURN_NONE;
66104
448ab7516c0a Issue #10359: Remove ";" after function definition, invalid in ISO C
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65610
diff changeset
1901 }
58226
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1902
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1903 /* This is here to provide a docstring for test_descr. */
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1904 static PyObject *
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1905 test_with_docstring(PyObject *self)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1906 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1907 Py_RETURN_NONE;
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1908 }
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1909
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1910 /* Test PyOS_string_to_double. */
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1911 static PyObject *
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1912 test_string_to_double(PyObject *self) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1913 double result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1914 char *msg;
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1915
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1916 #define CHECK_STRING(STR, expected) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1917 result = PyOS_string_to_double(STR, NULL, NULL); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1918 if (result == -1.0 && PyErr_Occurred()) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1919 return NULL; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1920 if (result != expected) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1921 msg = "conversion of " STR " to float failed"; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1922 goto fail; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1923 }
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1924
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1925 #define CHECK_INVALID(STR) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1926 result = PyOS_string_to_double(STR, NULL, NULL); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1927 if (result == -1.0 && PyErr_Occurred()) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1928 if (PyErr_ExceptionMatches(PyExc_ValueError)) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1929 PyErr_Clear(); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1930 else \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1931 return NULL; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1932 } \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1933 else { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1934 msg = "conversion of " STR " didn't raise ValueError"; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1935 goto fail; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1936 }
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1937
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1938 CHECK_STRING("0.1", 0.1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1939 CHECK_STRING("1.234", 1.234);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1940 CHECK_STRING("-1.35", -1.35);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1941 CHECK_STRING(".1e01", 1.0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1942 CHECK_STRING("2.e-2", 0.02);
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1943
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1944 CHECK_INVALID(" 0.1");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1945 CHECK_INVALID("\t\n-3");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1946 CHECK_INVALID(".123 ");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1947 CHECK_INVALID("3\n");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1948 CHECK_INVALID("123abc");
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1949
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1950 Py_RETURN_NONE;
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1951 fail:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1952 return raiseTestError("test_string_to_double", msg);
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1953 #undef CHECK_STRING
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1954 #undef CHECK_INVALID
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1955 }
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1956
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1957
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1958 /* Coverage testing of capsule objects. */
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1959
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1960 static const char *capsule_name = "capsule name";
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1961 static char *capsule_pointer = "capsule pointer";
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1962 static char *capsule_context = "capsule context";
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1963 static const char *capsule_error = NULL;
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1964 static int
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1965 capsule_destructor_call_count = 0;
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1966
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1967 static void
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1968 capsule_destructor(PyObject *o) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1969 capsule_destructor_call_count++;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1970 if (PyCapsule_GetContext(o) != capsule_context) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1971 capsule_error = "context did not match in destructor!";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1972 } else if (PyCapsule_GetDestructor(o) != capsule_destructor) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1973 capsule_error = "destructor did not match in destructor! (woah!)";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1974 } else if (PyCapsule_GetName(o) != capsule_name) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1975 capsule_error = "name did not match in destructor!";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1976 } else if (PyCapsule_GetPointer(o, capsule_name) != capsule_pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1977 capsule_error = "pointer did not match in destructor!";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1978 }
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1979 }
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1980
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1981 typedef struct {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1982 char *name;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1983 char *module;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1984 char *attribute;
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1985 } known_capsule;
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1986
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1987 static PyObject *
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1988 test_capsule(PyObject *self, PyObject *args)
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1989 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1990 PyObject *object;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1991 const char *error = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1992 void *pointer;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1993 void *pointer2;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1994 known_capsule known_capsules[] = {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1995 #define KNOWN_CAPSULE(module, name) { module "." name, module, name }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1996 KNOWN_CAPSULE("_socket", "CAPI"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1997 KNOWN_CAPSULE("_curses", "_C_API"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1998 KNOWN_CAPSULE("datetime", "datetime_CAPI"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1999 { NULL, NULL },
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2000 };
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2001 known_capsule *known = &known_capsules[0];
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2002
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2003 #define FAIL(x) { error = (x); goto exit; }
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2004
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2005 #define CHECK_DESTRUCTOR \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2006 if (capsule_error) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2007 FAIL(capsule_error); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2008 } \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2009 else if (!capsule_destructor_call_count) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2010 FAIL("destructor not called!"); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2011 } \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2012 capsule_destructor_call_count = 0; \
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2013
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2014 object = PyCapsule_New(capsule_pointer, capsule_name, capsule_destructor);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2015 PyCapsule_SetContext(object, capsule_context);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2016 capsule_destructor(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2017 CHECK_DESTRUCTOR;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2018 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2019 CHECK_DESTRUCTOR;
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2020
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2021 object = PyCapsule_New(known, "ignored", NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2022 PyCapsule_SetPointer(object, capsule_pointer);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2023 PyCapsule_SetName(object, capsule_name);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2024 PyCapsule_SetDestructor(object, capsule_destructor);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2025 PyCapsule_SetContext(object, capsule_context);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2026 capsule_destructor(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2027 CHECK_DESTRUCTOR;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2028 /* intentionally access using the wrong name */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2029 pointer2 = PyCapsule_GetPointer(object, "the wrong name");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2030 if (!PyErr_Occurred()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2031 FAIL("PyCapsule_GetPointer should have failed but did not!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2032 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2033 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2034 if (pointer2) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2035 if (pointer2 == capsule_pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2036 FAIL("PyCapsule_GetPointer should not have"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2037 " returned the internal pointer!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2038 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2039 FAIL("PyCapsule_GetPointer should have "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2040 "returned NULL pointer but did not!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2041 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2042 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2043 PyCapsule_SetDestructor(object, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2044 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2045 if (capsule_destructor_call_count) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2046 FAIL("destructor called when it should not have been!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2047 }
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2048
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2049 for (known = &known_capsules[0]; known->module != NULL; known++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2050 /* yeah, ordinarily I wouldn't do this either,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2051 but it's fine for this test harness.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2052 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2053 static char buffer[256];
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2054 #undef FAIL
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2055 #define FAIL(x) \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2056 { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2057 sprintf(buffer, "%s module: \"%s\" attribute: \"%s\"", \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2058 x, known->module, known->attribute); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2059 error = buffer; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2060 goto exit; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2061 } \
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2062
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2063 PyObject *module = PyImport_ImportModule(known->module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2064 if (module) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2065 pointer = PyCapsule_Import(known->name, 0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2066 if (!pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2067 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2068 FAIL("PyCapsule_GetPointer returned NULL unexpectedly!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2069 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2070 object = PyObject_GetAttrString(module, known->attribute);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2071 if (!object) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2072 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2073 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2074 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2075 pointer2 = PyCapsule_GetPointer(object,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2076 "weebles wobble but they don't fall down");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2077 if (!PyErr_Occurred()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2078 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2079 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2080 FAIL("PyCapsule_GetPointer should have failed but did not!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2081 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2082 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2083 if (pointer2) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2084 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2085 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2086 if (pointer2 == pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2087 FAIL("PyCapsule_GetPointer should not have"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2088 " returned its internal pointer!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2089 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2090 FAIL("PyCapsule_GetPointer should have"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2091 " returned NULL pointer but did not!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2092 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2093 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2094 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2095 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2096 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2097 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2098 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2099 }
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2100
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2101 exit:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2102 if (error) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2103 return raiseTestError("test_capsule", error);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2104 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2105 Py_RETURN_NONE;
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2106 #undef FAIL
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2107 }
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2108
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2109 #ifdef HAVE_GETTIMEOFDAY
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2110 /* Profiling of integer performance */
47679
8c6068f14ee8 Make print_delta static.
Martin v. Löwis <martin@v.loewis.de>
parents: 47580
diff changeset
2111 static void print_delta(int test, struct timeval *s, struct timeval *e)
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2112 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2113 e->tv_sec -= s->tv_sec;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2114 e->tv_usec -= s->tv_usec;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2115 if (e->tv_usec < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2116 e->tv_sec -=1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2117 e->tv_usec += 1000000;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2118 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2119 printf("Test %d: %d.%06ds\n", test, (int)e->tv_sec, (int)e->tv_usec);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2120 }
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2121
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2122 static PyObject *
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2123 profile_int(PyObject *self, PyObject* args)
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2124 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2125 int i, k;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2126 struct timeval start, stop;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2127 PyObject *single, **multiple, *op1, *result;
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2128
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2129 /* Test 1: Allocate and immediately deallocate
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2130 many small integers */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2131 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2132 for(k=0; k < 20000; k++)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2133 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2134 single = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2135 Py_DECREF(single);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2136 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2137 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2138 print_delta(1, &start, &stop);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2139
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2140 /* Test 2: Allocate and immediately deallocate
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2141 many large integers */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2142 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2143 for(k=0; k < 20000; k++)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2144 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2145 single = PyLong_FromLong(i+1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2146 Py_DECREF(single);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2147 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2148 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2149 print_delta(2, &start, &stop);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2150
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2151 /* Test 3: Allocate a few integers, then release
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2152 them all simultaneously. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2153 multiple = malloc(sizeof(PyObject*) * 1000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2154 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2155 for(k=0; k < 20000; k++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2156 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2157 multiple[i] = PyLong_FromLong(i+1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2158 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2159 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2160 Py_DECREF(multiple[i]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2161 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2162 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2163 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2164 print_delta(3, &start, &stop);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2165
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2166 /* Test 4: Allocate many integers, then release
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2167 them all simultaneously. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2168 multiple = malloc(sizeof(PyObject*) * 1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2169 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2170 for(k=0; k < 20; k++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2171 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2172 multiple[i] = PyLong_FromLong(i+1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2173 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2174 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2175 Py_DECREF(multiple[i]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2176 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2177 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2178 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2179 print_delta(4, &start, &stop);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2180
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2181 /* Test 5: Allocate many integers < 32000 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2182 multiple = malloc(sizeof(PyObject*) * 1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2183 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2184 for(k=0; k < 10; k++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2185 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2186 multiple[i] = PyLong_FromLong(i+1000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2187 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2188 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2189 Py_DECREF(multiple[i]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2190 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2191 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2192 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2193 print_delta(5, &start, &stop);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2194
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2195 /* Test 6: Perform small int addition */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2196 op1 = PyLong_FromLong(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2197 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2198 for(i=0; i < 10000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2199 result = PyNumber_Add(op1, op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2200 Py_DECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2201 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2202 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2203 Py_DECREF(op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2204 print_delta(6, &start, &stop);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2205
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2206 /* Test 7: Perform medium int addition */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2207 op1 = PyLong_FromLong(1000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2208 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2209 for(i=0; i < 10000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2210 result = PyNumber_Add(op1, op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2211 Py_DECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2212 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2213 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2214 Py_DECREF(op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2215 print_delta(7, &start, &stop);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2216
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2217 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2218 return Py_None;
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2219 }
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2220 #endif
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2221
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45548
diff changeset
2222 /* To test the format of tracebacks as printed out. */
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45548
diff changeset
2223 static PyObject *
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45548
diff changeset
2224 traceback_print(PyObject *self, PyObject *args)
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45548
diff changeset
2225 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2226 PyObject *file;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2227 PyObject *traceback;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2228 int result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2229
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2230 if (!PyArg_ParseTuple(args, "OO:traceback_print",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2231 &traceback, &file))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2232 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2233
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2234 result = PyTraceBack_Print(traceback, file);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2235 if (result < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2236 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2237 Py_RETURN_NONE;
46664
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45548
diff changeset
2238 }
031dfe455585 Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45548
diff changeset
2239
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2240 /* To test the format of exceptions as printed out. */
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2241 static PyObject *
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2242 exception_print(PyObject *self, PyObject *args)
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2243 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2244 PyObject *value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2245 PyObject *tb;
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2246
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2247 if (!PyArg_ParseTuple(args, "O:exception_print",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2248 &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2249 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2250 if (!PyExceptionInstance_Check(value)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2251 PyErr_Format(PyExc_TypeError, "an exception instance is required");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2252 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2253 }
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2254
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2255 tb = PyException_GetTraceback(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2256 PyErr_Display((PyObject *) Py_TYPE(value), value, tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2257 Py_XDECREF(tb);
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2258
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2259 Py_RETURN_NONE;
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2260 }
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2261
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2262
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2263
48704
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2264
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2265 /* reliably raise a MemoryError */
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2266 static PyObject *
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2267 raise_memoryerror(PyObject *self)
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2268 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2269 PyErr_NoMemory();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2270 return NULL;
48704
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2271 }
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2272
54421
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2273 /* Issue 6012 */
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2274 static PyObject *str1, *str2;
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2275 static int
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2276 failing_converter(PyObject *obj, void *arg)
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2277 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2278 /* Clone str1, then let the conversion fail. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2279 assert(str1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2280 str2 = str1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2281 Py_INCREF(str2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2282 return 0;
54421
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2283 }
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2284 static PyObject*
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2285 argparsing(PyObject *o, PyObject *args)
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2286 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2287 PyObject *res;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2288 str1 = str2 = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2289 if (!PyArg_ParseTuple(args, "O&O&",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2290 PyUnicode_FSConverter, &str1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2291 failing_converter, &str2)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2292 if (!str2)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2293 /* argument converter not called? */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2294 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2295 /* Should be 1 */
67347
3bf4d9f1660a Issue #9566: use Py_ssize_t instead of int
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
2296 res = PyLong_FromSsize_t(Py_REFCNT(str2));
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2297 Py_DECREF(str2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2298 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2299 return res;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2300 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2301 Py_RETURN_NONE;
54421
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2302 }
48704
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2303
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2304 /* To test that the result of PyCode_NewEmpty has the right members. */
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2305 static PyObject *
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2306 code_newempty(PyObject *self, PyObject *args)
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2307 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2308 const char *filename;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2309 const char *funcname;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2310 int firstlineno;
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2311
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2312 if (!PyArg_ParseTuple(args, "ssi:code_newempty",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2313 &filename, &funcname, &firstlineno))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2314 return NULL;
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2315
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2316 return (PyObject *)PyCode_NewEmpty(filename, funcname, firstlineno);
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2317 }
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2318
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2319 /* Test PyErr_NewExceptionWithDoc (also exercise PyErr_NewException).
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2320 Run via Lib/test/test_exceptions.py */
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2321 static PyObject *
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2322 make_exception_with_doc(PyObject *self, PyObject *args, PyObject *kwargs)
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2323 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2324 const char *name;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2325 const char *doc = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2326 PyObject *base = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2327 PyObject *dict = NULL;
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2328
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2329 static char *kwlist[] = {"name", "doc", "base", "dict", NULL};
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2330
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2331 if (!PyArg_ParseTupleAndKeywords(args, kwargs,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2332 "s|sOO:make_exception_with_doc", kwlist,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2333 &name, &doc, &base, &dict))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2334 return NULL;
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2335
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2336 return PyErr_NewExceptionWithDoc(name, doc, base, dict);
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2337 }
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2338
68127
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2339 static PyObject *
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2340 make_memoryview_from_NULL_pointer(PyObject *self)
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2341 {
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2342 Py_buffer info;
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2343 if (PyBuffer_FillInfo(&info, NULL, NULL, 1, 1, PyBUF_FULL_RO) < 0)
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2344 return NULL;
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2345 return PyMemoryView_FromBuffer(&info);
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2346 }
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2347
61555
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2348 /* Test that the fatal error from not having a current thread doesn't
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2349 cause an infinite loop. Run via Lib/test/test_capi.py */
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2350 static PyObject *
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2351 crash_no_current_thread(PyObject *self)
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2352 {
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2353 Py_BEGIN_ALLOW_THREADS
61671
7f64fad177dd Fix test_capi in !pydebug mode, where my original attempt segfaulted without
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61555
diff changeset
2354 /* Using PyThreadState_Get() directly allows the test to pass in
7f64fad177dd Fix test_capi in !pydebug mode, where my original attempt segfaulted without
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61555
diff changeset
2355 !pydebug mode. However, the test only actually tests anything
7f64fad177dd Fix test_capi in !pydebug mode, where my original attempt segfaulted without
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61555
diff changeset
2356 in pydebug mode, since that's where the infinite loop was in
7f64fad177dd Fix test_capi in !pydebug mode, where my original attempt segfaulted without
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61555
diff changeset
2357 the first place. */
7f64fad177dd Fix test_capi in !pydebug mode, where my original attempt segfaulted without
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61555
diff changeset
2358 PyThreadState_Get();
61555
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2359 Py_END_ALLOW_THREADS
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2360 return NULL;
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2361 }
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2362
74471
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2363 /* To run some code in a sub-interpreter. */
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2364 static PyObject *
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2365 run_in_subinterp(PyObject *self, PyObject *args)
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2366 {
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2367 const char *code;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2368 int r;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2369 PyThreadState *substate, *mainstate;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2370
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2371 if (!PyArg_ParseTuple(args, "s:run_in_subinterp",
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2372 &code))
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2373 return NULL;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2374
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2375 mainstate = PyThreadState_Get();
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2376
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2377 PyThreadState_Swap(NULL);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2378
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2379 substate = Py_NewInterpreter();
74742
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2380 if (substate == NULL) {
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2381 /* Since no new thread state was created, there is no exception to
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2382 propagate; raise a fresh one after swapping in the old thread
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2383 state. */
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2384 PyThreadState_Swap(mainstate);
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2385 PyErr_SetString(PyExc_RuntimeError, "sub-interpreter creation failed");
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2386 return NULL;
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2387 }
74471
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2388 r = PyRun_SimpleString(code);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2389 Py_EndInterpreter(substate);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2390
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2391 PyThreadState_Swap(mainstate);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2392
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2393 return PyLong_FromLong(r);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2394 }
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2395
75590
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2396 static PyObject *
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2397 test_pytime_object_to_time_t(PyObject *self, PyObject *args)
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2398 {
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2399 PyObject *obj;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2400 time_t sec;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2401 if (!PyArg_ParseTuple(args, "O:pytime_object_to_time_t", &obj))
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2402 return NULL;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2403 if (_PyTime_ObjectToTime_t(obj, &sec) == -1)
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2404 return NULL;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2405 return _PyLong_FromTime_t(sec);
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2406 }
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2407
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2408 static PyObject *
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2409 test_pytime_object_to_timeval(PyObject *self, PyObject *args)
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2410 {
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2411 PyObject *obj;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2412 time_t sec;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2413 long usec;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2414 if (!PyArg_ParseTuple(args, "O:pytime_object_to_timeval", &obj))
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2415 return NULL;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2416 if (_PyTime_ObjectToTimeval(obj, &sec, &usec) == -1)
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2417 return NULL;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2418 return Py_BuildValue("Nl", _PyLong_FromTime_t(sec), usec);
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2419 }
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2420
75372
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2421 static PyObject *
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2422 test_pytime_object_to_timespec(PyObject *self, PyObject *args)
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2423 {
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2424 PyObject *obj;
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2425 time_t sec;
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2426 long nsec;
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2427 if (!PyArg_ParseTuple(args, "O:pytime_object_to_timespec", &obj))
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2428 return NULL;
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2429 if (_PyTime_ObjectToTimespec(obj, &sec, &nsec) == -1)
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2430 return NULL;
75590
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2431 return Py_BuildValue("Nl", _PyLong_FromTime_t(sec), nsec);
75372
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2432 }
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2433
74471
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2434
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2435 static PyMethodDef TestMethods[] = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2436 {"raise_exception", raise_exception, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2437 {"raise_memoryerror", (PyCFunction)raise_memoryerror, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2438 {"test_config", (PyCFunction)test_config, METH_NOARGS},
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2439 {"test_datetime_capi", test_datetime_capi, METH_NOARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2440 {"test_list_api", (PyCFunction)test_list_api, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2441 {"test_dict_iteration", (PyCFunction)test_dict_iteration,METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2442 {"test_lazy_hash_inheritance", (PyCFunction)test_lazy_hash_inheritance,METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2443 {"test_long_api", (PyCFunction)test_long_api, METH_NOARGS},
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2444 {"test_long_and_overflow", (PyCFunction)test_long_and_overflow,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2445 METH_NOARGS},
72312
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
2446 {"test_long_as_double", (PyCFunction)test_long_as_double,METH_NOARGS},
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
2447 {"test_long_as_size_t", (PyCFunction)test_long_as_size_t,METH_NOARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2448 {"test_long_numbits", (PyCFunction)test_long_numbits, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2449 {"test_k_code", (PyCFunction)test_k_code, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2450 {"test_empty_argparse", (PyCFunction)test_empty_argparse,METH_NOARGS},
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
2451 {"parse_tuple_and_keywords", parse_tuple_and_keywords, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2452 {"test_null_strings", (PyCFunction)test_null_strings, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2453 {"test_string_from_format", (PyCFunction)test_string_from_format, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2454 {"test_with_docstring", (PyCFunction)test_with_docstring, METH_NOARGS,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2455 PyDoc_STR("This is a pretty normal docstring.")},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2456 {"test_string_to_double", (PyCFunction)test_string_to_double, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2457 {"test_unicode_compare_with_ascii", (PyCFunction)test_unicode_compare_with_ascii, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2458 {"test_capsule", (PyCFunction)test_capsule, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2459 {"getargs_tuple", getargs_tuple, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2460 {"getargs_keywords", (PyCFunction)getargs_keywords,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2461 METH_VARARGS|METH_KEYWORDS},
75842
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
2462 {"getargs_keyword_only", (PyCFunction)getargs_keyword_only,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
2463 METH_VARARGS|METH_KEYWORDS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2464 {"getargs_b", getargs_b, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2465 {"getargs_B", getargs_B, METH_VARARGS},
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2466 {"getargs_h", getargs_h, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2467 {"getargs_H", getargs_H, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2468 {"getargs_I", getargs_I, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2469 {"getargs_k", getargs_k, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2470 {"getargs_i", getargs_i, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2471 {"getargs_l", getargs_l, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2472 {"getargs_n", getargs_n, METH_VARARGS},
76776
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
2473 {"getargs_p", getargs_p, METH_VARARGS},
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
2474 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2475 {"getargs_L", getargs_L, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2476 {"getargs_K", getargs_K, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2477 {"test_longlong_api", test_longlong_api, METH_NOARGS},
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2478 {"test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2479 (PyCFunction)test_long_long_and_overflow, METH_NOARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2480 {"test_L_code", (PyCFunction)test_L_code, METH_NOARGS},
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2481 #endif
71543
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
2482 {"getargs_c", getargs_c, METH_VARARGS},
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2483 {"getargs_s", getargs_s, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2484 {"getargs_s_star", getargs_s_star, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2485 {"getargs_s_hash", getargs_s_hash, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2486 {"getargs_z", getargs_z, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2487 {"getargs_z_star", getargs_z_star, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2488 {"getargs_z_hash", getargs_z_hash, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2489 {"getargs_y", getargs_y, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2490 {"getargs_y_star", getargs_y_star, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2491 {"getargs_y_hash", getargs_y_hash, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2492 {"getargs_u", getargs_u, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2493 {"getargs_u_hash", getargs_u_hash, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2494 {"getargs_Z", getargs_Z, METH_VARARGS},
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2495 {"getargs_Z_hash", getargs_Z_hash, METH_VARARGS},
62484
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
2496 {"getargs_w_star", getargs_w_star, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2497 {"codec_incrementalencoder",
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2498 (PyCFunction)codec_incrementalencoder, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2499 {"codec_incrementaldecoder",
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2500 (PyCFunction)codec_incrementaldecoder, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2501 {"test_s_code", (PyCFunction)test_s_code, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2502 {"test_u_code", (PyCFunction)test_u_code, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2503 {"test_Z_code", (PyCFunction)test_Z_code, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2504 {"test_widechar", (PyCFunction)test_widechar, METH_NOARGS},
73680
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
2505 {"unicode_aswidechar", unicode_aswidechar, METH_VARARGS},
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
2506 {"unicode_aswidecharstring",unicode_aswidecharstring, METH_VARARGS},
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
2507 {"unicode_encodedecimal", unicode_encodedecimal, METH_VARARGS},
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
2508 {"unicode_transformdecimaltoascii", unicode_transformdecimaltoascii, METH_VARARGS},
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
2509 #ifdef WITH_THREAD
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2510 {"_test_thread_state", test_thread_state, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2511 {"_pending_threadfunc", pending_threadfunc, METH_VARARGS},
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
2512 #endif
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2513 #ifdef HAVE_GETTIMEOFDAY
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2514 {"profile_int", profile_int, METH_NOARGS},
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2515 #endif
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2516 {"traceback_print", traceback_print, METH_VARARGS},
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2517 {"exception_print", exception_print, METH_VARARGS},
76418
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
2518 {"set_exc_info", test_set_exc_info, METH_VARARGS},
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2519 {"argparsing", argparsing, METH_VARARGS},
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2520 {"code_newempty", code_newempty, METH_VARARGS},
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2521 {"make_exception_with_doc", (PyCFunction)make_exception_with_doc,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2522 METH_VARARGS | METH_KEYWORDS},
68127
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2523 {"make_memoryview_from_NULL_pointer", (PyCFunction)make_memoryview_from_NULL_pointer,
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2524 METH_NOARGS},
61555
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2525 {"crash_no_current_thread", (PyCFunction)crash_no_current_thread, METH_NOARGS},
74471
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2526 {"run_in_subinterp", run_in_subinterp, METH_VARARGS},
75590
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2527 {"pytime_object_to_time_t", test_pytime_object_to_time_t, METH_VARARGS},
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2528 {"pytime_object_to_timeval", test_pytime_object_to_timeval, METH_VARARGS},
75372
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2529 {"pytime_object_to_timespec", test_pytime_object_to_timespec, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2530 {NULL, NULL} /* sentinel */
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2531 };
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2532
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
2533 #define AddSym(d, n, f, v) {PyObject *o = f(v); PyDict_SetItemString(d, n, o); Py_DECREF(o);}
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
2534
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2535 typedef struct {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2536 char bool_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2537 char byte_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2538 unsigned char ubyte_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2539 short short_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2540 unsigned short ushort_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2541 int int_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2542 unsigned int uint_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2543 long long_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2544 unsigned long ulong_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2545 Py_ssize_t pyssizet_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2546 float float_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2547 double double_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2548 char inplace_member[6];
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41587
diff changeset
2549 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2550 PY_LONG_LONG longlong_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2551 unsigned PY_LONG_LONG ulonglong_member;
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41587
diff changeset
2552 #endif
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2553 } all_structmembers;
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2554
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2555 typedef struct {
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2556 PyObject_HEAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2557 all_structmembers structmembers;
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2558 } test_structmembers;
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2559
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2560 static struct PyMemberDef test_members[] = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2561 {"T_BOOL", T_BOOL, offsetof(test_structmembers, structmembers.bool_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2562 {"T_BYTE", T_BYTE, offsetof(test_structmembers, structmembers.byte_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2563 {"T_UBYTE", T_UBYTE, offsetof(test_structmembers, structmembers.ubyte_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2564 {"T_SHORT", T_SHORT, offsetof(test_structmembers, structmembers.short_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2565 {"T_USHORT", T_USHORT, offsetof(test_structmembers, structmembers.ushort_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2566 {"T_INT", T_INT, offsetof(test_structmembers, structmembers.int_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2567 {"T_UINT", T_UINT, offsetof(test_structmembers, structmembers.uint_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2568 {"T_LONG", T_LONG, offsetof(test_structmembers, structmembers.long_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2569 {"T_ULONG", T_ULONG, offsetof(test_structmembers, structmembers.ulong_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2570 {"T_PYSSIZET", T_PYSSIZET, offsetof(test_structmembers, structmembers.pyssizet_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2571 {"T_FLOAT", T_FLOAT, offsetof(test_structmembers, structmembers.float_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2572 {"T_DOUBLE", T_DOUBLE, offsetof(test_structmembers, structmembers.double_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2573 {"T_STRING_INPLACE", T_STRING_INPLACE, offsetof(test_structmembers, structmembers.inplace_member), 0, NULL},
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41587
diff changeset
2574 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2575 {"T_LONGLONG", T_LONGLONG, offsetof(test_structmembers, structmembers.longlong_member), 0, NULL},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2576 {"T_ULONGLONG", T_ULONGLONG, offsetof(test_structmembers, structmembers.ulonglong_member), 0, NULL},
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41587
diff changeset
2577 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2578 {NULL}
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2579 };
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2580
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2581
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2582 static PyObject *
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2583 test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2584 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2585 static char *keywords[] = {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2586 "T_BOOL", "T_BYTE", "T_UBYTE", "T_SHORT", "T_USHORT",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2587 "T_INT", "T_UINT", "T_LONG", "T_ULONG", "T_PYSSIZET",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2588 "T_FLOAT", "T_DOUBLE", "T_STRING_INPLACE",
60396
64fdf66f69b0 Merged revisions 78918,78920 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 60230
diff changeset
2589 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2590 "T_LONGLONG", "T_ULONGLONG",
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2591 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2592 NULL};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2593 static char *fmt = "|bbBhHiIlknfds#"
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2594 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2595 "LK"
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2596 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2597 ;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2598 test_structmembers *ob;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2599 const char *s = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2600 Py_ssize_t string_len = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2601 ob = PyObject_New(test_structmembers, type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2602 if (ob == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2603 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2604 memset(&ob->structmembers, 0, sizeof(all_structmembers));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2605 if (!PyArg_ParseTupleAndKeywords(args, kwargs, fmt, keywords,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2606 &ob->structmembers.bool_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2607 &ob->structmembers.byte_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2608 &ob->structmembers.ubyte_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2609 &ob->structmembers.short_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2610 &ob->structmembers.ushort_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2611 &ob->structmembers.int_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2612 &ob->structmembers.uint_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2613 &ob->structmembers.long_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2614 &ob->structmembers.ulong_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2615 &ob->structmembers.pyssizet_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2616 &ob->structmembers.float_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2617 &ob->structmembers.double_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2618 &s, &string_len
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2619 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2620 , &ob->structmembers.longlong_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2621 &ob->structmembers.ulonglong_member
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2622 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2623 )) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2624 Py_DECREF(ob);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2625 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2626 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2627 if (s != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2628 if (string_len > 5) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2629 Py_DECREF(ob);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2630 PyErr_SetString(PyExc_ValueError, "string too long");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2631 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2632 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2633 strcpy(ob->structmembers.inplace_member, s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2634 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2635 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2636 strcpy(ob->structmembers.inplace_member, "");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2637 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2638 return (PyObject *)ob;
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2639 }
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2640
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2641 static void
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2642 test_structmembers_free(PyObject *ob)
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2643 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2644 PyObject_FREE(ob);
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2645 }
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2646
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2647 static PyTypeObject test_structmembersType = {
42334
e70cdce0e8b2 Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents: 42084
diff changeset
2648 PyVarObject_HEAD_INIT(NULL, 0)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2649 "test_structmembersType",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2650 sizeof(test_structmembers), /* tp_basicsize */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2651 0, /* tp_itemsize */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2652 test_structmembers_free, /* destructor tp_dealloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2653 0, /* tp_print */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2654 0, /* tp_getattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2655 0, /* tp_setattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2656 0, /* tp_reserved */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2657 0, /* tp_repr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2658 0, /* tp_as_number */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2659 0, /* tp_as_sequence */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2660 0, /* tp_as_mapping */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2661 0, /* tp_hash */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2662 0, /* tp_call */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2663 0, /* tp_str */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2664 PyObject_GenericGetAttr, /* tp_getattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2665 PyObject_GenericSetAttr, /* tp_setattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2666 0, /* tp_as_buffer */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2667 0, /* tp_flags */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2668 "Type containing all structmember types",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2669 0, /* traverseproc tp_traverse */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2670 0, /* tp_clear */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2671 0, /* tp_richcompare */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2672 0, /* tp_weaklistoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2673 0, /* tp_iter */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2674 0, /* tp_iternext */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2675 0, /* tp_methods */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2676 test_members, /* tp_members */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2677 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2678 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2679 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2680 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2681 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2682 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2683 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2684 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2685 test_structmembers_new, /* tp_new */
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2686 };
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2687
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2688
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
2689
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
2690 static struct PyModuleDef _testcapimodule = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2691 PyModuleDef_HEAD_INIT,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2692 "_testcapi",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2693 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2694 -1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2695 TestMethods,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2696 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2697 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2698 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2699 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
2700 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
2701
24363
979ff5d0ae07 Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents: 22726
diff changeset
2702 PyMODINIT_FUNC
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
2703 PyInit__testcapi(void)
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2704 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2705 PyObject *m;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2706
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2707 m = PyModule_Create(&_testcapimodule);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2708 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2709 return NULL;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2710
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2711 Py_TYPE(&_HashInheritanceTester_Type)=&PyType_Type;
50399
5cc073d661f7 Merged revisions 68101 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 50374
diff changeset
2712
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2713 Py_TYPE(&test_structmembersType)=&PyType_Type;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2714 Py_INCREF(&test_structmembersType);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2715 /* don't use a name starting with "test", since we don't want
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2716 test_capi to automatically call this */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2717 PyModule_AddObject(m, "_test_structmembersType", (PyObject *)&test_structmembersType);
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2718
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2719 PyModule_AddObject(m, "CHAR_MAX", PyLong_FromLong(CHAR_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2720 PyModule_AddObject(m, "CHAR_MIN", PyLong_FromLong(CHAR_MIN));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2721 PyModule_AddObject(m, "UCHAR_MAX", PyLong_FromLong(UCHAR_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2722 PyModule_AddObject(m, "SHRT_MAX", PyLong_FromLong(SHRT_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2723 PyModule_AddObject(m, "SHRT_MIN", PyLong_FromLong(SHRT_MIN));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2724 PyModule_AddObject(m, "USHRT_MAX", PyLong_FromLong(USHRT_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2725 PyModule_AddObject(m, "INT_MAX", PyLong_FromLong(INT_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2726 PyModule_AddObject(m, "INT_MIN", PyLong_FromLong(INT_MIN));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2727 PyModule_AddObject(m, "UINT_MAX", PyLong_FromUnsignedLong(UINT_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2728 PyModule_AddObject(m, "LONG_MAX", PyLong_FromLong(LONG_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2729 PyModule_AddObject(m, "LONG_MIN", PyLong_FromLong(LONG_MIN));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2730 PyModule_AddObject(m, "ULONG_MAX", PyLong_FromUnsignedLong(ULONG_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2731 PyModule_AddObject(m, "FLT_MAX", PyFloat_FromDouble(FLT_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2732 PyModule_AddObject(m, "FLT_MIN", PyFloat_FromDouble(FLT_MIN));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2733 PyModule_AddObject(m, "DBL_MAX", PyFloat_FromDouble(DBL_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2734 PyModule_AddObject(m, "DBL_MIN", PyFloat_FromDouble(DBL_MIN));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2735 PyModule_AddObject(m, "LLONG_MAX", PyLong_FromLongLong(PY_LLONG_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2736 PyModule_AddObject(m, "LLONG_MIN", PyLong_FromLongLong(PY_LLONG_MIN));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2737 PyModule_AddObject(m, "ULLONG_MAX", PyLong_FromUnsignedLongLong(PY_ULLONG_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2738 PyModule_AddObject(m, "PY_SSIZE_T_MAX", PyLong_FromSsize_t(PY_SSIZE_T_MAX));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2739 PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyLong_FromSsize_t(PY_SSIZE_T_MIN));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2740 PyModule_AddObject(m, "SIZEOF_PYGC_HEAD", PyLong_FromSsize_t(sizeof(PyGC_Head)));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2741 Py_INCREF(&PyInstanceMethod_Type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2742 PyModule_AddObject(m, "instancemethod", (PyObject *)&PyInstanceMethod_Type);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
2743
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2744 TestError = PyErr_NewException("_testcapi.error", NULL, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2745 Py_INCREF(TestError);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2746 PyModule_AddObject(m, "error", TestError);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2747 return m;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2748 }