annotate Modules/_testcapimodule.c @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 78ec18f5cb45
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
1 /*
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2 * C Extension module to test Python interpreter C APIs.
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3 *
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
4 * The 'test_*' functions exported by this module are run as part of the
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
5 * standard Python regression test, via Lib/test/test_capi.py.
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
6 */
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
7
43697
ffaa6ce4bfb4 Try to get this test to pass on Win64 by making clean for ssize_t
Neal Norwitz <nnorwitz@gmail.com>
parents: 42997
diff changeset
8 #define PY_SSIZE_T_CLEAN
ffaa6ce4bfb4 Try to get this test to pass on Win64 by making clean for ssize_t
Neal Norwitz <nnorwitz@gmail.com>
parents: 42997
diff changeset
9
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
10 #include "Python.h"
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
11 #include <float.h>
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
12 #include "structmember.h"
57723
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
13 #include "datetime.h"
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
14
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
15 #ifdef WITH_THREAD
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
16 #include "pythread.h"
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
17 #endif /* WITH_THREAD */
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
18 static PyObject *TestError; /* set to exception object in init */
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
19
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
20 /* Raise TestError with test_name + ": " + msg, and return NULL. */
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
21
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
22 static PyObject *
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
23 raiseTestError(const char* test_name, const char* msg)
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
24 {
68809
4c2135930882 Issue #10833: Use PyErr_Format() and PyUnicode_FromFormat() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68805
diff changeset
25 PyErr_Format(TestError, "%s: %s", test_name, msg);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
26 return NULL;
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
27 }
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
28
18835
2dea40e40d9d Patch #411138: Rename config.h to pyconfig.h. Closes bug #231774.
Martin v. Löwis <martin@v.loewis.de>
parents: 18294
diff changeset
29 /* Test #defines from pyconfig.h (particularly the SIZEOF_* defines).
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
30
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
31 The ones derived from autoconf on the UNIX-like OSes can be relied
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
32 upon (in the absence of sloppy cross-compiling), but the Windows
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
33 platforms have these hardcoded. Better safe than sorry.
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
34 */
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
35 static PyObject*
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
36 sizeof_error(const char* fatname, const char* typname,
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
37 int expected, int got)
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
38 {
68805
74d3dc78f0db Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
39 PyErr_Format(TestError,
74d3dc78f0db Issue #10833: Use PyUnicode_FromFormat() and PyErr_Format() instead of
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
40 "%s #define == %d but sizeof(%s) == %d",
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
41 fatname, expected, typname, got);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
42 return (PyObject*)NULL;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
43 }
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
44
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
45 static PyObject*
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
46 test_config(PyObject *self)
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
47 {
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
48 #define CHECK_SIZEOF(FATNAME, TYPE) \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
49 if (FATNAME != sizeof(TYPE)) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
50 return sizeof_error(#FATNAME, #TYPE, FATNAME, sizeof(TYPE))
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
51
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
52 CHECK_SIZEOF(SIZEOF_SHORT, short);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
53 CHECK_SIZEOF(SIZEOF_INT, int);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
54 CHECK_SIZEOF(SIZEOF_LONG, long);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
55 CHECK_SIZEOF(SIZEOF_VOID_P, void*);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
56 CHECK_SIZEOF(SIZEOF_TIME_T, time_t);
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
57 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
58 CHECK_SIZEOF(SIZEOF_LONG_LONG, PY_LONG_LONG);
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
59 #endif
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
60
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
61 #undef CHECK_SIZEOF
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
62
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
63 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
64 return Py_None;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
65 }
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
66
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
67 static PyObject*
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
68 test_sizeof_c_types(PyObject *self)
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
69 {
86746
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
70 #define CHECK_SIZEOF(TYPE, EXPECTED) \
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
71 if (EXPECTED != sizeof(TYPE)) { \
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
72 PyErr_Format(TestError, \
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
73 "sizeof(%s) = %u instead of %u", \
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
74 #TYPE, sizeof(TYPE), EXPECTED); \
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
75 return (PyObject*)NULL; \
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
76 }
86746
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
77 #define IS_SIGNED(TYPE) (((TYPE)-1) < (TYPE)0)
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
78 #define CHECK_SIGNNESS(TYPE, SIGNED) \
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
79 if (IS_SIGNED(TYPE) != SIGNED) { \
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
80 PyErr_Format(TestError, \
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
81 "%s signness is, instead of %i", \
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
82 #TYPE, IS_SIGNED(TYPE), SIGNED); \
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
83 return (PyObject*)NULL; \
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
84 }
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
85
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
86 /* integer types */
86746
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
87 CHECK_SIZEOF(Py_UCS1, 1);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
88 CHECK_SIZEOF(Py_UCS2, 2);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
89 CHECK_SIZEOF(Py_UCS4, 4);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
90 CHECK_SIGNNESS(Py_UCS1, 0);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
91 CHECK_SIGNNESS(Py_UCS2, 0);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
92 CHECK_SIGNNESS(Py_UCS4, 0);
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
93 #ifdef HAVE_INT32_T
86746
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
94 CHECK_SIZEOF(PY_INT32_T, 4);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
95 CHECK_SIGNNESS(PY_INT32_T, 1);
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
96 #endif
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
97 #ifdef HAVE_UINT32_T
86746
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
98 CHECK_SIZEOF(PY_UINT32_T, 4);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
99 CHECK_SIGNNESS(PY_UINT32_T, 0);
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
100 #endif
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
101 #ifdef HAVE_INT64_T
86746
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
102 CHECK_SIZEOF(PY_INT64_T, 8);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
103 CHECK_SIGNNESS(PY_INT64_T, 1);
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
104 #endif
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
105 #ifdef HAVE_UINT64_T
86746
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
106 CHECK_SIZEOF(PY_UINT64_T, 8);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
107 CHECK_SIGNNESS(PY_UINT64_T, 0);
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
108 #endif
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
109
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
110 /* pointer/size types */
86746
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
111 CHECK_SIZEOF(size_t, sizeof(void *));
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
112 CHECK_SIGNNESS(size_t, 0);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
113 CHECK_SIZEOF(Py_ssize_t, sizeof(void *));
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
114 CHECK_SIGNNESS(Py_ssize_t, 1);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
115
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
116 CHECK_SIZEOF(Py_uintptr_t, sizeof(void *));
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
117 CHECK_SIGNNESS(Py_uintptr_t, 0);
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
118 CHECK_SIZEOF(Py_intptr_t, sizeof(void *));
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
119 CHECK_SIGNNESS(Py_intptr_t, 1);
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
120
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
121 Py_INCREF(Py_None);
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
122 return Py_None;
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
123
86746
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
124 #undef IS_SIGNED
5bf96a96f31d Issue #19433: test_capi: check signness of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 86745
diff changeset
125 #undef CHECK_SIGNESS
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
126 #undef CHECK_SIZEOF
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
127 }
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
128
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
129
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
130 static PyObject*
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
131 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
132 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
133 PyObject* list;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
134 int i;
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
135
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
136 /* 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
137 #define NLIST 30
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
138 list = PyList_New(NLIST);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
139 if (list == (PyObject*)NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
140 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
141 /* list = range(NLIST) */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
142 for (i = 0; i < NLIST; ++i) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
143 PyObject* anint = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
144 if (anint == (PyObject*)NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
145 Py_DECREF(list);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
146 return (PyObject*)NULL;
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 PyList_SET_ITEM(list, i, anint);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
149 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
150 /* list.reverse(), via PyList_Reverse() */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
151 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
152 if (i != 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
153 Py_DECREF(list);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
154 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
155 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
156 /* 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
157 for (i = 0; i < NLIST; ++i) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
158 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
159 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
160 PyErr_SetString(TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
161 "test_list_api: reverse screwed up");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
162 Py_DECREF(list);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
163 return (PyObject*)NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
164 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
165 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
166 Py_DECREF(list);
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
167 #undef NLIST
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
168
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
169 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
170 return Py_None;
16582
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
diff changeset
171 }
9a8e961b505f Related to SF bug 132008 (PyList_Reverse blows up).
Tim Peters <tim.peters@gmail.com>
parents: 16447
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 static int
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
174 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
175 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
176 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
177 int i;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
178 PyObject *dict = PyDict_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
179 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
180
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
181 if (dict == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
182 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
183
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
184 for (i = 0; i < count; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
185 v = PyLong_FromLong(i);
84831
d49f65ff4f3c Fix possible NULL pointer dereferences in testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84732
diff changeset
186 if (v == NULL) {
d49f65ff4f3c Fix possible NULL pointer dereferences in testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84732
diff changeset
187 return -1;
d49f65ff4f3c Fix possible NULL pointer dereferences in testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84732
diff changeset
188 }
84732
656954ec54a1 Add missing check of PyDict_SetItem()'s return value
Christian Heimes <christian@cheimes.de>
parents: 80180
diff changeset
189 if (PyDict_SetItem(dict, v, v) < 0) {
656954ec54a1 Add missing check of PyDict_SetItem()'s return value
Christian Heimes <christian@cheimes.de>
parents: 80180
diff changeset
190 Py_DECREF(v);
656954ec54a1 Add missing check of PyDict_SetItem()'s return value
Christian Heimes <christian@cheimes.de>
parents: 80180
diff changeset
191 return -1;
656954ec54a1 Add missing check of PyDict_SetItem()'s return value
Christian Heimes <christian@cheimes.de>
parents: 80180
diff changeset
192 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
193 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
194 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
195
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
196 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
197 PyObject *o;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
198 iterations++;
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
199
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
200 i = PyLong_AS_LONG(v) + 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
201 o = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
202 if (o == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
203 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
204 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
205 Py_DECREF(o);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
206 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
207 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
208 Py_DECREF(o);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
209 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
210
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
211 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
212
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
213 if (iterations != count) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
214 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
215 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
216 "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
217 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
218 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
219 return 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
220 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
221 }
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
222
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
223 static PyObject*
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
224 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
225 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
226 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
227
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
228 for (i = 0; i < 200; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
229 if (test_dict_inner(i) < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
230 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
231 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
232 }
17496
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
233
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
234 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
235 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
236 }
0b060cf762ce Slight adaptation of Michael Hudson's patch to test PyDict_Next()
Guido van Rossum <guido@python.org>
parents: 16582
diff changeset
237
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
238
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
239 /* 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
240 * 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
241 */
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
242 static PyTypeObject _HashInheritanceTester_Type = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
243 PyVarObject_HEAD_INIT(NULL, 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
244 "hashinheritancetester", /* Name of this type */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
245 sizeof(PyObject), /* Basic object size */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
246 0, /* Item size for varobject */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
247 (destructor)PyObject_Del, /* tp_dealloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
248 0, /* tp_print */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
249 0, /* tp_getattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
250 0, /* tp_setattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
251 0, /* tp_reserved */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
252 0, /* tp_repr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
253 0, /* tp_as_number */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
254 0, /* tp_as_sequence */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
255 0, /* tp_as_mapping */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
256 0, /* tp_hash */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
257 0, /* tp_call */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
258 0, /* tp_str */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
259 PyObject_GenericGetAttr, /* tp_getattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
260 0, /* tp_setattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
261 0, /* tp_as_buffer */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
262 Py_TPFLAGS_DEFAULT, /* tp_flags */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
263 0, /* tp_doc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
264 0, /* tp_traverse */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
265 0, /* tp_clear */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
266 0, /* tp_richcompare */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
267 0, /* tp_weaklistoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
268 0, /* tp_iter */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
269 0, /* tp_iternext */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
270 0, /* tp_methods */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
271 0, /* tp_members */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
272 0, /* tp_getset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
273 0, /* tp_base */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
274 0, /* tp_dict */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
275 0, /* tp_descr_get */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
276 0, /* tp_descr_set */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
277 0, /* tp_dictoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
278 0, /* tp_init */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
279 0, /* tp_alloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
280 PyType_GenericNew, /* tp_new */
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
281 };
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
282
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
283 static PyObject*
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
284 test_lazy_hash_inheritance(PyObject* self)
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
285 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
286 PyTypeObject *type;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
287 PyObject *obj;
65610
b9dcfdffcb62 Issue #10185: use Py_hash_t instead of long
Antoine Pitrou <solipsis@pitrou.net>
parents: 65157
diff changeset
288 Py_hash_t hash;
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
289
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
290 type = &_HashInheritanceTester_Type;
53811
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
291
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
292 if (type->tp_dict != NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
293 /* 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
294 -R is being used. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
295 Py_RETURN_NONE;
53811
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
296
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
297
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
298 obj = PyObject_New(PyObject, type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
299 if (obj == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
300 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
301 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
302 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
303 "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
304 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
305 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
306
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
307 if (type->tp_dict != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
308 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
309 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
310 "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
311 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
312 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
313 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
314
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
315 hash = PyObject_Hash(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
316 if ((hash == -1) && PyErr_Occurred()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
317 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
318 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
319 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
320 "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
321 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
322 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
323 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
324
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
325 if (type->tp_dict == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
326 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
327 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
328 "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
329 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
330 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
331 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
332
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
333 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
334 PyErr_SetString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
335 TestError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
336 "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
337 Py_DECREF(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
338 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
339 }
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
340
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
341 Py_DECREF(obj);
53811
026d390eecc1 Merged revisions 72357 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 53707
diff changeset
342
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
343 Py_RETURN_NONE;
50374
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
344 }
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
345
43aacbe647cb Recorded merge of revisions 68058 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents: 50364
diff changeset
346
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
347 /* 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
348 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
349
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
350 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
351 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
352 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
353 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
354 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
355 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
356
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
357 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
358 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
359 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
360 */
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
361
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
362 #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
363
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
364 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
365 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
366 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
367 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
368 }
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
369
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
370 #define TESTNAME test_long_api_inner
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
371 #define TYPENAME long
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
372 #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
373 #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
374 #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
375 #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
376
9eb469a43144 Add tests of PyLong_{As,From}{Unsigned,}Long. These are very much like
Tim Peters <tim.peters@gmail.com>
parents: 18093
diff changeset
377 #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
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 static PyObject *
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
380 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
381 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
382 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
383 }
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
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 #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
386 #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
387 #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
388 #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
389 #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
390 #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
391
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 #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
393
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
394 static PyObject *
18093
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
395 raise_test_longlong_error(const char* msg)
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
396 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
397 return raiseTestError("test_longlong_api", msg);
18093
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
398 }
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
399
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
400 #define TESTNAME test_longlong_api_inner
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
401 #define TYPENAME PY_LONG_LONG
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
402 #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
403 #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
404 #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
405 #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
406
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 #include "testcapi_long.h"
18093
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
408
6ea366a2b2a6 longobject.c:
Tim Peters <tim.peters@gmail.com>
parents: 18092
diff changeset
409 static PyObject *
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
410 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
411 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
412 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
413 }
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
414
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
415 #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
416 #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
417 #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
418 #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
419 #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
420 #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
421
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
422 /* 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
423 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
424 handling of overflow.
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
425 */
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
426
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
427 static PyObject *
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
428 test_long_and_overflow(PyObject *self)
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
429 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
430 PyObject *num, *one, *temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
431 long value;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
432 int overflow;
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
433
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
434 /* 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
435 /* 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
436 num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
437 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
438 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
439 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
440 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
441 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
442 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
443 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
444 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
445 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
446 "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
447 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
448 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
449 "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
450
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
451 /* 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
452 num = PyLong_FromLong(LONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
453 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
454 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
455 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
456 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
457 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
458 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
459 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
460 temp = PyNumber_Add(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
461 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
462 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
463 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
464 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
465 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
466 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
467 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
468 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
469 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
470 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
471 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
472 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
473 "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
474 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
475 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
476 "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
477
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
478 /* 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
479 /* 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
480 num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
481 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
482 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
483 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
484 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
485 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
486 if (value == -1 && PyErr_Occurred())
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 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
489 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
490 "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
491 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
492 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
493 "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
494
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
495 /* 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
496 num = PyLong_FromLong(LONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
497 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
498 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
499 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
500 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
501 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
502 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
503 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
504 temp = PyNumber_Subtract(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
505 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
506 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
507 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
508 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
509 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
510 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
511 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
512 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
513 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
514 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
515 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
516 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
517 "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
518 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
519 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
520 "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
521
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
522 /* 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
523 num = PyLong_FromString("FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
524 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
525 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
526 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
527 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
528 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
529 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
530 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
531 if (value != 0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
532 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
533 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
534 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
535 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
536 "overflow was not cleared");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
537
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
538 num = PyLong_FromString("-FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
539 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
540 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
541 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
542 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
543 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
544 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
545 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
546 if (value != -0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
547 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
548 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
549 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
550 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
551 "overflow was set incorrectly");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
552
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
553 num = PyLong_FromLong(LONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
554 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
555 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
556 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
557 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
558 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
559 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
560 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
561 if (value != LONG_MAX)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
562 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
563 "expected return value LONG_MAX");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
564 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
565 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
566 "overflow was not cleared");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
567
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
568 num = PyLong_FromLong(LONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
569 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
570 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
571 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
572 value = PyLong_AsLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
573 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
574 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
575 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
576 if (value != LONG_MIN)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
577 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
578 "expected return value LONG_MIN");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
579 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
580 return raiseTestError("test_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
581 "overflow was not cleared");
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
582
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
583 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
584 return Py_None;
57858
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
585 }
50f3046d4fa0 Keep PyLong_AsLongAndOverflow documentation and implementation in sync
Mark Dickinson <dickinsm@gmail.com>
parents: 57822
diff changeset
586
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
587 /* Test the PyLong_AsLongLongAndOverflow API. General conversion to
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
588 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
589 concentrate on proper handling of overflow.
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
590 */
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
591
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
592 static PyObject *
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
593 test_long_long_and_overflow(PyObject *self)
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
594 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
595 PyObject *num, *one, *temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
596 PY_LONG_LONG value;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
597 int overflow;
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
598
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
599 /* 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
600 /* 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
601 num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
602 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
603 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
604 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
605 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
606 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
607 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
608 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
609 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
610 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
611 "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
612 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
613 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
614 "overflow was not set to 1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
615
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
616 /* 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
617 num = PyLong_FromLongLong(PY_LLONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
618 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
619 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
620 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
621 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
622 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
623 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
624 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
625 temp = PyNumber_Add(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
626 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
627 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
628 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
629 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
630 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
631 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
632 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
633 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
634 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
635 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
636 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
637 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
638 "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
639 if (overflow != 1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
640 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
641 "overflow was not set to 1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
642
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
643 /* 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
644 /* 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
645 num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
646 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
647 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
648 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
649 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
650 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
651 if (value == -1 && PyErr_Occurred())
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 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
654 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
655 "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
656 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
657 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
658 "overflow was not set to -1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
659
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
660 /* 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
661 num = PyLong_FromLongLong(PY_LLONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
662 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
663 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
664 one = PyLong_FromLong(1L);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
665 if (one == NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
666 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
667 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
668 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
669 temp = PyNumber_Subtract(num, one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
670 Py_DECREF(one);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
671 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
672 num = temp;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
673 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
674 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
675 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
676 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
677 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
678 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
679 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
680 if (value != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
681 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
682 "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
683 if (overflow != -1)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
684 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
685 "overflow was not set to -1");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
686
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
687 /* 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
688 num = PyLong_FromString("FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
689 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
690 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
691 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
692 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
693 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
694 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
695 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
696 if (value != 0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
697 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
698 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
699 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
700 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
701 "overflow was not cleared");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
702
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
703 num = PyLong_FromString("-FF", NULL, 16);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
704 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
705 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
706 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
707 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
708 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
709 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
710 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
711 if (value != -0xFF)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
712 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
713 "expected return value 0xFF");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
714 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
715 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
716 "overflow was set incorrectly");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
717
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
718 num = PyLong_FromLongLong(PY_LLONG_MAX);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
719 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
720 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
721 overflow = 1234;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
722 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
723 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
724 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
725 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
726 if (value != PY_LLONG_MAX)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
727 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
728 "expected return value PY_LLONG_MAX");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
729 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
730 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
731 "overflow was not cleared");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
732
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
733 num = PyLong_FromLongLong(PY_LLONG_MIN);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
734 if (num == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
735 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
736 overflow = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
737 value = PyLong_AsLongLongAndOverflow(num, &overflow);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
738 Py_DECREF(num);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
739 if (value == -1 && PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
740 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
741 if (value != PY_LLONG_MIN)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
742 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
743 "expected return value PY_LLONG_MIN");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
744 if (overflow != 0)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
745 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
746 "overflow was not cleared");
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
747
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
748 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
749 return Py_None;
58582
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
750 }
5893ef9a9b84 Merged revisions 77842 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 58224
diff changeset
751
72312
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
752 /* Test the PyLong_As{Size,Ssize}_t API. At present this just tests that
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
753 non-integer arguments are handled correctly. It should be extended to
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
754 test overflow handling.
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
755 */
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
756
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
757 static PyObject *
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
758 test_long_as_size_t(PyObject *self)
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
759 {
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
760 size_t out_u;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
761 Py_ssize_t out_s;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
762
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
763 Py_INCREF(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
764
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
765 out_u = PyLong_AsSize_t(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
766 if (out_u != (size_t)-1 || !PyErr_Occurred())
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
767 return raiseTestError("test_long_as_size_t",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
768 "PyLong_AsSize_t(None) didn't complain");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
769 if (!PyErr_ExceptionMatches(PyExc_TypeError))
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
770 return raiseTestError("test_long_as_size_t",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
771 "PyLong_AsSize_t(None) raised "
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
772 "something other than TypeError");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
773 PyErr_Clear();
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
774
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
775 out_s = PyLong_AsSsize_t(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
776 if (out_s != (Py_ssize_t)-1 || !PyErr_Occurred())
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
777 return raiseTestError("test_long_as_size_t",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
778 "PyLong_AsSsize_t(None) didn't complain");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
779 if (!PyErr_ExceptionMatches(PyExc_TypeError))
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
780 return raiseTestError("test_long_as_size_t",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
781 "PyLong_AsSsize_t(None) raised "
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
782 "something other than TypeError");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
783 PyErr_Clear();
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
784
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
785 /* Py_INCREF(Py_None) omitted - we already have a reference to it. */
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
786 return Py_None;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
787 }
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
788
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
789 /* Test the PyLong_AsDouble API. At present this just tests that
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
790 non-integer arguments are handled correctly.
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
791 */
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
792
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
793 static PyObject *
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
794 test_long_as_double(PyObject *self)
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
795 {
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
796 double out;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
797
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
798 Py_INCREF(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
799
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
800 out = PyLong_AsDouble(Py_None);
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
801 if (out != -1.0 || !PyErr_Occurred())
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
802 return raiseTestError("test_long_as_double",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
803 "PyLong_AsDouble(None) didn't complain");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
804 if (!PyErr_ExceptionMatches(PyExc_TypeError))
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
805 return raiseTestError("test_long_as_double",
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
806 "PyLong_AsDouble(None) raised "
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
807 "something other than TypeError");
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
808 PyErr_Clear();
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
809
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
810 /* Py_INCREF(Py_None) omitted - we already have a reference to it. */
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
811 return Py_None;
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
812 }
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
813
28437
871da703e4c0 Rename LONG_LONG to PY_LONG_LONG. Fixes #710285.
Martin v. Löwis <martin@v.loewis.de>
parents: 27549
diff changeset
814 /* 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
815 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
816 it fails.
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
817 */
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
818 static PyObject *
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
819 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
820 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
821 PyObject *tuple, *num;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
822 PY_LONG_LONG value;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
823
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
824 tuple = PyTuple_New(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
825 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
826 return NULL;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
827
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
828 num = PyLong_FromLong(42);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
829 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
830 return NULL;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
831
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
832 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
833
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
834 value = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
835 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
836 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
837 if (value != 42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
838 return raiseTestError("test_L_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
839 "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
840
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
841 Py_DECREF(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
842 num = PyLong_FromLong(42);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
843 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
844 return NULL;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
845
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
846 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
847
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
848 value = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
849 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
850 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
851 if (value != 42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
852 return raiseTestError("test_L_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
853 "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
854
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
855 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
856 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
857 return Py_None;
20182
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
858 }
6d73b54d9205 SF [#466125] PyLong_AsLongLong works for any integer.
Tim Peters <tim.peters@gmail.com>
parents: 20117
diff changeset
859
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
860 #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
861
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
862 /* Test tuple argument processing */
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
863 static PyObject *
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
864 getargs_tuple(PyObject *self, PyObject *args)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
865 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
866 int a, b, c;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
867 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
868 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
869 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
870 }
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
871
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
872 /* test PyArg_ParseTupleAndKeywords */
75842
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
873 static PyObject *
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
874 getargs_keywords(PyObject *self, PyObject *args, PyObject *kwargs)
45548
8c3c5b4eef55 Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61062,61066,61068,61070,61081-61095 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44885
diff changeset
875 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
876 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
877 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
878 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
879
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
880 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
881 &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
882 &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
883 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
884 return Py_BuildValue("iiiiiiiiii",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
885 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
886 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
887 }
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
888
75842
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
889 /* test PyArg_ParseTupleAndKeywords keyword-only arguments */
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
890 static PyObject *
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
891 getargs_keyword_only(PyObject *self, PyObject *args, PyObject *kwargs)
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
892 {
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
893 static char *keywords[] = {"required", "optional", "keyword_only", NULL};
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
894 int required = -1;
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
895 int optional = -1;
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
896 int keyword_only = -1;
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
897
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
898 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i$i", keywords,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
899 &required, &optional, &keyword_only))
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
900 return NULL;
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
901 return Py_BuildValue("iii", required, optional, keyword_only);
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
902 }
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
903
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
904 /* 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
905 and return the result.
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
906 */
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
907 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
908 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
909 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
910 unsigned char value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
911 if (!PyArg_ParseTuple(args, "b", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
912 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
913 return PyLong_FromUnsignedLong((unsigned long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
914 }
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
915
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
916 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
917 getargs_B(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
918 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
919 unsigned char value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
920 if (!PyArg_ParseTuple(args, "B", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
921 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
922 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
923 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
924
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
925 static PyObject *
57822
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
926 getargs_h(PyObject *self, PyObject *args)
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
927 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
928 short value;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
929 if (!PyArg_ParseTuple(args, "h", &value))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
930 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
931 return PyLong_FromLong((long)value);
57822
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
932 }
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
933
6d7464dbb714 Merged revisions 76930 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 57723
diff changeset
934 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
935 getargs_H(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
936 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
937 unsigned short value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
938 if (!PyArg_ParseTuple(args, "H", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
939 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
940 return PyLong_FromUnsignedLong((unsigned long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
941 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
942
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
943 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
944 getargs_I(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
945 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
946 unsigned int value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
947 if (!PyArg_ParseTuple(args, "I", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
948 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
949 return PyLong_FromUnsignedLong((unsigned long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
950 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
951
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
952 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
953 getargs_k(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
954 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
955 unsigned long value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
956 if (!PyArg_ParseTuple(args, "k", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
957 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
958 return PyLong_FromUnsignedLong(value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
959 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
960
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
961 static PyObject *
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
962 getargs_i(PyObject *self, PyObject *args)
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
963 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
964 int value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
965 if (!PyArg_ParseTuple(args, "i", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
966 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
967 return PyLong_FromLong((long)value);
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
968 }
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
969
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
970 static PyObject *
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
971 getargs_l(PyObject *self, PyObject *args)
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
972 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
973 long value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
974 if (!PyArg_ParseTuple(args, "l", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
975 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
976 return PyLong_FromLong(value);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
977 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
978
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
979 static PyObject *
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
980 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: 36989
diff changeset
981 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
982 Py_ssize_t value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
983 if (!PyArg_ParseTuple(args, "n", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
984 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
985 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: 36989
diff changeset
986 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
987
76776
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
988 static PyObject *
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
989 getargs_p(PyObject *self, PyObject *args)
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
990 {
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
991 int value;
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
992 if (!PyArg_ParseTuple(args, "p", &value))
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
993 return NULL;
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
994 return PyLong_FromLong(value);
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
995 }
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
996
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
997 #ifdef HAVE_LONG_LONG
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
998 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
999 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
1000 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1001 PY_LONG_LONG value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1002 if (!PyArg_ParseTuple(args, "L", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1003 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1004 return PyLong_FromLongLong(value);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1005 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1006
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1007 static PyObject *
28775
bc4231eb2758 New support functions for test_getargs2.
Thomas Heller <theller@ctypes.org>
parents: 28714
diff changeset
1008 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
1009 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1010 unsigned PY_LONG_LONG value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1011 if (!PyArg_ParseTuple(args, "K", &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1012 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1013 return PyLong_FromUnsignedLongLong(value);
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1014 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1015 #endif
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1016
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1017 /* 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
1018 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
1019 static PyObject *
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1020 test_k_code(PyObject *self)
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1021 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1022 PyObject *tuple, *num;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1023 unsigned long value;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1024
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1025 tuple = PyTuple_New(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1026 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1027 return NULL;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1028
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1029 /* 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
1030 num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1031 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1032 return NULL;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1033
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1034 value = PyLong_AsUnsignedLongMask(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1035 if (value != ULONG_MAX)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1036 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1037 "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
1038
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1039 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
1040
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1041 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1042 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
1043 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1044 if (value != ULONG_MAX)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1045 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1046 "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
1047
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1048 Py_DECREF(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1049 num = PyLong_FromString("-FFFFFFFF000000000000000042", NULL, 16);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1050 if (num == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1051 return NULL;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1052
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1053 value = PyLong_AsUnsignedLongMask(num);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1054 if (value != (unsigned long)-0x42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1055 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1056 "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
1057
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1058 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
1059
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1060 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1061 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
1062 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1063 if (value != (unsigned long)-0x42)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1064 return raiseTestError("test_k_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1065 "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
1066
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1067 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1068 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1069 return Py_None;
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1070 }
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
1071
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
1072 static PyObject *
71543
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1073 getargs_c(PyObject *self, PyObject *args)
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1074 {
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1075 char c;
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1076 if (!PyArg_ParseTuple(args, "c", &c))
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1077 return NULL;
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1078 return PyBytes_FromStringAndSize(&c, 1);
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1079 }
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1080
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
1081 static PyObject *
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1082 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
1083 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1084 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
1085 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
1086 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
1087 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
1088 }
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 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
1091 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
1092 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1093 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
1094 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
1095 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
1096 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
1097 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
1098 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
1099 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
1100 }
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
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 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
1103 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
1104 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1105 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
1106 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
1107 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
1108 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
1109 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
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
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 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
1113 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
1114 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1115 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
1116 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
1117 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
1118 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
1119 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
1120 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
1121 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
1122 }
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
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 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
1125 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
1126 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1127 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
1128 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
1129 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
1130 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
1131 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
1132 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
1133 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
1134 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
1135 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
1136 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1137 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
1138 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
1139 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1140
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 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
1142 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
1143 {
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 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
1145 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
1146 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
1147 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
1148 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
1149 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
1150 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
1151 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
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
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 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
1155 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
1156 {
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 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
1158 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
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 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
1161 }
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
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 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
1164 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
1165 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1166 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
1167 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
1168 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
1169 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
1170 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
1171 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
1172 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
1173 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1174
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1175 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
1176 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
1177 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1178 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
1179 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
1180 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
1181 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
1182 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
1183 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1184
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1185 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
1186 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
1187 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1188 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
1189 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
1190 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
1191 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
1192 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
1193 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
1194 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1195
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1196 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
1197 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
1198 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1199 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
1200 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
1201 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
1202 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
1203 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
1204 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1205
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1206 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
1207 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
1208 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1209 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
1210 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
1211 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
1212 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
1213 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
1214 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
1215 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
1216 } 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
1217 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
1218 }
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1219
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1220 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
1221 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
1222 {
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
1223 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
1224 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
1225 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
1226 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
1227 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
1228 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
1229 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
1230 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
1231 }
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1232
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
1233 /* 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
1234 */
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
1235 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
1236 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
1237 {
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
1238 /* 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
1239 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
1240 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
1241
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
1242 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
1243 if (tuple == NULL)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1244 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
1245
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
1246 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
1247 "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
1248 if (obj == NULL)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1249 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
1250
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
1251 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
1252
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
1253 /* 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
1254 * "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
1255 */
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
1256 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
1257 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
1258
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
1259 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
1260 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
1261
47062
87a79352342c Fixed refleak in _testcapi.test_s_code.
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 46944
diff changeset
1262 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
1263 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
1264 }
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
1265
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1266 static PyObject *
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1267 parse_tuple_and_keywords(PyObject *self, PyObject *args)
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1268 {
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1269 PyObject *sub_args;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1270 PyObject *sub_kwargs;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1271 char *sub_format;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1272 PyObject *sub_keywords;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1273
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1274 Py_ssize_t i, size;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1275 char *keywords[8 + 1]; /* space for NULL at end */
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1276 PyObject *o;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1277 PyObject *converted[8];
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1278
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1279 int result;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1280 PyObject *return_value = NULL;
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1281
78466
efb30bdcfa1e Issue #15589: Ensure double-alignment for brute-force capi argument parser test
Larry Hastings <larry@hastings.org>
parents: 77567
diff changeset
1282 double buffers[8][4]; /* double ensures alignment where necessary */
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1283
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1284 if (!PyArg_ParseTuple(args, "OOyO:parse_tuple_and_keywords",
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1285 &sub_args, &sub_kwargs,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1286 &sub_format, &sub_keywords))
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1287 return NULL;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1288
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1289 if (!(PyList_CheckExact(sub_keywords) || PyTuple_CheckExact(sub_keywords))) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1290 PyErr_SetString(PyExc_ValueError,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1291 "parse_tuple_and_keywords: sub_keywords must be either list or tuple");
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1292 return NULL;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1293 }
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1294
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1295 memset(buffers, 0, sizeof(buffers));
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1296 memset(converted, 0, sizeof(converted));
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1297 memset(keywords, 0, sizeof(keywords));
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1298
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1299 size = PySequence_Fast_GET_SIZE(sub_keywords);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1300 if (size > 8) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1301 PyErr_SetString(PyExc_ValueError,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1302 "parse_tuple_and_keywords: too many keywords in sub_keywords");
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1303 goto exit;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1304 }
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1305
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1306 for (i = 0; i < size; i++) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1307 o = PySequence_Fast_GET_ITEM(sub_keywords, i);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1308 if (!PyUnicode_FSConverter(o, (void *)(converted + i))) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1309 PyErr_Format(PyExc_ValueError,
79452
0fc259ac8733 Closes #16126: PyErr_Format format mismatch in _testcapimodule.c
Jesus Cea <jcea@jcea.es>
parents: 78466
diff changeset
1310 "parse_tuple_and_keywords: could not convert keywords[%zd] to narrow string", i);
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1311 goto exit;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1312 }
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1313 keywords[i] = PyBytes_AS_STRING(converted[i]);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1314 }
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1315
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1316 result = PyArg_ParseTupleAndKeywords(sub_args, sub_kwargs,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1317 sub_format, keywords,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1318 buffers + 0, buffers + 1, buffers + 2, buffers + 3,
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1319 buffers + 4, buffers + 5, buffers + 6, buffers + 7);
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1320
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1321 if (result) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1322 return_value = Py_None;
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1323 Py_INCREF(Py_None);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1324 }
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1325
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1326 exit:
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1327 size = sizeof(converted) / sizeof(converted[0]);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1328 for (i = 0; i < size; i++) {
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1329 Py_XDECREF(converted[i]);
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1330 }
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
1331 return return_value;
57549
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1332 }
b60f2b2b9c04 Merged revisions 76646 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 54421
diff changeset
1333
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1334 static volatile int x;
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1335
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1336 /* 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
1337 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
1338 */
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1339 static PyObject *
22726
c84110f05dc3 Switch to using METH_NOARGS where possible.
Fred Drake <fdrake@acm.org>
parents: 21667
diff changeset
1340 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
1341 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1342 PyObject *tuple, *obj;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1343 Py_UNICODE *value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1344 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
1345
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1346 /* 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
1347 /* 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
1348 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
1349
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1350 tuple = PyTuple_New(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1351 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1352 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
1353
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1354 obj = PyUnicode_Decode("test", strlen("test"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1355 "ascii", NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1356 if (obj == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1357 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
1358
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1359 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
1360
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1361 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1362 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
1363 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1364 if (value != PyUnicode_AS_UNICODE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1365 return raiseTestError("test_u_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1366 "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
1367 value = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1368 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
1369 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1370 if (value != PyUnicode_AS_UNICODE(obj) ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1371 len != PyUnicode_GET_SIZE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1372 return raiseTestError("test_u_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1373 "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
1374
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1375 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1376 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1377 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
1378 }
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1379
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1380 /* 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
1381 static PyObject *
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1382 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
1383 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1384 PyObject *tuple, *obj;
72475
8beaa9a37387 Implement PEP 393.
Martin v. Löwis <martin@v.loewis.de>
parents: 72312
diff changeset
1385 const Py_UNICODE *value1, *value2;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1386 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
1387
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1388 tuple = PyTuple_New(2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1389 if (tuple == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1390 return NULL;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1391
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1392 obj = PyUnicode_FromString("test");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1393 PyTuple_SET_ITEM(tuple, 0, obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1394 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1395 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
1396
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1397 /* swap values on purpose */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1398 value1 = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1399 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
1400
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1401 /* Test Z for both values */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1402 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
1403 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1404 if (value1 != PyUnicode_AS_UNICODE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1405 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1406 "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
1407 if (value2 != NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1408 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1409 "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
1410
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1411 value1 = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1412 value2 = PyUnicode_AS_UNICODE(obj);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1413 len1 = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1414 len2 = -1;
42997
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1415
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1416 /* Test Z# for both values */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1417 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
1418 &value2, &len2) < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1419 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1420 if (value1 != PyUnicode_AS_UNICODE(obj) ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1421 len1 != PyUnicode_GET_SIZE(obj))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1422 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1423 "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
1424 if (value2 != NULL ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1425 len2 != 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1426 return raiseTestError("test_Z_code",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1427 "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
1428
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1429 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1430 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
1431 }
b9226cad9dfd Three patches from issue #1047, by Amaury Forgeot d'Arc:
Guido van Rossum <guido@python.org>
parents: 42813
diff changeset
1432
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1433 static PyObject *
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1434 test_widechar(PyObject *self)
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1435 {
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1436 #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
1437 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
1438 size_t wtextlen = 1;
73906
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1439 const wchar_t invalid[1] = {(wchar_t)0x110000u};
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1440 #else
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1441 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
1442 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
1443 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1444 PyObject *wide, *utf8;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1445
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1446 wide = PyUnicode_FromWideChar(wtext, wtextlen);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1447 if (wide == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1448 return NULL;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1449
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1450 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
1451 if (utf8 == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1452 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1453 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1454 }
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1455
73651
893b16723c9f test_widechar() uses the new Unicode API
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73642
diff changeset
1456 if (PyUnicode_GET_LENGTH(wide) != PyUnicode_GET_LENGTH(utf8)) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1457 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1458 Py_DECREF(utf8);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1459 return raiseTestError("test_widechar",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1460 "wide string and utf8 string "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1461 "have different length");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1462 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1463 if (PyUnicode_Compare(wide, utf8)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1464 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1465 Py_DECREF(utf8);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1466 if (PyErr_Occurred())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1467 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1468 return raiseTestError("test_widechar",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1469 "wide string and utf8 string "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1470 "are different");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1471 }
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1472
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1473 Py_DECREF(wide);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1474 Py_DECREF(utf8);
73906
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1475
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1476 #if defined(SIZEOF_WCHAR_T) && (SIZEOF_WCHAR_T == 4)
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1477 wide = PyUnicode_FromWideChar(invalid, 1);
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1478 if (wide == NULL)
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1479 PyErr_Clear();
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1480 else
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1481 return raiseTestError("test_widechar",
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1482 "PyUnicode_FromWideChar(L\"\\U00110000\", 1) didn't fail");
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1483
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1484 wide = PyUnicode_FromUnicode(invalid, 1);
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1485 if (wide == NULL)
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1486 PyErr_Clear();
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1487 else
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1488 return raiseTestError("test_widechar",
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1489 "PyUnicode_FromUnicode(L\"\\U00110000\", 1) didn't fail");
82501
15190138d3f3 Issue #17223: Add another test to check that _PyUnicode_Ready() rejects
Victor Stinner <victor.stinner@gmail.com>
parents: 80180
diff changeset
1490
15190138d3f3 Issue #17223: Add another test to check that _PyUnicode_Ready() rejects
Victor Stinner <victor.stinner@gmail.com>
parents: 80180
diff changeset
1491 wide = PyUnicode_FromUnicode(NULL, 1);
15190138d3f3 Issue #17223: Add another test to check that _PyUnicode_Ready() rejects
Victor Stinner <victor.stinner@gmail.com>
parents: 80180
diff changeset
1492 if (wide == NULL)
15190138d3f3 Issue #17223: Add another test to check that _PyUnicode_Ready() rejects
Victor Stinner <victor.stinner@gmail.com>
parents: 80180
diff changeset
1493 return NULL;
15190138d3f3 Issue #17223: Add another test to check that _PyUnicode_Ready() rejects
Victor Stinner <victor.stinner@gmail.com>
parents: 80180
diff changeset
1494 PyUnicode_AS_UNICODE(wide)[0] = invalid[0];
82533
c261b74533bf Fix memory leak introduced in 15190138d3f3.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 82501
diff changeset
1495 if (_PyUnicode_Ready(wide) < 0) {
c261b74533bf Fix memory leak introduced in 15190138d3f3.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 82501
diff changeset
1496 Py_DECREF(wide);
82501
15190138d3f3 Issue #17223: Add another test to check that _PyUnicode_Ready() rejects
Victor Stinner <victor.stinner@gmail.com>
parents: 80180
diff changeset
1497 PyErr_Clear();
82533
c261b74533bf Fix memory leak introduced in 15190138d3f3.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 82501
diff changeset
1498 }
c261b74533bf Fix memory leak introduced in 15190138d3f3.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 82501
diff changeset
1499 else {
c261b74533bf Fix memory leak introduced in 15190138d3f3.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 82501
diff changeset
1500 Py_DECREF(wide);
82501
15190138d3f3 Issue #17223: Add another test to check that _PyUnicode_Ready() rejects
Victor Stinner <victor.stinner@gmail.com>
parents: 80180
diff changeset
1501 return raiseTestError("test_widechar",
15190138d3f3 Issue #17223: Add another test to check that _PyUnicode_Ready() rejects
Victor Stinner <victor.stinner@gmail.com>
parents: 80180
diff changeset
1502 "PyUnicode_Ready() didn't fail");
82533
c261b74533bf Fix memory leak introduced in 15190138d3f3.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 82501
diff changeset
1503 }
73906
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1504 #endif
bfa9d1ba36ae Write tests for invalid characters (U+00110000)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 73692
diff changeset
1505
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1506 Py_RETURN_NONE;
52208
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1507 }
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1508
79642b5881e0 Issue 4474: On platforms with sizeof(wchar_t) == 4 and
Mark Dickinson <dickinsm@gmail.com>
parents: 51270
diff changeset
1509 static PyObject *
65059
8de535def122 Issue #8670: Rename testcapi unicode test methods
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65058
diff changeset
1510 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
1511 {
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1512 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
1513 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
1514 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
1515
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1516 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
1517 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1518 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
1519 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
1520 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
1521
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66104
diff changeset
1522 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
1523 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
1524 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
1525 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1526 }
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1527
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1528 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
1529 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
1530 else
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1531 buflen = size;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1532 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
1533 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
1534 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
1535 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1536
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1537 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
1538 }
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1539
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1540 static PyObject *
65059
8de535def122 Issue #8670: Rename testcapi unicode test methods
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65058
diff changeset
1541 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
1542 {
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1543 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
1544 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
1545 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
1546
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1547 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
1548 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1549
65157
e3ae5b00ba15 PyUnicode_AsWideCharString() takes a PyObject*, not a PyUnicodeObject*
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65059
diff changeset
1550 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
1551 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
1552 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1553
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1554 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
1555 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
1556 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
1557 return NULL;
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1558 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
1559 }
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1560
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
1561 static PyObject *
73680
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1562 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
1563 {
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1564 Py_UNICODE *unicode;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1565 Py_ssize_t length;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1566 char *errors = NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1567 PyObject *decimal;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1568 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
1569 int res;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1570
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1571 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
1572 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1573
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1574 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
1575 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
1576 if (decimal == NULL)
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1577 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1578
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1579 res = PyUnicode_EncodeDecimal(unicode, length,
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1580 PyBytes_AS_STRING(decimal),
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1581 errors);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1582 if (res < 0) {
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1583 Py_DECREF(decimal);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1584 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1585 }
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1586
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1587 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
1588 assert(new_length <= decimal_length);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1589 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
1590 if (res < 0)
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1591 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1592
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1593 return decimal;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1594 }
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1595
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1596 static PyObject *
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1597 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
1598 {
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1599 Py_UNICODE *unicode;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1600 Py_ssize_t length;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1601 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
1602 return NULL;
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1603 return PyUnicode_TransformDecimalToASCII(unicode, length);
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1604 }
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1605
f29d7d597fae Issue #13093: Fix error handling on PyUnicode_EncodeDecimal()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
1606 static PyObject *
80180
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1607 unicode_legacy_string(PyObject *self, PyObject *args)
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1608 {
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1609 Py_UNICODE *data;
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1610 Py_ssize_t len;
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1611 PyObject *u;
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1612
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1613 if (!PyArg_ParseTuple(args, "u#", &data, &len))
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1614 return NULL;
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1615
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1616 u = PyUnicode_FromUnicode(NULL, len);
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1617 if (u == NULL)
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1618 return NULL;
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1619
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1620 memcpy(PyUnicode_AS_UNICODE(u), data, len * sizeof(Py_UNICODE));
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1621
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1622 if (len > 0) { /* The empty string is always ready. */
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1623 assert(!PyUnicode_IS_READY(u));
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1624 }
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1625
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1626 return u;
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1627 }
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1628
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
1629 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
1630 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
1631 {
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1632 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
1633 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
1634 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
1635
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1636 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
1637 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
1638
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1639 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
1640 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
1641 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
1642 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
1643 }
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1644
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1645 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
1646 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
1647 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
1648 }
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1649
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1650
bcc0e825faa0 Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use
Victor Stinner <victor.stinner@haypocalc.com>
parents: 62322
diff changeset
1651 static PyObject *
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1652 test_empty_argparse(PyObject *self)
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1653 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1654 /* 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
1655 PyObject *tuple, *dict = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1656 static char *kwlist[] = {NULL};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1657 int result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1658 tuple = PyTuple_New(0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1659 if (!tuple)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1660 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1661 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
1662 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1663 dict = PyDict_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1664 if (!dict)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1665 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1666 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
1667 done:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1668 Py_DECREF(tuple);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1669 Py_XDECREF(dict);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1670 if (result < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1671 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1672 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1673 Py_RETURN_NONE;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1674 }
50364
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1675 }
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1676
3d447b7b1363 Merged revisions 67948-67950 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49718
diff changeset
1677 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
1678 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: 36989
diff changeset
1679 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1680 const char *encoding, *errors = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1681 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
1682 &encoding, &errors))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1683 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1684 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: 36989
diff changeset
1685 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1686
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1687 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
1688 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: 36989
diff changeset
1689 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1690 const char *encoding, *errors = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1691 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
1692 &encoding, &errors))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1693 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1694 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: 36989
diff changeset
1695 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1696
21667
0d3bb68e3a28 Fixed "u#" parser marker to pass through Unicode objects as-is without
Marc-André Lemburg <mal@egenix.com>
parents: 21073
diff changeset
1697
27549
7fcdeeb16ec0 _PyLong_NumBits(): The definition of this was too specific to the quirky
Tim Peters <tim.peters@gmail.com>
parents: 27487
diff changeset
1698 /* 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
1699 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
1700 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
1701 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1702 struct triple {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1703 long input;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1704 size_t nbits;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1705 int sign;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1706 } testcases[] = {{0, 0, 0},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1707 {1L, 1, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1708 {-1L, 1, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1709 {2L, 2, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1710 {-2L, 2, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1711 {3L, 2, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1712 {-3L, 2, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1713 {4L, 3, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1714 {-4L, 3, -1},
85418
4d62a62ba44d Issue #18783: Removed existing mentions of Python long type in docstrings,
Serhiy Storchaka <storchaka@gmail.com>
parents: 84840
diff changeset
1715 {0x7fffL, 15, 1}, /* one Python int digit */
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1716 {-0x7fffL, 15, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1717 {0xffffL, 16, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1718 {-0xffffL, 16, -1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1719 {0xfffffffL, 28, 1},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1720 {-0xfffffffL, 28, -1}};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1721 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
1722
72510
b534b56379cb Use the new Py_ARRAY_LENGTH macro
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72475
diff changeset
1723 for (i = 0; i < Py_ARRAY_LENGTH(testcases); ++i) {
84834
708811f8470f Fix declaration-after-statement of d49f65ff4f3c
Christian Heimes <christian@cheimes.de>
parents: 84833
diff changeset
1724 size_t nbits;
708811f8470f Fix declaration-after-statement of d49f65ff4f3c
Christian Heimes <christian@cheimes.de>
parents: 84833
diff changeset
1725 int sign;
708811f8470f Fix declaration-after-statement of d49f65ff4f3c
Christian Heimes <christian@cheimes.de>
parents: 84833
diff changeset
1726 PyObject *plong;
708811f8470f Fix declaration-after-statement of d49f65ff4f3c
Christian Heimes <christian@cheimes.de>
parents: 84833
diff changeset
1727
708811f8470f Fix declaration-after-statement of d49f65ff4f3c
Christian Heimes <christian@cheimes.de>
parents: 84833
diff changeset
1728 plong = PyLong_FromLong(testcases[i].input);
84831
d49f65ff4f3c Fix possible NULL pointer dereferences in testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84732
diff changeset
1729 if (plong == NULL)
d49f65ff4f3c Fix possible NULL pointer dereferences in testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84732
diff changeset
1730 return NULL;
84834
708811f8470f Fix declaration-after-statement of d49f65ff4f3c
Christian Heimes <christian@cheimes.de>
parents: 84833
diff changeset
1731 nbits = _PyLong_NumBits(plong);
708811f8470f Fix declaration-after-statement of d49f65ff4f3c
Christian Heimes <christian@cheimes.de>
parents: 84833
diff changeset
1732 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
1733
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1734 Py_DECREF(plong);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1735 if (nbits != testcases[i].nbits)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1736 return raiseTestError("test_long_numbits",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1737 "wrong result for _PyLong_NumBits");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1738 if (sign != testcases[i].sign)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1739 return raiseTestError("test_long_numbits",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1740 "wrong result for _PyLong_Sign");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1741 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1742 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1743 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
1744 }
0904d878b8f1 Added new private API function _PyLong_NumBits. This will be used at the
Tim Peters <tim.peters@gmail.com>
parents: 24363
diff changeset
1745
43866
8ed0280c2ab6 Replace PyObject_Unicode with PyObject_Str everywhere, and remove the
Thomas Heller <theller@ctypes.org>
parents: 43697
diff changeset
1746 /* Example passing NULLs to PyObject_Str(NULL). */
36989
aba814aa4c6a Move test code out of xxmodule and into _testcapimodule.c where it belongs.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36501
diff changeset
1747
aba814aa4c6a Move test code out of xxmodule and into _testcapimodule.c where it belongs.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36501
diff changeset
1748 static PyObject *
aba814aa4c6a Move test code out of xxmodule and into _testcapimodule.c where it belongs.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36501
diff changeset
1749 test_null_strings(PyObject *self)
aba814aa4c6a Move test code out of xxmodule and into _testcapimodule.c where it belongs.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36501
diff changeset
1750 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1751 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
1752 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
1753 Py_XDECREF(o1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1754 Py_XDECREF(o2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1755 return tuple;
36989
aba814aa4c6a Move test code out of xxmodule and into _testcapimodule.c where it belongs.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36501
diff changeset
1756 }
aba814aa4c6a Move test code out of xxmodule and into _testcapimodule.c where it belongs.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36501
diff changeset
1757
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1758 static PyObject *
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1759 raise_exception(PyObject *self, PyObject *args)
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1760 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1761 PyObject *exc;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1762 PyObject *exc_args, *v;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1763 int num_args, i;
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1764
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1765 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
1766 &exc, &num_args))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1767 return NULL;
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1768
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1769 exc_args = PyTuple_New(num_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1770 if (exc_args == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1771 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1772 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
1773 v = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1774 if (v == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1775 Py_DECREF(exc_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1776 return NULL;
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 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
1779 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1780 PyErr_SetObject(exc, exc_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1781 Py_DECREF(exc_args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1782 return NULL;
20117
e026f517f655 Add tests for new PyErr_NormalizeException() behavior
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 18835
diff changeset
1783 }
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
1784
76418
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1785 static PyObject *
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1786 test_set_exc_info(PyObject *self, PyObject *args)
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1787 {
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1788 PyObject *orig_exc;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1789 PyObject *new_type, *new_value, *new_tb;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1790 PyObject *type, *value, *tb;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1791 if (!PyArg_ParseTuple(args, "OOO:test_set_exc_info",
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1792 &new_type, &new_value, &new_tb))
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1793 return NULL;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1794
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1795 PyErr_GetExcInfo(&type, &value, &tb);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1796
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1797 Py_INCREF(new_type);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1798 Py_INCREF(new_value);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1799 Py_INCREF(new_tb);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1800 PyErr_SetExcInfo(new_type, new_value, new_tb);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1801
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1802 orig_exc = PyTuple_Pack(3, type ? type : Py_None, value ? value : Py_None, tb ? tb : Py_None);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1803 Py_XDECREF(type);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1804 Py_XDECREF(value);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1805 Py_XDECREF(tb);
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1806 return orig_exc;
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
1807 }
58661
9b351cb9ef98 Merged revisions 77866-77867 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58645
diff changeset
1808
9b351cb9ef98 Merged revisions 77866-77867 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58645
diff changeset
1809 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
1810
57723
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1811 static PyObject *
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1812 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
1813 if (PyDateTimeAPI) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1814 if (test_run_counter) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1815 /* Probably regrtest.py -R */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1816 Py_RETURN_NONE;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1817 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1818 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1819 PyErr_SetString(PyExc_AssertionError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1820 "PyDateTime_CAPI somehow initialized");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1821 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1822 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1823 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1824 test_run_counter++;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1825 PyDateTime_IMPORT;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1826 if (PyDateTimeAPI)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1827 Py_RETURN_NONE;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1828 else
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1829 return NULL;
57723
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1830 }
7705ac218c87 Merged revisions 76822,76824 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57708
diff changeset
1831
58661
9b351cb9ef98 Merged revisions 77866-77867 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58645
diff changeset
1832
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1833 #ifdef WITH_THREAD
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1834
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1835 /* 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: 36989
diff changeset
1836 * `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: 36989
diff changeset
1837 * 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: 36989
diff changeset
1838 * 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: 36989
diff changeset
1839 * 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: 36989
diff changeset
1840 * 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: 36989
diff changeset
1841 */
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1842 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: 36989
diff changeset
1843
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
1844 static int
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1845 _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
1846 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1847 PyObject *rc;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1848 int success;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1849 PyGILState_STATE s = PyGILState_Ensure();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1850 rc = PyObject_CallFunction((PyObject *)callable, "");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1851 success = (rc != NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1852 Py_XDECREF(rc);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1853 PyGILState_Release(s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1854 return success;
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1855 }
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1856
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1857 /* 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: 36989
diff changeset
1858 * 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: 36989
diff changeset
1859 */
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1860 static void
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1861 _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: 36989
diff changeset
1862 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1863 _make_call(callable);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1864 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: 36989
diff changeset
1865 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1866
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1867 static PyObject *
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1868 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
1869 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1870 PyObject *fn;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1871 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: 36989
diff changeset
1872
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1873 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
1874 return NULL;
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36989
diff changeset
1875
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1876 if (!PyCallable_Check(fn)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1877 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
1878 fn->ob_type->tp_name);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1879 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1880 }
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
1881
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1882 /* 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
1883 PyEval_InitThreads();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1884 thread_done = PyThread_allocate_lock();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1885 if (thread_done == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1886 return PyErr_NoMemory();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1887 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: 36989
diff changeset
1888
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1889 /* 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
1890 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
1891 /* 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
1892 success &= _make_call(fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1893 /* 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
1894 Py_BEGIN_ALLOW_THREADS
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1895 success &= _make_call(fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1896 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
1897 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: 36989
diff changeset
1898
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1899 /* 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
1900 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
1901 to test <wink>
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1902 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1903 Py_BEGIN_ALLOW_THREADS
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1904 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
1905 success &= _make_call(fn);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1906 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
1907 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: 36989
diff changeset
1908
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1909 /* 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
1910 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
1911
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1912 PyThread_free_lock(thread_done);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1913 if (!success)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1914 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1915 Py_RETURN_NONE;
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1916 }
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1917
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1918 /* test Py_AddPendingCalls using threads */
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1919 static int _pending_callback(void *arg)
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1920 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1921 /* 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
1922 PyObject *callable = (PyObject *)arg;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1923 PyObject *r = PyObject_CallObject(callable, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1924 Py_DECREF(callable);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1925 Py_XDECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1926 return r != NULL ? 0 : -1;
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1927 }
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1928
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1929 /* 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
1930 * run from any python thread.
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1931 */
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1932 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
1933 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1934 PyObject *callable;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1935 int r;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1936 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
1937 return NULL;
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1938
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1939 /* 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
1940 Py_INCREF(callable);
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1941
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1942 Py_BEGIN_ALLOW_THREADS
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1943 r = Py_AddPendingCall(&_pending_callback, callable);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1944 Py_END_ALLOW_THREADS
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1945
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1946 if (r<0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1947 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
1948 Py_INCREF(Py_False);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1949 return Py_False;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1950 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1951 Py_INCREF(Py_True);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1952 return Py_True;
50758
2c03c7580aa3 Merged revisions 68425,68461,68498 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50399
diff changeset
1953 }
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1954 #endif
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
1955
42813
74b993a8ad6f Use unicode strings
Neal Norwitz <nnorwitz@gmail.com>
parents: 42334
diff changeset
1956 /* 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
1957 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
1958 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
1959 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1960 PyObject *result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1961 char *msg;
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1962
66799
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1963 #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
1964 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
1965 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
1966 return NULL; \
73642
4700e768c7b5 Use PyUnicode_CompareWithASCIIString() instead of Py_UNICODE_strcmp() to avoid
Victor Stinner <victor.stinner@haypocalc.com>
parents: 72510
diff changeset
1967 if (PyUnicode_CompareWithASCIIString(result, "1")) { \
66799
50d170bb71c7 Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 66664
diff changeset
1968 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
1969 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
1970 } \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1971 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
1972
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1973 CHECK_1_FORMAT("%d", int);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1974 CHECK_1_FORMAT("%ld", long);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1975 /* 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
1976 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
1977
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1978 /* 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
1979 CHECK_1_FORMAT("%u", unsigned int);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1980 CHECK_1_FORMAT("%lu", unsigned long);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1981 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
1982
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1983 /* "%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
1984 #ifdef HAVE_LONG_LONG
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
1985 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
1986 CHECK_1_FORMAT("%lld", PY_LONG_LONG);
57295
ac768c8e13ac Merged revisions 76308 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56900
diff changeset
1987 #endif
ac768c8e13ac Merged revisions 76308 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 56900
diff changeset
1988
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1989 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
1990
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1991 Fail:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1992 Py_XDECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
1993 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
1994
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1995 #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
1996 }
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
1997
58226
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1998
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
1999 static PyObject *
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
2000 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
2001 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
2002 int result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2003 if (py_s == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2004 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2005 result = PyUnicode_CompareWithASCIIString(py_s, "str");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2006 Py_DECREF(py_s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2007 if (!result) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2008 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
2009 "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
2010 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2011 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2012 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
2013 }
58226
c1bec2db1fcd Merged revisions 77395 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 57709
diff changeset
2014
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
2015 /* 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
2016 static PyObject *
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
2017 test_with_docstring(PyObject *self)
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
2018 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2019 Py_RETURN_NONE;
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
2020 }
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
2021
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
2022 /* 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
2023 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
2024 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
2025 double result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2026 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
2027
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2028 #define CHECK_STRING(STR, expected) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2029 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
2030 if (result == -1.0 && PyErr_Occurred()) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2031 return NULL; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2032 if (result != expected) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2033 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
2034 goto fail; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2035 }
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
2036
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2037 #define CHECK_INVALID(STR) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2038 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
2039 if (result == -1.0 && PyErr_Occurred()) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2040 if (PyErr_ExceptionMatches(PyExc_ValueError)) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2041 PyErr_Clear(); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2042 else \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2043 return NULL; \
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 else { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2046 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
2047 goto fail; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2048 }
53707
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
2049
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2050 CHECK_STRING("0.1", 0.1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2051 CHECK_STRING("1.234", 1.234);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2052 CHECK_STRING("-1.35", -1.35);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2053 CHECK_STRING(".1e01", 1.0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2054 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
2055
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2056 CHECK_INVALID(" 0.1");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2057 CHECK_INVALID("\t\n-3");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2058 CHECK_INVALID(".123 ");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2059 CHECK_INVALID("3\n");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2060 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
2061
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2062 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
2063 fail:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2064 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
2065 #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
2066 #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
2067 }
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
2068
13a82a710f19 Issue #5914: Add new C-API function PyOS_string_to_double, to complement
Mark Dickinson <dickinsm@gmail.com>
parents: 52208
diff changeset
2069
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2070 /* Coverage testing of capsule objects. */
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2071
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2072 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
2073 static char *capsule_pointer = "capsule pointer";
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2074 static char *capsule_context = "capsule context";
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2075 static const char *capsule_error = NULL;
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2076 static int
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2077 capsule_destructor_call_count = 0;
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2078
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2079 static void
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2080 capsule_destructor(PyObject *o) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2081 capsule_destructor_call_count++;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2082 if (PyCapsule_GetContext(o) != capsule_context) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2083 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
2084 } 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
2085 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
2086 } 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
2087 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
2088 } 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
2089 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
2090 }
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2091 }
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2092
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2093 typedef struct {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2094 char *name;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2095 char *module;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2096 char *attribute;
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2097 } known_capsule;
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2098
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2099 static PyObject *
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2100 test_capsule(PyObject *self, PyObject *args)
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2101 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2102 PyObject *object;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2103 const char *error = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2104 void *pointer;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2105 void *pointer2;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2106 known_capsule known_capsules[] = {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2107 #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
2108 KNOWN_CAPSULE("_socket", "CAPI"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2109 KNOWN_CAPSULE("_curses", "_C_API"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2110 KNOWN_CAPSULE("datetime", "datetime_CAPI"),
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2111 { NULL, NULL },
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2112 };
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2113 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
2114
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2115 #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
2116
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2117 #define CHECK_DESTRUCTOR \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2118 if (capsule_error) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2119 FAIL(capsule_error); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2120 } \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2121 else if (!capsule_destructor_call_count) { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2122 FAIL("destructor not called!"); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2123 } \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2124 capsule_destructor_call_count = 0; \
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2125
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2126 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
2127 PyCapsule_SetContext(object, capsule_context);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2128 capsule_destructor(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2129 CHECK_DESTRUCTOR;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2130 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2131 CHECK_DESTRUCTOR;
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2132
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2133 object = PyCapsule_New(known, "ignored", NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2134 PyCapsule_SetPointer(object, capsule_pointer);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2135 PyCapsule_SetName(object, capsule_name);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2136 PyCapsule_SetDestructor(object, capsule_destructor);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2137 PyCapsule_SetContext(object, capsule_context);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2138 capsule_destructor(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2139 CHECK_DESTRUCTOR;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2140 /* intentionally access using the wrong name */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2141 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
2142 if (!PyErr_Occurred()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2143 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
2144 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2145 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2146 if (pointer2) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2147 if (pointer2 == capsule_pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2148 FAIL("PyCapsule_GetPointer should not have"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2149 " returned the internal pointer!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2150 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2151 FAIL("PyCapsule_GetPointer should have "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2152 "returned NULL pointer but did not!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2153 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2154 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2155 PyCapsule_SetDestructor(object, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2156 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2157 if (capsule_destructor_call_count) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2158 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
2159 }
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2160
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2161 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
2162 /* 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
2163 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
2164 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2165 static char buffer[256];
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2166 #undef FAIL
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2167 #define FAIL(x) \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2168 { \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2169 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
2170 x, known->module, known->attribute); \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2171 error = buffer; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2172 goto exit; \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2173 } \
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2174
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2175 PyObject *module = PyImport_ImportModule(known->module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2176 if (module) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2177 pointer = PyCapsule_Import(known->name, 0);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2178 if (!pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2179 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2180 FAIL("PyCapsule_GetPointer returned NULL unexpectedly!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2181 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2182 object = PyObject_GetAttrString(module, known->attribute);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2183 if (!object) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2184 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2185 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2186 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2187 pointer2 = PyCapsule_GetPointer(object,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2188 "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
2189 if (!PyErr_Occurred()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2190 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2191 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2192 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
2193 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2194 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2195 if (pointer2) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2196 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2197 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2198 if (pointer2 == pointer) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2199 FAIL("PyCapsule_GetPointer should not have"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2200 " returned its internal pointer!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2201 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2202 FAIL("PyCapsule_GetPointer should have"
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2203 " returned NULL pointer but did not!");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2204 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2205 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2206 Py_DECREF(object);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2207 Py_DECREF(module);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2208 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2209 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2210 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2211 }
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2212
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2213 exit:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2214 if (error) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2215 return raiseTestError("test_capsule", error);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2216 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2217 Py_RETURN_NONE;
53816
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2218 #undef FAIL
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2219 }
911df82bc25d add a replacement API for PyCObject, PyCapsule #5630
Benjamin Peterson <benjamin@python.org>
parents: 53811
diff changeset
2220
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2221 #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
2222 /* Profiling of integer performance */
47679
8c6068f14ee8 Make print_delta static.
Martin v. Löwis <martin@v.loewis.de>
parents: 47580
diff changeset
2223 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
2224 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2225 e->tv_sec -= s->tv_sec;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2226 e->tv_usec -= s->tv_usec;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2227 if (e->tv_usec < 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2228 e->tv_sec -=1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2229 e->tv_usec += 1000000;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2230 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2231 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
2232 }
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2233
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2234 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
2235 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
2236 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2237 int i, k;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2238 struct timeval start, stop;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2239 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
2240
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2241 /* Test 1: Allocate and immediately deallocate
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2242 many small integers */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2243 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2244 for(k=0; k < 20000; k++)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2245 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2246 single = PyLong_FromLong(i);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2247 Py_DECREF(single);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2248 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2249 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2250 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
2251
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2252 /* Test 2: Allocate and immediately deallocate
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2253 many large integers */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2254 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2255 for(k=0; k < 20000; k++)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2256 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2257 single = PyLong_FromLong(i+1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2258 Py_DECREF(single);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2259 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2260 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2261 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
2262
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2263 /* 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
2264 them all simultaneously. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2265 multiple = malloc(sizeof(PyObject*) * 1000);
84833
081e9fa5e933 Fix memory leaks and add checks for failing malloc() calls to testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84831
diff changeset
2266 if (multiple == NULL)
081e9fa5e933 Fix memory leaks and add checks for failing malloc() calls to testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84831
diff changeset
2267 return PyErr_NoMemory();
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2268 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2269 for(k=0; k < 20000; k++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2270 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2271 multiple[i] = PyLong_FromLong(i+1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2272 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2273 for(i=0; i < 1000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2274 Py_DECREF(multiple[i]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2275 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2276 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2277 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2278 print_delta(3, &start, &stop);
84833
081e9fa5e933 Fix memory leaks and add checks for failing malloc() calls to testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84831
diff changeset
2279 free(multiple);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2280
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2281 /* 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
2282 them all simultaneously. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2283 multiple = malloc(sizeof(PyObject*) * 1000000);
84833
081e9fa5e933 Fix memory leaks and add checks for failing malloc() calls to testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84831
diff changeset
2284 if (multiple == NULL)
081e9fa5e933 Fix memory leaks and add checks for failing malloc() calls to testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84831
diff changeset
2285 return PyErr_NoMemory();
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2286 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2287 for(k=0; k < 20; k++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2288 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2289 multiple[i] = PyLong_FromLong(i+1000000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2290 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2291 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2292 Py_DECREF(multiple[i]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2293 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2294 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2295 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2296 print_delta(4, &start, &stop);
84833
081e9fa5e933 Fix memory leaks and add checks for failing malloc() calls to testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84831
diff changeset
2297 free(multiple);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2298
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2299 /* Test 5: Allocate many integers < 32000 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2300 multiple = malloc(sizeof(PyObject*) * 1000000);
84833
081e9fa5e933 Fix memory leaks and add checks for failing malloc() calls to testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84831
diff changeset
2301 if (multiple == NULL)
081e9fa5e933 Fix memory leaks and add checks for failing malloc() calls to testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84831
diff changeset
2302 return PyErr_NoMemory();
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2303 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2304 for(k=0; k < 10; k++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2305 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2306 multiple[i] = PyLong_FromLong(i+1000);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2307 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2308 for(i=0; i < 1000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2309 Py_DECREF(multiple[i]);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2310 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2311 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2312 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2313 print_delta(5, &start, &stop);
84833
081e9fa5e933 Fix memory leaks and add checks for failing malloc() calls to testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84831
diff changeset
2314 free(multiple);
40626
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2315
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2316 /* Test 6: Perform small int addition */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2317 op1 = PyLong_FromLong(1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2318 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2319 for(i=0; i < 10000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2320 result = PyNumber_Add(op1, op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2321 Py_DECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2322 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2323 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2324 Py_DECREF(op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2325 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
2326
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2327 /* Test 7: Perform medium int addition */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2328 op1 = PyLong_FromLong(1000);
84840
32ebd1846d07 Handle yet another potential failure in testcapi
Christian Heimes <christian@cheimes.de>
parents: 84836
diff changeset
2329 if (op1 == NULL)
32ebd1846d07 Handle yet another potential failure in testcapi
Christian Heimes <christian@cheimes.de>
parents: 84836
diff changeset
2330 return NULL;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2331 gettimeofday(&start, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2332 for(i=0; i < 10000000; i++) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2333 result = PyNumber_Add(op1, op1);
84831
d49f65ff4f3c Fix possible NULL pointer dereferences in testcapi module
Christian Heimes <christian@cheimes.de>
parents: 84732
diff changeset
2334 Py_XDECREF(result);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2335 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2336 gettimeofday(&stop, NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2337 Py_DECREF(op1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2338 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
2339
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2340 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2341 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
2342 }
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2343 #endif
4aee3f672f77 Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents: 40450
diff changeset
2344
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
2345 /* 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
2346 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
2347 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
2348 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2349 PyObject *file;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2350 PyObject *traceback;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2351 int result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2352
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2353 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
2354 &traceback, &file))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2355 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2356
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2357 result = PyTraceBack_Print(traceback, file);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2358 if (result < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2359 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2360 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
2361 }
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
2362
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2363 /* To test the format of exceptions as printed out. */
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2364 static PyObject *
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2365 exception_print(PyObject *self, PyObject *args)
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2366 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2367 PyObject *value;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2368 PyObject *tb;
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2369
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2370 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
2371 &value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2372 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2373 if (!PyExceptionInstance_Check(value)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2374 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
2375 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2376 }
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2377
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2378 tb = PyException_GetTraceback(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2379 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
2380 Py_XDECREF(tb);
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2381
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2382 Py_RETURN_NONE;
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2383 }
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2384
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2385
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 48467
diff changeset
2386
48704
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2387
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2388 /* 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
2389 static PyObject *
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2390 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
2391 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2392 PyErr_NoMemory();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2393 return NULL;
48704
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2394 }
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2395
54421
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2396 /* Issue 6012 */
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2397 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
2398 static int
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2399 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
2400 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2401 /* 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
2402 assert(str1);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2403 str2 = str1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2404 Py_INCREF(str2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2405 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
2406 }
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2407 static PyObject*
11de35da281c Issue #6012: Add cleanup support to O& argument parsing.
Martin v. Löwis <martin@v.loewis.de>
parents: 53822
diff changeset
2408 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
2409 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2410 PyObject *res;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2411 str1 = str2 = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2412 if (!PyArg_ParseTuple(args, "O&O&",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2413 PyUnicode_FSConverter, &str1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2414 failing_converter, &str2)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2415 if (!str2)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2416 /* argument converter not called? */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2417 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2418 /* Should be 1 */
67347
3bf4d9f1660a Issue #9566: use Py_ssize_t instead of int
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66799
diff changeset
2419 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
2420 Py_DECREF(str2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2421 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2422 return res;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2423 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2424 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
2425 }
48704
1ed86ce0beb2 add _testcapi.raise_memoryerror to make test_exceptions.test_MemoryError simpler
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
2426
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2427 /* 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
2428 static PyObject *
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2429 code_newempty(PyObject *self, PyObject *args)
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2430 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2431 const char *filename;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2432 const char *funcname;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2433 int firstlineno;
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2434
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2435 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
2436 &filename, &funcname, &firstlineno))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2437 return NULL;
55372
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2438
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2439 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
2440 }
79718ee03986 Merged revisions 72487-72488,72879 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 54421
diff changeset
2441
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2442 /* Test PyErr_NewExceptionWithDoc (also exercise PyErr_NewException).
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2443 Run via Lib/test/test_exceptions.py */
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2444 static PyObject *
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2445 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
2446 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2447 const char *name;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2448 const char *doc = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2449 PyObject *base = NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2450 PyObject *dict = NULL;
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2451
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2452 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
2453
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2454 if (!PyArg_ParseTupleAndKeywords(args, kwargs,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2455 "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
2456 &name, &doc, &base, &dict))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2457 return NULL;
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2458
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2459 return PyErr_NewExceptionWithDoc(name, doc, base, dict);
57962
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2460 }
c1972eef3579 Merged revisions 77088 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57858
diff changeset
2461
68127
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2462 static PyObject *
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2463 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
2464 {
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2465 Py_buffer info;
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2466 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
2467 return NULL;
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2468 return PyMemoryView_FromBuffer(&info);
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2469 }
cbcb26a9d2bd Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with
Antoine Pitrou <solipsis@pitrou.net>
parents: 67363
diff changeset
2470
61555
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2471 /* 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
2472 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
2473 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
2474 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
2475 {
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2476 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
2477 /* 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
2478 !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
2479 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
2480 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
2481 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
2482 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
2483 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
2484 }
1698c55b2af9 Make PyErr_Occurred return NULL if there is no current thread. Previously it
Jeffrey Yasskin <jyasskin@gmail.com>
parents: 61466
diff changeset
2485
74471
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2486 /* 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
2487 static PyObject *
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2488 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
2489 {
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2490 const char *code;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2491 int r;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2492 PyThreadState *substate, *mainstate;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2493
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2494 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
2495 &code))
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2496 return NULL;
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2497
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2498 mainstate = PyThreadState_Get();
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2499
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2500 PyThreadState_Swap(NULL);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2501
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2502 substate = Py_NewInterpreter();
74742
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2503 if (substate == NULL) {
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2504 /* Since no new thread state was created, there is no exception to
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2505 propagate; raise a fresh one after swapping in the old thread
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2506 state. */
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2507 PyThreadState_Swap(mainstate);
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2508 PyErr_SetString(PyExc_RuntimeError, "sub-interpreter creation failed");
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2509 return NULL;
404c0c345321 Check for errors in creating sub-interpreters when testing the C API.
Brett Cannon <brett@python.org>
parents: 74472
diff changeset
2510 }
74471
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2511 r = PyRun_SimpleString(code);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2512 Py_EndInterpreter(substate);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2513
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2514 PyThreadState_Swap(mainstate);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2515
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2516 return PyLong_FromLong(r);
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2517 }
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2518
75590
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2519 static PyObject *
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2520 test_pytime_object_to_time_t(PyObject *self, PyObject *args)
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2521 {
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2522 PyObject *obj;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2523 time_t sec;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2524 if (!PyArg_ParseTuple(args, "O:pytime_object_to_time_t", &obj))
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2525 return NULL;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2526 if (_PyTime_ObjectToTime_t(obj, &sec) == -1)
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2527 return NULL;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2528 return _PyLong_FromTime_t(sec);
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2529 }
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2530
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2531 static PyObject *
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2532 test_pytime_object_to_timeval(PyObject *self, PyObject *args)
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2533 {
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2534 PyObject *obj;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2535 time_t sec;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2536 long usec;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2537 if (!PyArg_ParseTuple(args, "O:pytime_object_to_timeval", &obj))
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2538 return NULL;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2539 if (_PyTime_ObjectToTimeval(obj, &sec, &usec) == -1)
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2540 return NULL;
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2541 return Py_BuildValue("Nl", _PyLong_FromTime_t(sec), usec);
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2542 }
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2543
75372
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2544 static PyObject *
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2545 test_pytime_object_to_timespec(PyObject *self, PyObject *args)
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2546 {
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2547 PyObject *obj;
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2548 time_t sec;
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2549 long nsec;
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2550 if (!PyArg_ParseTuple(args, "O:pytime_object_to_timespec", &obj))
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2551 return NULL;
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2552 if (_PyTime_ObjectToTimespec(obj, &sec, &nsec) == -1)
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2553 return NULL;
75590
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2554 return Py_BuildValue("Nl", _PyLong_FromTime_t(sec), nsec);
75372
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2555 }
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2556
84911
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2557 static void
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2558 slot_tp_del(PyObject *self)
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2559 {
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2560 _Py_IDENTIFIER(__tp_del__);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2561 PyObject *del, *res;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2562 PyObject *error_type, *error_value, *error_traceback;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2563
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2564 /* Temporarily resurrect the object. */
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2565 assert(self->ob_refcnt == 0);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2566 self->ob_refcnt = 1;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2567
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2568 /* Save the current exception, if any. */
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2569 PyErr_Fetch(&error_type, &error_value, &error_traceback);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2570
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2571 /* Execute __del__ method, if any. */
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2572 del = _PyObject_LookupSpecial(self, &PyId___tp_del__);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2573 if (del != NULL) {
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2574 res = PyEval_CallObject(del, NULL);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2575 if (res == NULL)
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2576 PyErr_WriteUnraisable(del);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2577 else
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2578 Py_DECREF(res);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2579 Py_DECREF(del);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2580 }
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2581
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2582 /* Restore the saved exception. */
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2583 PyErr_Restore(error_type, error_value, error_traceback);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2584
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2585 /* Undo the temporary resurrection; can't use DECREF here, it would
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2586 * cause a recursive call.
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2587 */
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2588 assert(self->ob_refcnt > 0);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2589 if (--self->ob_refcnt == 0)
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2590 return; /* this is the normal path out */
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2591
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2592 /* __del__ resurrected it! Make it look like the original Py_DECREF
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2593 * never happened.
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2594 */
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2595 {
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2596 Py_ssize_t refcnt = self->ob_refcnt;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2597 _Py_NewReference(self);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2598 self->ob_refcnt = refcnt;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2599 }
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2600 assert(!PyType_IS_GC(Py_TYPE(self)) ||
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2601 _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2602 /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2603 * we need to undo that. */
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2604 _Py_DEC_REFTOTAL;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2605 /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2606 * chain, so no more to do there.
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2607 * If COUNT_ALLOCS, the original decref bumped tp_frees, and
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2608 * _Py_NewReference bumped tp_allocs: both of those need to be
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2609 * undone.
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2610 */
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2611 #ifdef COUNT_ALLOCS
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2612 --Py_TYPE(self)->tp_frees;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2613 --Py_TYPE(self)->tp_allocs;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2614 #endif
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2615 }
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2616
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2617 static PyObject *
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2618 with_tp_del(PyObject *self, PyObject *args)
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2619 {
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2620 PyObject *obj;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2621 PyTypeObject *tp;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2622
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2623 if (!PyArg_ParseTuple(args, "O:with_tp_del", &obj))
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2624 return NULL;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2625 tp = (PyTypeObject *) obj;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2626 if (!PyType_Check(obj) || !PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) {
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2627 PyErr_Format(PyExc_TypeError,
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2628 "heap type expected, got %R", obj);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2629 return NULL;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2630 }
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2631 tp->tp_del = slot_tp_del;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2632 Py_INCREF(obj);
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2633 return obj;
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2634 }
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2635
83937
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2636 static PyObject *
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2637 _test_incref(PyObject *ob)
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2638 {
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2639 Py_INCREF(ob);
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2640 return ob;
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2641 }
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2642
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2643 static PyObject *
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2644 test_xincref_doesnt_leak(PyObject *ob)
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2645 {
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2646 PyObject *obj = PyLong_FromLong(0);
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2647 Py_XINCREF(_test_incref(obj));
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2648 Py_DECREF(obj);
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2649 Py_DECREF(obj);
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2650 Py_DECREF(obj);
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2651 Py_RETURN_NONE;
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2652 }
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2653
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2654 static PyObject *
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2655 test_incref_doesnt_leak(PyObject *ob)
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2656 {
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2657 PyObject *obj = PyLong_FromLong(0);
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2658 Py_INCREF(_test_incref(obj));
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2659 Py_DECREF(obj);
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2660 Py_DECREF(obj);
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2661 Py_DECREF(obj);
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2662 Py_RETURN_NONE;
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2663 }
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2664
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2665 static PyObject *
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2666 test_xdecref_doesnt_leak(PyObject *ob)
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2667 {
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2668 Py_XDECREF(PyLong_FromLong(0));
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2669 Py_RETURN_NONE;
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2670 }
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2671
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2672 static PyObject *
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2673 test_decref_doesnt_leak(PyObject *ob)
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2674 {
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2675 Py_DECREF(PyLong_FromLong(0));
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2676 Py_RETURN_NONE;
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2677 }
74471
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2678
84471
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2679 static PyObject *
84925
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2680 test_incref_decref_API(PyObject *ob)
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2681 {
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2682 PyObject *obj = PyLong_FromLong(0);
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2683 Py_IncRef(ob);
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2684 Py_DecRef(obj);
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2685 Py_DecRef(obj);
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2686 Py_RETURN_NONE;
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2687 }
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2688
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2689 static PyObject *
84471
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2690 test_pymem_alloc0(PyObject *self)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2691 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2692 void *ptr;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2693
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2694 ptr = PyMem_Malloc(0);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2695 if (ptr == NULL) {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2696 PyErr_SetString(PyExc_RuntimeError, "PyMem_Malloc(0) returns NULL");
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2697 return NULL;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2698 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2699 PyMem_Free(ptr);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2700
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2701 ptr = PyObject_Malloc(0);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2702 if (ptr == NULL) {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2703 PyErr_SetString(PyExc_RuntimeError, "PyObject_Malloc(0) returns NULL");
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2704 return NULL;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2705 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2706 PyObject_Free(ptr);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2707
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2708 Py_RETURN_NONE;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2709 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2710
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2711 typedef struct {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2712 PyMemAllocator alloc;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2713
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2714 size_t malloc_size;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2715 void *realloc_ptr;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2716 size_t realloc_new_size;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2717 void *free_ptr;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2718 } alloc_hook_t;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2719
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2720 static void* hook_malloc (void* ctx, size_t size)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2721 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2722 alloc_hook_t *hook = (alloc_hook_t *)ctx;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2723 hook->malloc_size = size;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2724 return hook->alloc.malloc(hook->alloc.ctx, size);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2725 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2726
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2727 static void* hook_realloc (void* ctx, void* ptr, size_t new_size)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2728 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2729 alloc_hook_t *hook = (alloc_hook_t *)ctx;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2730 hook->realloc_ptr = ptr;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2731 hook->realloc_new_size = new_size;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2732 return hook->alloc.realloc(hook->alloc.ctx, ptr, new_size);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2733 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2734
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2735 static void hook_free (void *ctx, void *ptr)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2736 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2737 alloc_hook_t *hook = (alloc_hook_t *)ctx;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2738 hook->free_ptr = ptr;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2739 hook->alloc.free(hook->alloc.ctx, ptr);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2740 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2741
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2742 static PyObject *
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2743 test_setallocators(PyMemAllocatorDomain domain)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2744 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2745 PyObject *res = NULL;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2746 const char *error_msg;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2747 alloc_hook_t hook;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2748 PyMemAllocator alloc;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2749 size_t size, size2;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2750 void *ptr, *ptr2;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2751
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2752 hook.malloc_size = 0;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2753 hook.realloc_ptr = NULL;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2754 hook.realloc_new_size = 0;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2755 hook.free_ptr = NULL;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2756
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2757 alloc.ctx = &hook;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2758 alloc.malloc = &hook_malloc;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2759 alloc.realloc = &hook_realloc;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2760 alloc.free = &hook_free;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2761 PyMem_GetAllocator(domain, &hook.alloc);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2762 PyMem_SetAllocator(domain, &alloc);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2763
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2764 size = 42;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2765 switch(domain)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2766 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2767 case PYMEM_DOMAIN_RAW: ptr = PyMem_RawMalloc(size); break;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2768 case PYMEM_DOMAIN_MEM: ptr = PyMem_Malloc(size); break;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2769 case PYMEM_DOMAIN_OBJ: ptr = PyObject_Malloc(size); break;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2770 default: ptr = NULL; break;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2771 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2772
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2773 if (ptr == NULL) {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2774 error_msg = "malloc failed";
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2775 goto fail;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2776 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2777
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2778 if (hook.malloc_size != size) {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2779 error_msg = "malloc invalid size";
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2780 goto fail;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2781 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2782
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2783 size2 = 200;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2784 switch(domain)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2785 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2786 case PYMEM_DOMAIN_RAW: ptr2 = PyMem_RawRealloc(ptr, size2); break;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2787 case PYMEM_DOMAIN_MEM: ptr2 = PyMem_Realloc(ptr, size2); break;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2788 case PYMEM_DOMAIN_OBJ: ptr2 = PyObject_Realloc(ptr, size2); break;
84978
52e166a975f9 Fix warning: ‘ptr2’ may be used uninitialized in this function
Christian Heimes <christian@cheimes.de>
parents: 84925
diff changeset
2789 default: ptr2 = NULL; break;
84471
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2790 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2791
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2792 if (ptr2 == NULL) {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2793 error_msg = "realloc failed";
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2794 goto fail;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2795 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2796
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2797 if (hook.realloc_ptr != ptr
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2798 || hook.realloc_new_size != size2) {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2799 error_msg = "realloc invalid parameters";
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2800 goto fail;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2801 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2802
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2803 switch(domain)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2804 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2805 case PYMEM_DOMAIN_RAW: PyMem_RawFree(ptr2); break;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2806 case PYMEM_DOMAIN_MEM: PyMem_Free(ptr2); break;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2807 case PYMEM_DOMAIN_OBJ: PyObject_Free(ptr2); break;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2808 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2809
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2810 if (hook.free_ptr != ptr2) {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2811 error_msg = "free invalid pointer";
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2812 goto fail;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2813 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2814
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2815 Py_INCREF(Py_None);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2816 res = Py_None;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2817 goto finally;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2818
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2819 fail:
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2820 PyErr_SetString(PyExc_RuntimeError, error_msg);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2821
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2822 finally:
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2823 PyMem_SetAllocator(domain, &hook.alloc);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2824 return res;
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2825 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2826
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2827 static PyObject *
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2828 test_pymem_setrawallocators(PyObject *self)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2829 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2830 return test_setallocators(PYMEM_DOMAIN_RAW);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2831 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2832
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2833 static PyObject *
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2834 test_pymem_setallocators(PyObject *self)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2835 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2836 return test_setallocators(PYMEM_DOMAIN_MEM);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2837 }
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2838
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2839 static PyObject *
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2840 test_pyobject_setallocators(PyObject *self)
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2841 {
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2842 return test_setallocators(PYMEM_DOMAIN_OBJ);
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2843 }
74471
eb47af6e9e22 Test running of code in a sub-interpreter
Antoine Pitrou <solipsis@pitrou.net>
parents: 73680
diff changeset
2844
87470
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2845 PyDoc_STRVAR(docstring_empty,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2846 ""
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2847 );
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2848
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2849 PyDoc_STRVAR(docstring_no_signature,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2850 "This docstring has no signature."
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2851 );
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2852
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2853 PyDoc_STRVAR(docstring_with_invalid_signature,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2854 "docstring_with_invalid_signature (boo)\n"
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2855 "\n"
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2856 "This docstring has an invalid signature."
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2857 );
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2858
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2859 PyDoc_STRVAR(docstring_with_signature,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2860 "docstring_with_signature(sig)\n"
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2861 "This docstring has a valid signature."
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2862 );
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2863
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2864 PyDoc_STRVAR(docstring_with_signature_and_extra_newlines,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2865 "docstring_with_signature_and_extra_newlines(parameter)\n"
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2866 "\n"
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2867 "\n"
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2868 "\n"
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2869 "This docstring has a valid signature and some extra newlines."
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2870 );
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2871
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2872 static PyMethodDef TestMethods[] = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2873 {"raise_exception", raise_exception, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2874 {"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
2875 {"test_config", (PyCFunction)test_config, METH_NOARGS},
86745
daa1ab27b5c2 Issue #19433: test_capi: add tests on the size of some C types
Victor Stinner <victor.stinner@gmail.com>
parents: 85419
diff changeset
2876 {"test_sizeof_c_types", (PyCFunction)test_sizeof_c_types, METH_NOARGS},
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2877 {"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
2878 {"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
2879 {"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
2880 {"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
2881 {"test_long_api", (PyCFunction)test_long_api, METH_NOARGS},
83937
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2882 {"test_xincref_doesnt_leak",(PyCFunction)test_xincref_doesnt_leak, METH_NOARGS},
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2883 {"test_incref_doesnt_leak", (PyCFunction)test_incref_doesnt_leak, METH_NOARGS},
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2884 {"test_xdecref_doesnt_leak",(PyCFunction)test_xdecref_doesnt_leak, METH_NOARGS},
aff41a6421c2 don't expand the operand to Py_XINCREF/XDECREF/CLEAR/DECREF multiple times (closes #17206)
Benjamin Peterson <benjamin@python.org>
parents: 82533
diff changeset
2885 {"test_decref_doesnt_leak", (PyCFunction)test_decref_doesnt_leak, METH_NOARGS},
84925
5cea8bc7bc7f Test Py_IncRef() and Py_DecRef() C functions
Christian Heimes <christian@cheimes.de>
parents: 84911
diff changeset
2886 {"test_incref_decref_API", (PyCFunction)test_incref_decref_API, METH_NOARGS},
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2887 {"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
2888 METH_NOARGS},
72312
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
2889 {"test_long_as_double", (PyCFunction)test_long_as_double,METH_NOARGS},
4a66a35da3fd Issue #12909: Make PyLong_As* functions consistent in their use of exceptions.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents: 71543
diff changeset
2890 {"test_long_as_size_t", (PyCFunction)test_long_as_size_t,METH_NOARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2891 {"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
2892 {"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
2893 {"test_empty_argparse", (PyCFunction)test_empty_argparse,METH_NOARGS},
77567
ace45d23628a Issue #14769: test_capi now has SkipitemTest, which cleverly checks
Larry Hastings <larry@hastings.org>
parents: 76776
diff changeset
2894 {"parse_tuple_and_keywords", parse_tuple_and_keywords, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2895 {"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
2896 {"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
2897 {"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
2898 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
2899 {"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
2900 {"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
2901 {"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
2902 {"getargs_tuple", getargs_tuple, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2903 {"getargs_keywords", (PyCFunction)getargs_keywords,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2904 METH_VARARGS|METH_KEYWORDS},
75842
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
2905 {"getargs_keyword_only", (PyCFunction)getargs_keyword_only,
052779d34945 Issue #14328: Add keyword-only parameters to PyArg_ParseTupleAndKeywords.
Larry Hastings <larry@hastings.org>
parents: 75590
diff changeset
2906 METH_VARARGS|METH_KEYWORDS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2907 {"getargs_b", getargs_b, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2908 {"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
2909 {"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
2910 {"getargs_H", getargs_H, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2911 {"getargs_I", getargs_I, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2912 {"getargs_k", getargs_k, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2913 {"getargs_i", getargs_i, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2914 {"getargs_l", getargs_l, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2915 {"getargs_n", getargs_n, METH_VARARGS},
76776
bc6d28e726d8 Issue #14705: Add 'p' format character to PyArg_ParseTuple* for bool support.
Larry Hastings <larry@hastings.org>
parents: 76423
diff changeset
2916 {"getargs_p", getargs_p, METH_VARARGS},
18092
bd0056ee1a6e The merest start of a test for the PyLong_{As,From}{Unsigned,}LongLong()
Tim Peters <tim.peters@gmail.com>
parents: 17496
diff changeset
2917 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2918 {"getargs_L", getargs_L, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2919 {"getargs_K", getargs_K, METH_VARARGS},
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2920 {"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
2921 {"test_long_long_and_overflow",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60229
diff changeset
2922 (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
2923 {"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
2924 #endif
71543
536fccc75f5a Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format.
Eli Bendersky <eliben@gmail.com>
parents: 68809
diff changeset
2925 {"getargs_c", getargs_c, METH_VARARGS},
62322
b32a2816f6e9 Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z"
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61671
diff changeset
2926 {"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
2927 {"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
2928 {"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
2929 {"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
2930 {"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
2931 {"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
2932 {"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
2933 {"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
2934 {"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
2935 {"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
2936 {"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
2937 {"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
2938 {"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
2939 {"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
2940 {"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
2941 (PyCFunction)codec_incrementalencoder, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2942 {"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
2943 (PyCFunction)codec_incrementaldecoder, METH_VARARGS},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
2944 {"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
2945 {"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
2946 {"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
2947 {"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
2948 {"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
2949 {"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
2950 {"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
2951 {"unicode_transformdecimaltoascii", unicode_transformdecimaltoascii, METH_VARARGS},
80180
0b5f00ccf907 Issue #16145: Support legacy strings in the _csv module.
Stefan Krah <skrah@bytereef.org>
parents: 79452
diff changeset
2952 {"unicode_legacy_string", unicode_legacy_string, METH_VARARGS},
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28652
diff changeset
2953 #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
2954 {"_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
2955 {"_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
2956 #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
2957 #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
2958 {"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
2959 #endif
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2960 {"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
2961 {"exception_print", exception_print, METH_VARARGS},
76418
9fdec1354af4 Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo.
Martin v. Löwis <martin@v.loewis.de>
parents: 75842
diff changeset
2962 {"set_exc_info", test_set_exc_info, METH_VARARGS},
65055
de7cdb726350 Issue #8870: PyUnicode_AsWideCharString() doesn't count the trailing nul character
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64639
diff changeset
2963 {"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
2964 {"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
2965 {"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
2966 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
2967 {"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
2968 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
2969 {"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
2970 {"run_in_subinterp", run_in_subinterp, METH_VARARGS},
75590
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2971 {"pytime_object_to_time_t", test_pytime_object_to_time_t, METH_VARARGS},
1e9cc1a03365 Close #14180: Factorize code to convert a number of seconds to time_t, timeval or timespec
Victor Stinner <vstinner@wyplay.com>
parents: 75372
diff changeset
2972 {"pytime_object_to_timeval", test_pytime_object_to_timeval, METH_VARARGS},
75372
67d9595a833c Issue #13964: signal.sigtimedwait() timeout is now a float instead of a tuple
Victor Stinner <victor.stinner@gmail.com>
parents: 75254
diff changeset
2973 {"pytime_object_to_timespec", test_pytime_object_to_timespec, METH_VARARGS},
84911
3f994367a979 Issue #18112: PEP 442 implementation (safe object finalization).
Antoine Pitrou <solipsis@pitrou.net>
parents: 84841
diff changeset
2974 {"with_tp_del", with_tp_del, METH_VARARGS},
84471
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2975 {"test_pymem",
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2976 (PyCFunction)test_pymem_alloc0, METH_NOARGS},
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2977 {"test_pymem_alloc0",
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2978 (PyCFunction)test_pymem_setrawallocators, METH_NOARGS},
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2979 {"test_pymem_setallocators",
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2980 (PyCFunction)test_pymem_setallocators, METH_NOARGS},
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2981 {"test_pyobject_setallocators",
ca78c974e938 Issue #3329: Implement the PEP 445
Victor Stinner <victor.stinner@gmail.com>
parents: 84131
diff changeset
2982 (PyCFunction)test_pyobject_setallocators, METH_NOARGS},
87470
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2983 {"no_docstring",
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2984 (PyCFunction)test_with_docstring, METH_NOARGS},
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2985 {"docstring_empty",
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2986 (PyCFunction)test_with_docstring, METH_NOARGS,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2987 docstring_empty},
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2988 {"docstring_no_signature",
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2989 (PyCFunction)test_with_docstring, METH_NOARGS,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2990 docstring_no_signature},
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2991 {"docstring_with_invalid_signature",
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2992 (PyCFunction)test_with_docstring, METH_NOARGS,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2993 docstring_with_invalid_signature},
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2994 {"docstring_with_signature",
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2995 (PyCFunction)test_with_docstring, METH_NOARGS,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2996 docstring_with_signature},
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2997 {"docstring_with_signature_and_extra_newlines",
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2998 (PyCFunction)test_with_docstring, METH_NOARGS,
78ec18f5cb45 Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents: 86746
diff changeset
2999 docstring_with_signature_and_extra_newlines},
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3000 {NULL, NULL} /* sentinel */
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3001 };
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3002
28652
28a2975514cd SF # 595026: support for masks in getargs.c.
Thomas Heller <theller@ctypes.org>
parents: 28437
diff changeset
3003 #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
3004
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3005 typedef struct {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3006 char bool_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3007 char byte_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3008 unsigned char ubyte_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3009 short short_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3010 unsigned short ushort_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3011 int int_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3012 unsigned int uint_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3013 long long_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3014 unsigned long ulong_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3015 Py_ssize_t pyssizet_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3016 float float_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3017 double double_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3018 char inplace_member[6];
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41587
diff changeset
3019 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3020 PY_LONG_LONG longlong_member;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3021 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
3022 #endif
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3023 } all_structmembers;
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3024
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3025 typedef struct {
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3026 PyObject_HEAD
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3027 all_structmembers structmembers;
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3028 } test_structmembers;
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3029
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3030 static struct PyMemberDef test_members[] = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3031 {"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
3032 {"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
3033 {"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
3034 {"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
3035 {"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
3036 {"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
3037 {"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
3038 {"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
3039 {"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
3040 {"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
3041 {"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
3042 {"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
3043 {"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
3044 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3045 {"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
3046 {"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
3047 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3048 {NULL}
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3049 };
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3050
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3051
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3052 static PyObject *
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3053 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
3054 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3055 static char *keywords[] = {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3056 "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
3057 "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
3058 "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
3059 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3060 "T_LONGLONG", "T_ULONGLONG",
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3061 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3062 NULL};
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3063 static char *fmt = "|bbBhHiIlknfds#"
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3064 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3065 "LK"
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3066 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3067 ;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3068 test_structmembers *ob;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3069 const char *s = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3070 Py_ssize_t string_len = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3071 ob = PyObject_New(test_structmembers, type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3072 if (ob == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3073 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3074 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
3075 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
3076 &ob->structmembers.bool_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3077 &ob->structmembers.byte_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3078 &ob->structmembers.ubyte_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3079 &ob->structmembers.short_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3080 &ob->structmembers.ushort_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3081 &ob->structmembers.int_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3082 &ob->structmembers.uint_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3083 &ob->structmembers.long_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3084 &ob->structmembers.ulong_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3085 &ob->structmembers.pyssizet_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3086 &ob->structmembers.float_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3087 &ob->structmembers.double_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3088 &s, &string_len
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3089 #ifdef HAVE_LONG_LONG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3090 , &ob->structmembers.longlong_member,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3091 &ob->structmembers.ulonglong_member
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3092 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3093 )) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3094 Py_DECREF(ob);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3095 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3096 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3097 if (s != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3098 if (string_len > 5) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3099 Py_DECREF(ob);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3100 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
3101 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3102 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3103 strcpy(ob->structmembers.inplace_member, s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3104 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3105 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3106 strcpy(ob->structmembers.inplace_member, "");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3107 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3108 return (PyObject *)ob;
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3109 }
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3110
44885
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3111 static void
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3112 test_structmembers_free(PyObject *ob)
fefaa0e66fdd Merged revisions 60176-60209 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44351
diff changeset
3113 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3114 PyObject_FREE(ob);
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3115 }
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3116
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3117 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
3118 PyVarObject_HEAD_INIT(NULL, 0)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3119 "test_structmembersType",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3120 sizeof(test_structmembers), /* tp_basicsize */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3121 0, /* tp_itemsize */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3122 test_structmembers_free, /* destructor tp_dealloc */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3123 0, /* tp_print */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3124 0, /* tp_getattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3125 0, /* tp_setattr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3126 0, /* tp_reserved */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3127 0, /* tp_repr */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3128 0, /* tp_as_number */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3129 0, /* tp_as_sequence */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3130 0, /* tp_as_mapping */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3131 0, /* tp_hash */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3132 0, /* tp_call */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3133 0, /* tp_str */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3134 PyObject_GenericGetAttr, /* tp_getattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3135 PyObject_GenericSetAttr, /* tp_setattro */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3136 0, /* tp_as_buffer */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3137 0, /* tp_flags */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3138 "Type containing all structmember types",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3139 0, /* traverseproc tp_traverse */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3140 0, /* tp_clear */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3141 0, /* tp_richcompare */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3142 0, /* tp_weaklistoffset */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3143 0, /* tp_iter */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3144 0, /* tp_iternext */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3145 0, /* tp_methods */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3146 test_members, /* tp_members */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3147 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3148 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3149 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3150 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3151 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3152 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3153 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3154 0,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3155 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
3156 };
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3157
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39442
diff changeset
3158
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
3159
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
3160 static struct PyModuleDef _testcapimodule = {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3161 PyModuleDef_HEAD_INIT,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3162 "_testcapi",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3163 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3164 -1,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3165 TestMethods,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3166 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3167 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3168 NULL,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3169 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
3170 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47062
diff changeset
3171
24363
979ff5d0ae07 Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents: 22726
diff changeset
3172 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
3173 PyInit__testcapi(void)
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3174 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3175 PyObject *m;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3176
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3177 m = PyModule_Create(&_testcapimodule);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3178 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3179 return NULL;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3180
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3181 Py_TYPE(&_HashInheritanceTester_Type)=&PyType_Type;
50399
5cc073d661f7 Merged revisions 68101 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 50374
diff changeset
3182
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3183 Py_TYPE(&test_structmembersType)=&PyType_Type;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3184 Py_INCREF(&test_structmembersType);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3185 /* 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
3186 test_capi to automatically call this */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3187 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
3188
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3189 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
3190 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
3191 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
3192 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
3193 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
3194 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
3195 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
3196 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
3197 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
3198 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
3199 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
3200 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
3201 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
3202 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
3203 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
3204 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
3205 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
3206 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
3207 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
3208 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
3209 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
3210 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
3211 Py_INCREF(&PyInstanceMethod_Type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3212 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
3213
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3214 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
3215 Py_INCREF(TestError);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3216 PyModule_AddObject(m, "error", TestError);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60396
diff changeset
3217 return m;
16447
ac52d3727867 Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3218 }