Mercurial > cpython-lru_cache-weakref
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 |
| 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 | 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 | 395 raise_test_longlong_error(const char* msg) |
| 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 | 398 } |
| 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 | 408 |
| 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 | 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('€') */ |
|
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 | 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 } |
