annotate Modules/_testcapimodule.c @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents eb47af6e9e22
children a108818aaa0d
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 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
25 char buf[2048];
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
26
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
27 if (strlen(test_name) + strlen(msg) > sizeof(buf) - 50)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
28 PyErr_SetString(TestError, "internal error msg too large");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
29 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
30 PyOS_snprintf(buf, sizeof(buf), "%s: %s", test_name, msg);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
31 PyErr_SetString(TestError, buf);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
32 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
33 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
34 }
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
35
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
36 /* 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
37
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
38 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
39 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
40 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
41 */
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
42 static PyObject*
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
43 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
44 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
45 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
46 char buf[1024];
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
47 PyOS_snprintf(buf, sizeof(buf),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
48 "%.200s #define == %d but sizeof(%.200s) == %d",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
49 fatname, expected, typname, got);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
50 PyErr_SetString(TestError, buf);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
51 return (PyObject*)NULL;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
52 }
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
53
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
54 static PyObject*
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
55 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
56 {
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
57 #define CHECK_SIZEOF(FATNAME, TYPE) \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
58 if (FATNAME != sizeof(TYPE)) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
59 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
60
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
61 CHECK_SIZEOF(SIZEOF_SHORT, short);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
62 CHECK_SIZEOF(SIZEOF_INT, int);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
63 CHECK_SIZEOF(SIZEOF_LONG, long);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
64 CHECK_SIZEOF(SIZEOF_VOID_P, void*);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
65 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
66 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
67 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
68 #endif
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
69
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
70 #undef CHECK_SIZEOF
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
71
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
72 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
73 return Py_None;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
74 }
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
75
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
76 static PyObject*
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
77 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
78 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
79 PyObject* list;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
80 int i;
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
81
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
82 /* 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
83 #define NLIST 30
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
84 list = PyList_New(NLIST);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
85 if (list == (PyObject*)NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
86 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
87 /* list = range(NLIST) */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
88 for (i = 0; i < NLIST; ++i) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
89 PyObject* anint = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
90 if (anint == (PyObject*)NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
91 Py_DECREF(list);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
92 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
93 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
94 PyList_SET_ITEM(list, i, anint);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
95 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
96 /* list.reverse(), via PyList_Reverse() */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
97 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
98 if (i != 0) {
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 /* 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
103 for (i = 0; i < NLIST; ++i) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
104 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
105 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
106 PyErr_SetString(TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
107 "test_list_api: reverse screwed up");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
108 Py_DECREF(list);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
109 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
110 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
111 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
112 Py_DECREF(list);
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
113 #undef NLIST
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
114
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
115 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
116 return Py_None;
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
117 }
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
118
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
119 static int
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
120 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
121 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
122 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
123 int i;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
124 PyObject *dict = PyDict_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
125 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
126
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
127 if (dict == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
128 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
129
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
130 for (i = 0; i < count; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
131 v = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
132 PyDict_SetItem(dict, v, v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
133 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
134 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
135
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
136 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
137 PyObject *o;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
138 iterations++;
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
139
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
140 i = PyLong_AS_LONG(v) + 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
141 o = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
142 if (o == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
143 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
144 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
145 Py_DECREF(o);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
146 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
147 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
148 Py_DECREF(o);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
149 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
150
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
151 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
152
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
153 if (iterations != count) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
154 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
155 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
156 "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
157 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
158 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
159 return 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
160 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
161 }
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
162
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
163 static PyObject*
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
164 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
165 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
166 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
167
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
168 for (i = 0; i < 200; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
169 if (test_dict_inner(i) < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
170 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
171 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
172 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
173
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
174 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
175 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
176 }
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
177
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
178
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
179 /* 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
180 * 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
181 */
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
182 static PyTypeObject _HashInheritanceTester_Type = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
183 PyVarObject_HEAD_INIT(NULL, 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
184 "hashinheritancetester", /* Name of this type */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
185 sizeof(PyObject), /* Basic object size */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
186 0, /* Item size for varobject */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
187 (destructor)PyObject_Del, /* tp_dealloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
188 0, /* tp_print */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
189 0, /* tp_getattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
190 0, /* tp_setattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
191 0, /* tp_reserved */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
192 0, /* tp_repr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
193 0, /* tp_as_number */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
194 0, /* tp_as_sequence */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
195 0, /* tp_as_mapping */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
196 0, /* tp_hash */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
197 0, /* tp_call */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
198 0, /* tp_str */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
199 PyObject_GenericGetAttr, /* tp_getattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
200 0, /* tp_setattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
201 0, /* tp_as_buffer */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
202 Py_TPFLAGS_DEFAULT, /* tp_flags */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
203 0, /* tp_doc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
204 0, /* tp_traverse */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
205 0, /* tp_clear */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
206 0, /* tp_richcompare */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
207 0, /* tp_weaklistoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
208 0, /* tp_iter */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
209 0, /* tp_iternext */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
210 0, /* tp_methods */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
211 0, /* tp_members */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
212 0, /* tp_getset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
213 0, /* tp_base */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
214 0, /* tp_dict */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
215 0, /* tp_descr_get */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
216 0, /* tp_descr_set */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
217 0, /* tp_dictoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
218 0, /* tp_init */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
219 0, /* tp_alloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
220 PyType_GenericNew, /* tp_new */
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
221 };
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
222
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
223 static PyObject*
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
224 test_lazy_hash_inheritance(PyObject* self)
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
225 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
226 PyTypeObject *type;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
227 PyObject *obj;
65610
b9dcfdffcb62 Issue #10185: use Py_hash_t instead of long
Antoine Pitrou <solipsis@pitrou.net>
parents: 65157
diff changeset
228 Py_hash_t hash;
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
229
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
230 type = &_HashInheritanceTester_Type;
53811
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
231
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
232 if (type->tp_dict != NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
233 /* 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
234 -R is being used. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
235 Py_RETURN_NONE;
53811
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
236
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
237
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
238 obj = PyObject_New(PyObject, type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
239 if (obj == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
240 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
241 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
242 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
243 "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
244 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
245 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
246
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
247 if (type->tp_dict != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
248 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
249 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
250 "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
251 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
252 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
253 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
254
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
255 hash = PyObject_Hash(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
256 if ((hash == -1) && PyErr_Occurred()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
257 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
258 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
259 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
260 "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
261 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
262 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
263 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
264
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
265 if (type->tp_dict == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
266 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
267 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
268 "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
269 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
270 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
271 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
272
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
273 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
274 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
275 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
276 "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
277 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
278 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
279 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
280
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
281 Py_DECREF(obj);
53811
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
282
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
283 Py_RETURN_NONE;
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
284 }
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
285
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
286
58647
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
287 /* Issue #7385: Check that memoryview() does not crash
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
288 * when bf_getbuffer returns an error
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
289 */
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
290
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
291 static int
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
292 broken_buffer_getbuffer(PyObject *self, Py_buffer *view, int flags)
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
293 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
294 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
295 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
296 "test_broken_memoryview: expected error in bf_getbuffer");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
297 return -1;
58647
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
298 }
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
299
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
300 static PyBufferProcs memoryviewtester_as_buffer = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
301 (getbufferproc)broken_buffer_getbuffer, /* bf_getbuffer */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
302 0, /* bf_releasebuffer */
58647
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
303 };
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
304
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
305 static PyTypeObject _MemoryViewTester_Type = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
306 PyVarObject_HEAD_INIT(NULL, 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
307 "memoryviewtester", /* Name of this type */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
308 sizeof(PyObject), /* Basic object size */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
309 0, /* Item size for varobject */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
310 (destructor)PyObject_Del, /* tp_dealloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
311 0, /* tp_print */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
312 0, /* tp_getattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
313 0, /* tp_setattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
314 0, /* tp_compare */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
315 0, /* tp_repr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
316 0, /* tp_as_number */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
317 0, /* tp_as_sequence */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
318 0, /* tp_as_mapping */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
319 0, /* tp_hash */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
320 0, /* tp_call */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
321 0, /* tp_str */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
322 PyObject_GenericGetAttr, /* tp_getattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
323 0, /* tp_setattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
324 &memoryviewtester_as_buffer, /* tp_as_buffer */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
325 Py_TPFLAGS_DEFAULT, /* tp_flags */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
326 0, /* tp_doc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
327 0, /* tp_traverse */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
328 0, /* tp_clear */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
329 0, /* tp_richcompare */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
330 0, /* tp_weaklistoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
331 0, /* tp_iter */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
332 0, /* tp_iternext */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
333 0, /* tp_methods */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
334 0, /* tp_members */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
335 0, /* tp_getset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
336 0, /* tp_base */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
337 0, /* tp_dict */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
338 0, /* tp_descr_get */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
339 0, /* tp_descr_set */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
340 0, /* tp_dictoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
341 0, /* tp_init */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
342 0, /* tp_alloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
343 PyType_GenericNew, /* tp_new */
58647
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
344 };
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
345
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
346 static PyObject*
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
347 test_broken_memoryview(PyObject* self)
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
348 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
349 PyObject *obj = PyObject_New(PyObject, &_MemoryViewTester_Type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
350 PyObject *res;
58647
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
351
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
352 if (obj == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
353 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
354 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
355 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
356 "test_broken_memoryview: failed to create object");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
357 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
358 }
58647
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
359
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
360 res = PyMemoryView_FromObject(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
361 if (res || !PyErr_Occurred()){
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
362 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
363 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
364 "test_broken_memoryview: memoryview() didn't raise an Exception");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
365 Py_XDECREF(res);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
366 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
367 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
368 }
58647
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
369
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
370 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
371 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
372 Py_RETURN_NONE;
58647
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
373 }
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
374
df2b9a6d28ae Merged revisions 77918 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 58226
diff changeset
375
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
376 /* 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
377 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
378
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
379 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
380 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
381 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
382 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
383 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
384 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
385
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
386 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
387 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
388 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
389 */
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
390
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
391 #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
392
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
393 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
394 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
395 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
396 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
397 }
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
398
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
399 #define TESTNAME test_long_api_inner
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
400 #define TYPENAME long
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
401 #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
402 #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
403 #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
404 #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
405
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
406 #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
407
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
408 static PyObject *
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
409 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
410 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
411 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
412 }
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
413
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
414 #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
415 #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
416 #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
417 #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
418 #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
419 #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
420
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
421 #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
422
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
423 static PyObject *
18093
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
424 raise_test_longlong_error(const char* msg)
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
425 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
426 return raiseTestError("test_longlong_api", msg);
18093
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
427 }
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
428
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
429 #define TESTNAME test_longlong_api_inner
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
430 #define TYPENAME PY_LONG_LONG
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
431 #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
432 #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
433 #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
434 #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
435
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
436 #include "testcapi_long.h"
18093
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
437
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
438 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
439 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
440 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
441 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
442 }
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
443
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
444 #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
445 #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
446 #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
447 #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
448 #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
449 #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
450
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
451 /* 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
452 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
453 handling of overflow.
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
454 */
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
455
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
456 static PyObject *
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
457 test_long_and_overflow(PyObject *self)
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
458 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
459 PyObject *num, *one, *temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
460 long value;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
461 int overflow;
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
462
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
463 /* 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
464 /* 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
465 num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
466 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
467 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
468 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
469 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
470 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
471 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
472 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
473 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
474 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
475 "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
476 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
477 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
478 "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
479
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
480 /* 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
481 num = PyLong_FromLong(LONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
482 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
483 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
484 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
485 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
486 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
487 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
488 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
489 temp = PyNumber_Add(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
490 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
491 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
492 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
493 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
494 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
495 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
496 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
497 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
498 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
499 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
500 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
501 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
502 "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
503 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
504 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
505 "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
506
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
507 /* 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
508 /* 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
509 num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
510 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
511 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
512 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
513 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
514 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
515 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
516 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
517 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
518 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
519 "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
520 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
521 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
522 "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
523
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
524 /* 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
525 num = PyLong_FromLong(LONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
526 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
527 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
528 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
529 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
530 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
531 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
532 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
533 temp = PyNumber_Subtract(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
534 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
535 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
536 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
537 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
538 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
539 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
540 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
541 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
542 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
543 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
544 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
545 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
546 "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
547 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
548 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
549 "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
550
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
551 /* 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
552 num = PyLong_FromString("FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
553 if (num == NULL)
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 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
556 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
557 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
558 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
559 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
560 if (value != 0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
561 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
562 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
563 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
564 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
565 "overflow was not cleared");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
566
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
567 num = PyLong_FromString("-FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
568 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
569 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
570 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
571 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
572 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
573 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
574 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
575 if (value != -0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
576 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
577 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
578 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
579 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
580 "overflow was set incorrectly");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
581
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
582 num = PyLong_FromLong(LONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
583 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
584 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
585 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
586 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
587 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
588 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
589 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
590 if (value != LONG_MAX)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
591 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
592 "expected return value LONG_MAX");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
593 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
594 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
595 "overflow was not cleared");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
596
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
597 num = PyLong_FromLong(LONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
598 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
599 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
600 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
601 value = PyLong_AsLongAndOverflow(num, &overflow);
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 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
604 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
605 if (value != LONG_MIN)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
606 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
607 "expected return value LONG_MIN");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
608 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
609 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
610 "overflow was not cleared");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
611
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
612 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
613 return Py_None;
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
614 }
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
615
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
616 /* Test the PyLong_AsLongLongAndOverflow API. General conversion to
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
617 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
618 concentrate on proper handling of overflow.
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
619 */
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
620
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
621 static PyObject *
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
622 test_long_long_and_overflow(PyObject *self)
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
623 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
624 PyObject *num, *one, *temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
625 PY_LONG_LONG value;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
626 int overflow;
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
627
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
628 /* 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
629 /* 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
630 num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
631 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
632 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
633 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
634 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
635 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
636 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
637 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
638 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
639 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
640 "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
641 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
642 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
643 "overflow was not set to 1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
644
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
645 /* 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
646 num = PyLong_FromLongLong(PY_LLONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
647 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
648 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
649 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
650 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
651 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
652 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
653 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
654 temp = PyNumber_Add(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
655 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
656 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
657 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
658 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
659 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
660 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
661 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
662 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
663 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
664 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
665 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
666 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
667 "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
668 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
669 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
670 "overflow was not set to 1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
671
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
672 /* 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
673 /* 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
674 num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
675 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
676 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
677 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
678 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
679 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
680 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
681 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
682 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
683 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
684 "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
685 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
686 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
687 "overflow was not set to -1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
688
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
689 /* 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
690 num = PyLong_FromLongLong(PY_LLONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
691 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
692 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
693 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
694 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
695 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
696 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
697 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
698 temp = PyNumber_Subtract(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
699 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
700 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
701 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
702 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
703 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
704 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
705 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
706 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
707 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
708 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
709 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
710 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
711 "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
712 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
713 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
714 "overflow was not set to -1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
715
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
716 /* 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
717 num = PyLong_FromString("FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
718 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
719 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
720 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
721 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
722 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
723 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
724 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
725 if (value != 0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
726 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
727 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
728 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
729 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
730 "overflow was not cleared");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
731
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
732 num = PyLong_FromString("-FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
733 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
734 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
735 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
736 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
737 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
738 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
739 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
740 if (value != -0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
741 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
742 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
743 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
744 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
745 "overflow was set incorrectly");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
746
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
747 num = PyLong_FromLongLong(PY_LLONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
748 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
749 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
750 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
751 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
752 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
753 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
754 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
755 if (value != PY_LLONG_MAX)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
756 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
757 "expected return value PY_LLONG_MAX");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
758 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
759 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
760 "overflow was not cleared");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
761
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
762 num = PyLong_FromLongLong(PY_LLONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
763 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
764 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
765 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
766 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
767 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
768 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
769 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
770 if (value != PY_LLONG_MIN)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
771 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
772 "expected return value PY_LLONG_MIN");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
773 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
774 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
775 "overflow was not cleared");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
776
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
777 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
778 return Py_None;
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
779 }
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
780
28437
871da703e4c0 Rename LONG_LONG to PY_LONG_LONG. Fixes #710285.
Martin v. Löwis <martin@v.loewis.de>
parents: 27549
diff changeset
781 /* 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
782 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
783 it fails.
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
784 */
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
785 static PyObject *
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
786 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
787 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
788 PyObject *tuple, *num;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
789 PY_LONG_LONG value;
20182
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 tuple = PyTuple_New(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
792 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
793 return NULL;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
794
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
795 num = PyLong_FromLong(42);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
796 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
797 return NULL;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
798
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
799 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
800
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
801 value = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
802 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
803 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
804 if (value != 42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
805 return raiseTestError("test_L_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
806 "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
807
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
808 Py_DECREF(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
809 num = PyLong_FromLong(42);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
810 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
811 return NULL;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
812
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
813 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
814
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
815 value = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
816 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
817 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
818 if (value != 42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
819 return raiseTestError("test_L_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
820 "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
821
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
822 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
823 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
824 return Py_None;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
825 }
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
826
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
827 #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
828
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
829 /* Test tuple argument processing */
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
830 static PyObject *
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
831 getargs_tuple(PyObject *self, PyObject *args)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
832 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
833 int a, b, c;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
834 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
835 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
836 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
837 }
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
838
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
839 /* test PyArg_ParseTupleAndKeywords */
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
840 static PyObject *getargs_keywords(PyObject *self, PyObject *args, PyObject *kwargs)
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
841 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
842 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
843 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
844 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
845
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
846 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
847 &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
848 &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
849 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
850 return Py_BuildValue("iiiiiiiiii",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
851 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
852 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
853 }
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
854
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
855 /* 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
856 and return the result.
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
857 */
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
858 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
859 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
860 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
861 unsigned char value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
862 if (!PyArg_ParseTuple(args, "b", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
863 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
864 return PyLong_FromUnsignedLong((unsigned long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
865 }
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
866
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
867 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
868 getargs_B(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
869 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
870 unsigned char value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
871 if (!PyArg_ParseTuple(args, "B", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
872 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
873 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
874 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
875
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
876 static PyObject *
57822
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
877 getargs_h(PyObject *self, PyObject *args)
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
878 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
879 short value;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
880 if (!PyArg_ParseTuple(args, "h", &value))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
881 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
882 return PyLong_FromLong((long)value);
57822
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
883 }
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
884
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
885 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
886 getargs_H(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
887 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
888 unsigned short value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
889 if (!PyArg_ParseTuple(args, "H", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
890 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
891 return PyLong_FromUnsignedLong((unsigned long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
892 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
893
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
894 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
895 getargs_I(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
896 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
897 unsigned int value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
898 if (!PyArg_ParseTuple(args, "I", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
899 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
900 return PyLong_FromUnsignedLong((unsigned long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
901 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
902
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
903 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
904 getargs_k(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
905 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
906 unsigned long value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
907 if (!PyArg_ParseTuple(args, "k", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
908 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
909 return PyLong_FromUnsignedLong(value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
910 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
911
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
912 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
913 getargs_i(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
914 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
915 int value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
916 if (!PyArg_ParseTuple(args, "i", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
917 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
918 return PyLong_FromLong((long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
919 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
920
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
921 static PyObject *
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
922 getargs_l(PyObject *self, PyObject *args)
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
923 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
924 long value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
925 if (!PyArg_ParseTuple(args, "l", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
926 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
927 return PyLong_FromLong(value);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
928 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
929
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
930 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
931 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
932 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
933 Py_ssize_t value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
934 if (!PyArg_ParseTuple(args, "n", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
935 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
936 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
937 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
938
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
939 #ifdef HAVE_LONG_LONG
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
940 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
941 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
942 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
943 PY_LONG_LONG value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
944 if (!PyArg_ParseTuple(args, "L", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
945 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
946 return PyLong_FromLongLong(value);
28652
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
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
949 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
950 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
951 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
952 unsigned PY_LONG_LONG value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
953 if (!PyArg_ParseTuple(args, "K", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
954 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
955 return PyLong_FromUnsignedLongLong(value);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
956 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
957 #endif
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
958
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
959 /* 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
960 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
961 static PyObject *
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
962 test_k_code(PyObject *self)
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
963 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
964 PyObject *tuple, *num;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
965 unsigned long value;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
966
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
967 tuple = PyTuple_New(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
968 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
969 return NULL;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
970
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
971 /* 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
972 num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
973 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
974 return NULL;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
975
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
976 value = PyLong_AsUnsignedLongMask(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
977 if (value != ULONG_MAX)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
978 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
979 "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
980
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
981 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
982
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
983 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
984 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
985 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
986 if (value != ULONG_MAX)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
987 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
988 "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
989
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
990 Py_DECREF(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
991 num = PyLong_FromString("-FFFFFFFF000000000000000042", NULL, 16);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
992 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
993 return NULL;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
994
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
995 value = PyLong_AsUnsignedLongMask(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
996 if (value != (unsigned long)-0x42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
997 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
998 "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
999
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1000 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
1001
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1002 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1003 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
1004 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1005 if (value != (unsigned long)-0x42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1006 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1007 "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
1008
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1009 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1010 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1011 return Py_None;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1012 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1013
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
1014 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
1015 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
1016 {
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 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
1018 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
1019 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
1020 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
1021 }
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
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 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
1024 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
1025 {
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 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
1027 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
1028 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
1029 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
1030 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
1031 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
1032 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
1033 }
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
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 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
1036 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
1037 {
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 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
1039 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
1040 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
1041 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
1042 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
1043 }
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
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 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
1046 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
1047 {
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 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
1049 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
1050 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
1051 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
1052 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
1053 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
1054 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
1055 }
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
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 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
1058 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
1059 {
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 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
1061 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
1062 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
1063 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
1064 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
1065 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
1066 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
1067 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
1068 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
1069 }
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 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
1071 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
1072 }
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
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 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
1075 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
1076 {
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 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
1078 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
1079 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
1080 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
1081 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
1082 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
1083 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
1084 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
1085 }
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
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 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
1088 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
1089 {
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 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
1091 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
1092 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
1093 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
1094 }
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
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 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
1097 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
1098 {
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 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
1100 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
1101 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
1102 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
1103 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
1104 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
1105 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
1106 }
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
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 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
1109 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
1110 {
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 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
1112 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
1113 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
1114 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
1115 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
1116 }
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
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 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
1119 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
1120 {
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 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
1122 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
1123 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
1124 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
1125 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
1126 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
1127 }
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
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 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
1130 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
1131 {
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 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
1133 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
1134 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
1135 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
1136 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
1137 }
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
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 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
1140 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
1141 {
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 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
1143 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
1144 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
1145 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
1146 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
1147 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
1148 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
1149 } 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
1150 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
1151 }
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
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 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
1154 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
1155 {
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 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
1157 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
1158 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
1159 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
1160 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
1161 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
1162 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
1163 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
1164 }
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1165
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
1166 /* 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
1167 */
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 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
1169 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
1170 {
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 /* 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
1172 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
1173 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
1174
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
1175 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
1176 if (tuple == NULL)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1177 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
1178
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 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
1180 "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
1181 if (obj == NULL)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1182 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
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 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
1185
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 /* 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
1187 * "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
1188 */
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 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
1190 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
1191
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 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
1193 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
1194
47062
87a79352342c Fixed refleak in _testcapi.test_s_code.
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46944
diff changeset
1195 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
1196 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
1197 }
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
1198
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1199 static PyObject *
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1200 test_bug_7414(PyObject *self)
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1201 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1202 /* Issue #7414: for PyArg_ParseTupleAndKeywords, 'C' code wasn't being
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1203 skipped properly in skipitem() */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1204 int a = 0, b = 0, result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1205 char *kwlist[] = {"a", "b", NULL};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1206 PyObject *tuple = NULL, *dict = NULL, *b_str;
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1207
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1208 tuple = PyTuple_New(0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1209 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1210 goto failure;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1211 dict = PyDict_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1212 if (dict == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1213 goto failure;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1214 b_str = PyUnicode_FromString("b");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1215 if (b_str == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1216 goto failure;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1217 result = PyDict_SetItemString(dict, "b", b_str);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1218 Py_DECREF(b_str);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1219 if (result < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1220 goto failure;
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1221
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1222 result = PyArg_ParseTupleAndKeywords(tuple, dict, "|CC",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1223 kwlist, &a, &b);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1224 if (!result)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1225 goto failure;
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1226
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1227 if (a != 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1228 return raiseTestError("test_bug_7414",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1229 "C format code not skipped properly");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1230 if (b != 'b')
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1231 return raiseTestError("test_bug_7414",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1232 "C format code returned wrong value");
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1233
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1234 Py_DECREF(dict);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1235 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1236 Py_RETURN_NONE;
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1237
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1238 failure:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1239 Py_XDECREF(dict);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1240 Py_XDECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1241 return NULL;
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1242 }
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1243
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1244
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1245 static volatile int x;
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1246
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1247 /* 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
1248 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
1249 */
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1250 static PyObject *
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
1251 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
1252 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1253 PyObject *tuple, *obj;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1254 Py_UNICODE *value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1255 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
1256
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1257 /* 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
1258 /* 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
1259 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
1260
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1261 tuple = PyTuple_New(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1262 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1263 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
1264
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1265 obj = PyUnicode_Decode("test", strlen("test"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1266 "ascii", NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1267 if (obj == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1268 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
1269
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1270 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
1271
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1272 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1273 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
1274 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1275 if (value != PyUnicode_AS_UNICODE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1276 return raiseTestError("test_u_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1277 "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
1278 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1279 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
1280 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1281 if (value != PyUnicode_AS_UNICODE(obj) ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1282 len != PyUnicode_GET_SIZE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1283 return raiseTestError("test_u_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1284 "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
1285
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1286 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1287 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1288 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
1289 }
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1290
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1291 /* 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
1292 static PyObject *
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1293 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
1294 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1295 PyObject *tuple, *obj;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1296 Py_UNICODE *value1, *value2;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1297 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
1298
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1299 tuple = PyTuple_New(2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1300 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1301 return NULL;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1302
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1303 obj = PyUnicode_FromString("test");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1304 PyTuple_SET_ITEM(tuple, 0, obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1305 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1306 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
1307
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1308 /* swap values on purpose */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1309 value1 = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1310 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
1311
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1312 /* Test Z for both values */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1313 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
1314 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1315 if (value1 != PyUnicode_AS_UNICODE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1316 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1317 "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
1318 if (value2 != NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1319 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1320 "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
1321
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1322 value1 = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1323 value2 = PyUnicode_AS_UNICODE(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1324 len1 = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1325 len2 = -1;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1326
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1327 /* Test Z# for both values */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1328 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
1329 &value2, &len2) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1330 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1331 if (value1 != PyUnicode_AS_UNICODE(obj) ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1332 len1 != PyUnicode_GET_SIZE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1333 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1334 "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
1335 if (value2 != NULL ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1336 len2 != 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1337 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1338 "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
1339
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1340 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1341 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
1342 }
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1343
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1344 static PyObject *
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1345 test_widechar(PyObject *self)
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1346 {
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1347 #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
1348 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
1349 size_t wtextlen = 1;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1350 #else
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1351 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
1352 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
1353 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1354 PyObject *wide, *utf8;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1355
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1356 wide = PyUnicode_FromWideChar(wtext, wtextlen);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1357 if (wide == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1358 return NULL;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1359
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1360 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
1361 if (utf8 == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1362 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1363 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1364 }
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1365
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1366 if (PyUnicode_GET_SIZE(wide) != PyUnicode_GET_SIZE(utf8)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1367 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1368 Py_DECREF(utf8);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1369 return raiseTestError("test_widechar",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1370 "wide string and utf8 string "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1371 "have different length");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1372 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1373 if (PyUnicode_Compare(wide, utf8)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1374 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1375 Py_DECREF(utf8);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1376 if (PyErr_Occurred())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1377 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1378 return raiseTestError("test_widechar",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1379 "wide string and utf8 string "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1380 "are different");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1381 }
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1382
61467
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 Py_DECREF(utf8);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1385 Py_RETURN_NONE;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1386 }
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1387
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1388 static PyObject *
65059
8de535def122 Issue #8670: Rename testcapi unicode test methods
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65058
diff changeset
1389 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
1390 {
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1391 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
1392 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
1393 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
1394
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1395 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
1396 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1397 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
1398 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
1399 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
1400
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66104
diff changeset
1401 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
1402 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
1403 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
1404 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1405 }
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1406
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1407 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
1408 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
1409 else
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1410 buflen = size;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1411 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
1412 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
1413 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
1414 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1415
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1416 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
1417 }
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1418
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1419 static PyObject *
65059
8de535def122 Issue #8670: Rename testcapi unicode test methods
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65058
diff changeset
1420 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
1421 {
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1422 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
1423 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
1424 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
1425
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1426 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
1427 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1428
65157
e3ae5b00ba15 PyUnicode_AsWideCharString() takes a PyObject*, not a PyUnicodeObject*
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65059
diff changeset
1429 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
1430 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
1431 return NULL;
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 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
1434 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
1435 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
1436 return 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 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
1438 }
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1439
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1440 static PyObject *
73680
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1441 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
1442 {
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1443 Py_UNICODE *unicode;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1444 Py_ssize_t length;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1445 char *errors = NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1446 PyObject *decimal;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1447 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
1448 int res;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1449
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1450 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
1451 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1452
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1453 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
1454 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
1455 if (decimal == NULL)
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1456 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1457
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1458 res = PyUnicode_EncodeDecimal(unicode, length,
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1459 PyBytes_AS_STRING(decimal),
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1460 errors);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1461 if (res < 0) {
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1462 Py_DECREF(decimal);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1463 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1464 }
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1465
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1466 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
1467 assert(new_length <= decimal_length);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1468 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
1469 if (res < 0)
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1470 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1471
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1472 return decimal;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1473 }
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1474
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1475 static PyObject *
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1476 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
1477 {
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1478 Py_UNICODE *unicode;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1479 Py_ssize_t length;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1480 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
1481 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1482 return PyUnicode_TransformDecimalToASCII(unicode, length);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1483 }
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1484
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1485 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
1486 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
1487 {
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1488 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
1489 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
1490 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
1491
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1492 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
1493 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
1494
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1495 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
1496 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
1497 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
1498 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
1499 }
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1500
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1501 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
1502 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
1503 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
1504 }
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1505
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1506
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1507 static PyObject *
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1508 test_empty_argparse(PyObject *self)
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1509 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1510 /* 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
1511 PyObject *tuple, *dict = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1512 static char *kwlist[] = {NULL};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1513 int result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1514 tuple = PyTuple_New(0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1515 if (!tuple)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1516 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1517 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
1518 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1519 dict = PyDict_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1520 if (!dict)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1521 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1522 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
1523 done:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1524 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1525 Py_XDECREF(dict);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1526 if (result < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1527 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1528 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1529 Py_RETURN_NONE;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1530 }
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1531 }
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1532
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1533 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
1534 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
1535 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1536 const char *encoding, *errors = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1537 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
1538 &encoding, &errors))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1539 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1540 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
1541 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1542
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1543 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
1544 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
1545 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1546 const char *encoding, *errors = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1547 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
1548 &encoding, &errors))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1549 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1550 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
1551 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1552
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1553
27549
7fcdeeb16ec0 _PyLong_NumBits(): The definition of this was too specific to the quirky
Tim Peters <tim.peters@gmail.com>
parents: 27487
diff changeset
1554 /* 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
1555 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
1556 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
1557 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1558 struct triple {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1559 long input;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1560 size_t nbits;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1561 int sign;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1562 } testcases[] = {{0, 0, 0},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1563 {1L, 1, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1564 {-1L, 1, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1565 {2L, 2, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1566 {-2L, 2, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1567 {3L, 2, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1568 {-3L, 2, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1569 {4L, 3, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1570 {-4L, 3, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1571 {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
1572 {-0x7fffL, 15, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1573 {0xffffL, 16, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1574 {-0xffffL, 16, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1575 {0xfffffffL, 28, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1576 {-0xfffffffL, 28, -1}};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1577 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
1578
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1579 for (i = 0; i < sizeof(testcases) / sizeof(struct triple); ++i) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1580 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
1581 size_t nbits = _PyLong_NumBits(plong);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1582 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
1583
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1584 Py_DECREF(plong);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1585 if (nbits != testcases[i].nbits)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1586 return raiseTestError("test_long_numbits",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1587 "wrong result for _PyLong_NumBits");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1588 if (sign != testcases[i].sign)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1589 return raiseTestError("test_long_numbits",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1590 "wrong result for _PyLong_Sign");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1591 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1592 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1593 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
1594 }
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
43866
8ed0280c2ab6 Replace PyObject_Unicode with PyObject_Str everywhere, and remove the
Thomas Heller <theller@ctypes.org>
parents: 43697
diff changeset
1596 /* 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
1597
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 36501
diff changeset
1598 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
1599 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
1600 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1601 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
1602 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
1603 Py_XDECREF(o1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1604 Py_XDECREF(o2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1605 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
1606 }
a4c70f3968be Merge part of the trunk changes into the p3yk branch. This merges from 43030
Thomas Wouters <thomas@python.org>
parents: 36501
diff changeset
1607
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1608 static PyObject *
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1609 raise_exception(PyObject *self, PyObject *args)
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1610 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1611 PyObject *exc;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1612 PyObject *exc_args, *v;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1613 int num_args, i;
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1614
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1615 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
1616 &exc, &num_args))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1617 return NULL;
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1618
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1619 exc_args = PyTuple_New(num_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1620 if (exc_args == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1621 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1622 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
1623 v = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1624 if (v == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1625 Py_DECREF(exc_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1626 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1627 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1628 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
1629 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1630 PyErr_SetObject(exc, exc_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1631 Py_DECREF(exc_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1632 return NULL;
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1633 }
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
1634
58661
9b351cb9ef98 Merged revisions 77866-77867 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58645
diff changeset
1635
9b351cb9ef98 Merged revisions 77866-77867 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58645
diff changeset
1636 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
1637
57723
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1638 static PyObject *
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1639 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
1640 if (PyDateTimeAPI) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1641 if (test_run_counter) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1642 /* Probably regrtest.py -R */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1643 Py_RETURN_NONE;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1644 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1645 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1646 PyErr_SetString(PyExc_AssertionError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1647 "PyDateTime_CAPI somehow initialized");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1648 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1649 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1650 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1651 test_run_counter++;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1652 PyDateTime_IMPORT;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1653 if (PyDateTimeAPI)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1654 Py_RETURN_NONE;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1655 else
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1656 return NULL;
57723
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1657 }
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1658
58661
9b351cb9ef98 Merged revisions 77866-77867 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58645
diff changeset
1659
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1660 #ifdef WITH_THREAD
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1661
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
1662 /* 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
1663 * `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
1664 * 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
1665 * 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
1666 * 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
1667 * 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
1668 */
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1669 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
1670
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
1671 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
1672 _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
1673 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1674 PyObject *rc;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1675 int success;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1676 PyGILState_STATE s = PyGILState_Ensure();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1677 rc = PyObject_CallFunction((PyObject *)callable, "");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1678 success = (rc != NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1679 Py_XDECREF(rc);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1680 PyGILState_Release(s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1681 return success;
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1682 }
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1683
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
1684 /* 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
1685 * 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
1686 */
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1687 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
1688 _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
1689 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1690 _make_call(callable);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1691 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
1692 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37875
diff changeset
1693
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1694 static PyObject *
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1695 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
1696 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1697 PyObject *fn;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1698 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
1699
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1700 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
1701 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
1702
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1703 if (!PyCallable_Check(fn)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1704 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
1705 fn->ob_type->tp_name);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1706 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1707 }
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
1708
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1709 /* 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
1710 PyEval_InitThreads();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1711 thread_done = PyThread_allocate_lock();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1712 if (thread_done == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1713 return PyErr_NoMemory();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1714 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
1715
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1716 /* 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
1717 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
1718 /* 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
1719 success &= _make_call(fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1720 /* 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
1721 Py_BEGIN_ALLOW_THREADS
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1722 success &= _make_call(fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1723 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
1724 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
1725
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1726 /* 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
1727 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
1728 to test <wink>
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1729 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1730 Py_BEGIN_ALLOW_THREADS
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1731 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
1732 success &= _make_call(fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1733 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
1734 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
1735
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1736 /* 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
1737 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
1738
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1739 PyThread_free_lock(thread_done);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1740 if (!success)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1741 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1742 Py_RETURN_NONE;
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1743 }
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1744
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1745 /* test Py_AddPendingCalls using threads */
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1746 static int _pending_callback(void *arg)
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1747 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1748 /* 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
1749 PyObject *callable = (PyObject *)arg;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1750 PyObject *r = PyObject_CallObject(callable, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1751 Py_DECREF(callable);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1752 Py_XDECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1753 return r != NULL ? 0 : -1;
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1754 }
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1755
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1756 /* 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
1757 * run from any python thread.
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1758 */
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1759 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
1760 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1761 PyObject *callable;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1762 int r;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1763 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
1764 return NULL;
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1765
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1766 /* 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
1767 Py_INCREF(callable);
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1768
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1769 Py_BEGIN_ALLOW_THREADS
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1770 r = Py_AddPendingCall(&_pending_callback, callable);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1771 Py_END_ALLOW_THREADS
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1772
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1773 if (r<0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1774 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
1775 Py_INCREF(Py_False);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1776 return Py_False;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1777 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1778 Py_INCREF(Py_True);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1779 return Py_True;
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1780 }
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1781 #endif
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1782
42813
74b993a8ad6f Use unicode strings
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1783 /* 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
1784 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
1785 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
1786 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1787 PyObject *result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1788 char *msg;
66799
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1789 static const Py_UNICODE one[] = {'1', 0};
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1790
66799
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1791 #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
1792 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
1793 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
1794 return NULL; \
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1795 if (Py_UNICODE_strcmp(PyUnicode_AS_UNICODE(result), one)) { \
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1796 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
1797 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
1798 } \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1799 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
1800
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1801 CHECK_1_FORMAT("%d", int);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1802 CHECK_1_FORMAT("%ld", long);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1803 /* 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
1804 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
1805
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1806 /* 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
1807 CHECK_1_FORMAT("%u", unsigned int);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1808 CHECK_1_FORMAT("%lu", unsigned long);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1809 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
1810
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1811 /* "%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
1812 #ifdef HAVE_LONG_LONG
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1813 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
1814 CHECK_1_FORMAT("%lld", PY_LONG_LONG);
57295
ac768c8e13ac Merged revisions 76308 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56900
diff changeset
1815 #endif
ac768c8e13ac Merged revisions 76308 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56900
diff changeset
1816
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1817 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
1818
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1819 Fail:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1820 Py_XDECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1821 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
1822
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1823 #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
1824 }
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1825
58226
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1826
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1827 static PyObject *
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1828 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
1829 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
1830 int result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1831 if (py_s == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1832 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1833 result = PyUnicode_CompareWithASCIIString(py_s, "str");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1834 Py_DECREF(py_s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1835 if (!result) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1836 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
1837 "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
1838 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1839 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1840 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
1841 }
58226
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1842
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1843 /* 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
1844 static PyObject *
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1845 test_with_docstring(PyObject *self)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1846 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1847 Py_RETURN_NONE;
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1848 }
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
1849
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1850 /* 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
1851 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
1852 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
1853 double result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1854 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
1855
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1856 #define CHECK_STRING(STR, expected) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1857 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
1858 if (result == -1.0 && PyErr_Occurred()) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1859 return NULL; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1860 if (result != expected) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1861 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
1862 goto fail; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1863 }
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1864
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1865 #define CHECK_INVALID(STR) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1866 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
1867 if (result == -1.0 && PyErr_Occurred()) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1868 if (PyErr_ExceptionMatches(PyExc_ValueError)) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1869 PyErr_Clear(); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1870 else \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1871 return NULL; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1872 } \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1873 else { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1874 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
1875 goto fail; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1876 }
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1877
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1878 CHECK_STRING("0.1", 0.1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1879 CHECK_STRING("1.234", 1.234);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1880 CHECK_STRING("-1.35", -1.35);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1881 CHECK_STRING(".1e01", 1.0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1882 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
1883
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1884 CHECK_INVALID(" 0.1");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1885 CHECK_INVALID("\t\n-3");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1886 CHECK_INVALID(".123 ");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1887 CHECK_INVALID("3\n");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1888 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
1889
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1890 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
1891 fail:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1892 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
1893 #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
1894 #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
1895 }
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1896
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
1897
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1898 /* Coverage testing of capsule objects. */
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1899
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1900 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
1901 static char *capsule_pointer = "capsule pointer";
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1902 static char *capsule_context = "capsule context";
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1903 static const char *capsule_error = NULL;
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1904 static int
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1905 capsule_destructor_call_count = 0;
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1906
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1907 static void
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1908 capsule_destructor(PyObject *o) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1909 capsule_destructor_call_count++;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1910 if (PyCapsule_GetContext(o) != capsule_context) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1911 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
1912 } 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
1913 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
1914 } 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
1915 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
1916 } 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
1917 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
1918 }
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1919 }
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1920
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1921 typedef struct {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1922 char *name;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1923 char *module;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1924 char *attribute;
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1925 } known_capsule;
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1926
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1927 static PyObject *
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1928 test_capsule(PyObject *self, PyObject *args)
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1929 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1930 PyObject *object;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1931 const char *error = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1932 void *pointer;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1933 void *pointer2;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1934 known_capsule known_capsules[] = {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1935 #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
1936 KNOWN_CAPSULE("_socket", "CAPI"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1937 KNOWN_CAPSULE("_curses", "_C_API"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1938 KNOWN_CAPSULE("datetime", "datetime_CAPI"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1939 { NULL, NULL },
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1940 };
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1941 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
1942
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1943 #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
1944
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1945 #define CHECK_DESTRUCTOR \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1946 if (capsule_error) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1947 FAIL(capsule_error); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1948 } \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1949 else if (!capsule_destructor_call_count) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1950 FAIL("destructor not called!"); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1951 } \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1952 capsule_destructor_call_count = 0; \
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1953
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1954 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
1955 PyCapsule_SetContext(object, capsule_context);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1956 capsule_destructor(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1957 CHECK_DESTRUCTOR;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1958 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1959 CHECK_DESTRUCTOR;
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1960
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1961 object = PyCapsule_New(known, "ignored", NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1962 PyCapsule_SetPointer(object, capsule_pointer);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1963 PyCapsule_SetName(object, capsule_name);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1964 PyCapsule_SetDestructor(object, capsule_destructor);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1965 PyCapsule_SetContext(object, capsule_context);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1966 capsule_destructor(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1967 CHECK_DESTRUCTOR;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1968 /* intentionally access using the wrong name */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1969 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
1970 if (!PyErr_Occurred()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1971 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
1972 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1973 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1974 if (pointer2) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1975 if (pointer2 == capsule_pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1976 FAIL("PyCapsule_GetPointer should not have"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1977 " returned the internal pointer!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1978 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1979 FAIL("PyCapsule_GetPointer should have "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1980 "returned NULL pointer but did not!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1981 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1982 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1983 PyCapsule_SetDestructor(object, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1984 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1985 if (capsule_destructor_call_count) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1986 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
1987 }
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1988
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1989 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
1990 /* 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
1991 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
1992 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1993 static char buffer[256];
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1994 #undef FAIL
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
1995 #define FAIL(x) \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1996 { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1997 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
1998 x, known->module, known->attribute); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1999 error = buffer; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2000 goto exit; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2001 } \
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2002
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2003 PyObject *module = PyImport_ImportModule(known->module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2004 if (module) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2005 pointer = PyCapsule_Import(known->name, 0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2006 if (!pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2007 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2008 FAIL("PyCapsule_GetPointer returned NULL unexpectedly!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2009 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2010 object = PyObject_GetAttrString(module, known->attribute);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2011 if (!object) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2012 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2013 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2014 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2015 pointer2 = PyCapsule_GetPointer(object,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2016 "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
2017 if (!PyErr_Occurred()) {
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 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2020 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
2021 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2022 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2023 if (pointer2) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2024 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2025 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2026 if (pointer2 == pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2027 FAIL("PyCapsule_GetPointer should not have"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2028 " returned its internal pointer!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2029 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2030 FAIL("PyCapsule_GetPointer should have"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2031 " returned NULL pointer 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 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2034 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2035 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2036 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2037 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2038 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2039 }
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2040
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2041 exit:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2042 if (error) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2043 return raiseTestError("test_capsule", error);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2044 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2045 Py_RETURN_NONE;
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2046 #undef FAIL
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2047 }
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2048
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2049 #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
2050 /* Profiling of integer performance */
47679
8c6068f14ee8 Make print_delta static.
Martin v. Löwis <martin@v.loewis.de>
parents: 47580
diff changeset
2051 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
2052 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2053 e->tv_sec -= s->tv_sec;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2054 e->tv_usec -= s->tv_usec;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2055 if (e->tv_usec < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2056 e->tv_sec -=1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2057 e->tv_usec += 1000000;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2058 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2059 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
2060 }
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2061
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2062 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
2063 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
2064 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2065 int i, k;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2066 struct timeval start, stop;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2067 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
2068
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2069 /* Test 1: Allocate and immediately deallocate
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2070 many small integers */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2071 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2072 for(k=0; k < 20000; k++)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2073 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2074 single = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2075 Py_DECREF(single);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2076 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2077 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2078 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
2079
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2080 /* Test 2: Allocate and immediately deallocate
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2081 many large integers */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2082 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2083 for(k=0; k < 20000; k++)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2084 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2085 single = PyLong_FromLong(i+1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2086 Py_DECREF(single);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2087 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2088 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2089 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
2090
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2091 /* 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
2092 them all simultaneously. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2093 multiple = malloc(sizeof(PyObject*) * 1000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2094 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2095 for(k=0; k < 20000; k++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2096 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2097 multiple[i] = PyLong_FromLong(i+1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2098 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2099 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2100 Py_DECREF(multiple[i]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2101 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2102 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2103 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2104 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
2105
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2106 /* 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
2107 them all simultaneously. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2108 multiple = malloc(sizeof(PyObject*) * 1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2109 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2110 for(k=0; k < 20; k++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2111 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2112 multiple[i] = PyLong_FromLong(i+1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2113 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2114 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2115 Py_DECREF(multiple[i]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2116 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2117 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2118 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2119 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
2120
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2121 /* Test 5: Allocate many integers < 32000 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2122 multiple = malloc(sizeof(PyObject*) * 1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2123 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2124 for(k=0; k < 10; k++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2125 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2126 multiple[i] = PyLong_FromLong(i+1000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2127 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2128 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2129 Py_DECREF(multiple[i]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2130 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2131 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2132 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2133 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
2134
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2135 /* Test 6: Perform small int addition */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2136 op1 = PyLong_FromLong(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2137 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2138 for(i=0; i < 10000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2139 result = PyNumber_Add(op1, op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2140 Py_DECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2141 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2142 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2143 Py_DECREF(op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2144 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
2145
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2146 /* Test 7: Perform medium int addition */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2147 op1 = PyLong_FromLong(1000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2148 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2149 for(i=0; i < 10000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2150 result = PyNumber_Add(op1, op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2151 Py_DECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2152 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2153 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2154 Py_DECREF(op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2155 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
2156
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2157 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2158 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
2159 }
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2160 #endif
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2161
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
2162 /* 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
2163 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
2164 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
2165 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2166 PyObject *file;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2167 PyObject *traceback;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2168 int result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2169
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2170 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
2171 &traceback, &file))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2172 return NULL;
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 result = PyTraceBack_Print(traceback, file);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2175 if (result < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2176 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2177 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
2178 }
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
2179
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2180 /* To test the format of exceptions as printed out. */
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2181 static PyObject *
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2182 exception_print(PyObject *self, PyObject *args)
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2183 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2184 PyObject *value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2185 PyObject *tb;
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2186
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2187 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
2188 &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2189 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2190 if (!PyExceptionInstance_Check(value)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2191 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
2192 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2193 }
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2194
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2195 tb = PyException_GetTraceback(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2196 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
2197 Py_XDECREF(tb);
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2198
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2199 Py_RETURN_NONE;
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2200 }
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2201
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2202
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2203
48704
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2204
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2205 /* 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
2206 static PyObject *
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2207 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
2208 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2209 PyErr_NoMemory();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2210 return NULL;
48704
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2211 }
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2212
54421
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2213 /* Issue 6012 */
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2214 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
2215 static int
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2216 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
2217 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2218 /* 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
2219 assert(str1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2220 str2 = str1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2221 Py_INCREF(str2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2222 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
2223 }
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2224 static PyObject*
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2225 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
2226 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2227 PyObject *res;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2228 str1 = str2 = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2229 if (!PyArg_ParseTuple(args, "O&O&",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2230 PyUnicode_FSConverter, &str1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2231 failing_converter, &str2)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2232 if (!str2)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2233 /* argument converter not called? */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2234 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2235 /* Should be 1 */
67347
3bf4d9f1660a Issue #9566: use Py_ssize_t instead of int
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
2236 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
2237 Py_DECREF(str2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2238 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2239 return res;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2240 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2241 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
2242 }
48704
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2243
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2244 /* 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
2245 static PyObject *
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2246 code_newempty(PyObject *self, PyObject *args)
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2247 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2248 const char *filename;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2249 const char *funcname;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2250 int firstlineno;
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2251
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2252 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
2253 &filename, &funcname, &firstlineno))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2254 return NULL;
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2255
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2256 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
2257 }
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2258
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2259 /* Test PyErr_NewExceptionWithDoc (also exercise PyErr_NewException).
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2260 Run via Lib/test/test_exceptions.py */
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2261 static PyObject *
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2262 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
2263 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2264 const char *name;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2265 const char *doc = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2266 PyObject *base = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2267 PyObject *dict = NULL;
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2268
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2269 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
2270
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2271 if (!PyArg_ParseTupleAndKeywords(args, kwargs,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2272 "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
2273 &name, &doc, &base, &dict))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2274 return NULL;
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2275
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2276 return PyErr_NewExceptionWithDoc(name, doc, base, dict);
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2277 }
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2278
68127
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2279 static PyObject *
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2280 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
2281 {
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2282 Py_buffer info;
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2283 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
2284 return NULL;
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2285 return PyMemoryView_FromBuffer(&info);
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2286 }
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2287
61555
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2288 /* 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
2289 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
2290 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
2291 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
2292 {
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2293 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
2294 /* 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
2295 !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
2296 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
2297 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
2298 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
2299 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
2300 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
2301 }
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2302
74471
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2303 /* 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
2304 static PyObject *
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2305 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
2306 {
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2307 const char *code;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2308 int r;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2309 PyThreadState *substate, *mainstate;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2310
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2311 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
2312 &code))
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2313 return NULL;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2314
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2315 mainstate = PyThreadState_Get();
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2316
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2317 PyThreadState_Swap(NULL);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2318
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2319 substate = Py_NewInterpreter();
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2320 r = PyRun_SimpleString(code);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2321 Py_EndInterpreter(substate);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2322
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2323 PyThreadState_Swap(mainstate);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2324
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2325 return PyLong_FromLong(r);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2326 }
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2327
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2328
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2329 static PyMethodDef TestMethods[] = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2330 {"raise_exception", raise_exception, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2331 {"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
2332 {"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
2333 {"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
2334 {"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
2335 {"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
2336 {"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
2337 {"test_broken_memoryview", (PyCFunction)test_broken_memoryview,METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2338 {"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
2339 {"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
2340 METH_NOARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2341 {"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
2342 {"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
2343 {"test_empty_argparse", (PyCFunction)test_empty_argparse,METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2344 {"test_bug_7414", (PyCFunction)test_bug_7414, METH_NOARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2345 {"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
2346 {"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
2347 {"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
2348 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
2349 {"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
2350 {"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
2351 {"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
2352 {"getargs_tuple", getargs_tuple, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2353 {"getargs_keywords", (PyCFunction)getargs_keywords,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2354 METH_VARARGS|METH_KEYWORDS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2355 {"getargs_b", getargs_b, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2356 {"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
2357 {"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
2358 {"getargs_H", getargs_H, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2359 {"getargs_I", getargs_I, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2360 {"getargs_k", getargs_k, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2361 {"getargs_i", getargs_i, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2362 {"getargs_l", getargs_l, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2363 {"getargs_n", getargs_n, 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
2364 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2365 {"getargs_L", getargs_L, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2366 {"getargs_K", getargs_K, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2367 {"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
2368 {"test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2369 (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
2370 {"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
2371 #endif
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2372 {"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
2373 {"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
2374 {"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
2375 {"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
2376 {"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
2377 {"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
2378 {"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
2379 {"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
2380 {"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
2381 {"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
2382 {"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
2383 {"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
2384 {"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
2385 {"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
2386 {"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
2387 (PyCFunction)codec_incrementalencoder, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2388 {"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
2389 (PyCFunction)codec_incrementaldecoder, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2390 {"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
2391 {"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
2392 {"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
2393 {"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
2394 {"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
2395 {"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
2396 {"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
2397 {"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
2398 #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
2399 {"_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
2400 {"_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
2401 #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
2402 #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
2403 {"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
2404 #endif
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2405 {"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
2406 {"exception_print", exception_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
2407 {"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
2408 {"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
2409 {"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
2410 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
2411 {"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
2412 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
2413 {"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
2414 {"run_in_subinterp", run_in_subinterp, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2415 {NULL, NULL} /* sentinel */
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2416 };
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2417
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
2418 #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
2419
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2420 typedef struct {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2421 char bool_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2422 char byte_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2423 unsigned char ubyte_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2424 short short_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2425 unsigned short ushort_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2426 int int_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2427 unsigned int uint_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2428 long long_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2429 unsigned long ulong_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2430 Py_ssize_t pyssizet_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2431 float float_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2432 double double_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2433 char inplace_member[6];
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41587
diff changeset
2434 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2435 PY_LONG_LONG longlong_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2436 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
2437 #endif
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2438 } all_structmembers;
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2439
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2440 typedef struct {
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2441 PyObject_HEAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2442 all_structmembers structmembers;
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2443 } test_structmembers;
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2444
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2445 static struct PyMemberDef test_members[] = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2446 {"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
2447 {"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
2448 {"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
2449 {"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
2450 {"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
2451 {"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
2452 {"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
2453 {"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
2454 {"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
2455 {"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
2456 {"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
2457 {"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
2458 {"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
2459 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2460 {"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
2461 {"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
2462 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2463 {NULL}
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2464 };
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2465
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2466
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2467 static PyObject *
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2468 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
2469 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2470 static char *keywords[] = {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2471 "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
2472 "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
2473 "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
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 "T_LONGLONG", "T_ULONGLONG",
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2476 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2477 NULL};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2478 static char *fmt = "|bbBhHiIlknfds#"
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2479 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2480 "LK"
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2481 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2482 ;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2483 test_structmembers *ob;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2484 const char *s = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2485 Py_ssize_t string_len = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2486 ob = PyObject_New(test_structmembers, type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2487 if (ob == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2488 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2489 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
2490 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
2491 &ob->structmembers.bool_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2492 &ob->structmembers.byte_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2493 &ob->structmembers.ubyte_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2494 &ob->structmembers.short_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2495 &ob->structmembers.ushort_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2496 &ob->structmembers.int_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2497 &ob->structmembers.uint_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2498 &ob->structmembers.long_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2499 &ob->structmembers.ulong_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2500 &ob->structmembers.pyssizet_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2501 &ob->structmembers.float_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2502 &ob->structmembers.double_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2503 &s, &string_len
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2504 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2505 , &ob->structmembers.longlong_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2506 &ob->structmembers.ulonglong_member
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2507 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2508 )) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2509 Py_DECREF(ob);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2510 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2511 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2512 if (s != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2513 if (string_len > 5) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2514 Py_DECREF(ob);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2515 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
2516 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2517 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2518 strcpy(ob->structmembers.inplace_member, s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2519 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2520 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2521 strcpy(ob->structmembers.inplace_member, "");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2522 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2523 return (PyObject *)ob;
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2524 }
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2525
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2526 static void
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2527 test_structmembers_free(PyObject *ob)
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
2528 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2529 PyObject_FREE(ob);
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2530 }
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2531
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2532 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
2533 PyVarObject_HEAD_INIT(NULL, 0)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2534 "test_structmembersType",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2535 sizeof(test_structmembers), /* tp_basicsize */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2536 0, /* tp_itemsize */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2537 test_structmembers_free, /* destructor tp_dealloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2538 0, /* tp_print */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2539 0, /* tp_getattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2540 0, /* tp_setattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2541 0, /* tp_reserved */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2542 0, /* tp_repr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2543 0, /* tp_as_number */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2544 0, /* tp_as_sequence */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2545 0, /* tp_as_mapping */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2546 0, /* tp_hash */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2547 0, /* tp_call */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2548 0, /* tp_str */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2549 PyObject_GenericGetAttr, /* tp_getattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2550 PyObject_GenericSetAttr, /* tp_setattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2551 0, /* tp_as_buffer */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2552 0, /* tp_flags */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2553 "Type containing all structmember types",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2554 0, /* traverseproc tp_traverse */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2555 0, /* tp_clear */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2556 0, /* tp_richcompare */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2557 0, /* tp_weaklistoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2558 0, /* tp_iter */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2559 0, /* tp_iternext */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2560 0, /* tp_methods */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2561 test_members, /* tp_members */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2562 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2563 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2564 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2565 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2566 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2567 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2568 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2569 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2570 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
2571 };
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2572
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
2573
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
2574
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
2575 static struct PyModuleDef _testcapimodule = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2576 PyModuleDef_HEAD_INIT,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2577 "_testcapi",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2578 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2579 -1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2580 TestMethods,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2581 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2582 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2583 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2584 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
2585 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
2586
24363
979ff5d0ae07 Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents: 22726
diff changeset
2587 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
2588 PyInit__testcapi(void)
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2589 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2590 PyObject *m;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2591
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2592 m = PyModule_Create(&_testcapimodule);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2593 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2594 return NULL;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2595
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2596 Py_TYPE(&_HashInheritanceTester_Type)=&PyType_Type;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2597 Py_TYPE(&_MemoryViewTester_Type)=&PyType_Type;
50399
5cc073d661f7 Merged revisions 68101 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 50374
diff changeset
2598
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2599 Py_TYPE(&test_structmembersType)=&PyType_Type;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2600 Py_INCREF(&test_structmembersType);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2601 /* 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
2602 test_capi to automatically call this */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2603 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
2604
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2605 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
2606 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
2607 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
2608 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
2609 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
2610 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
2611 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
2612 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
2613 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
2614 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
2615 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
2616 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
2617 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
2618 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
2619 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
2620 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
2621 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
2622 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
2623 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
2624 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
2625 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
2626 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
2627 Py_INCREF(&PyInstanceMethod_Type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2628 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
2629
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2630 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
2631 Py_INCREF(TestError);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2632 PyModule_AddObject(m, "error", TestError);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2633 return m;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2634 }