Skip to content

Commit 46fe8cb

Browse files
committed
Remove PyType_Check()
1 parent b258994 commit 46fe8cb

2 files changed

Lines changed: 8 additions & 65 deletions

File tree

Modules/_testcapi/type.c

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// Thin wrappers to PyType functions.
2+
// Do no check PyType_Check() so Python tests can pass arbitrary objects,
3+
// even if it's likely to crash.
4+
15
#include "parts.h"
26
#include "util.h"
37

@@ -95,28 +99,11 @@ test_get_statictype_slots(PyObject *self, PyObject *Py_UNUSED(ignored))
9599
}
96100

97101

98-
static int
99-
check_type_arg(PyObject *arg)
100-
{
101-
if (arg == NULL) {
102-
return 0;
103-
}
104-
if (!PyType_Check(arg)) {
105-
PyErr_SetString(PyExc_TypeError, "argument must be a type");
106-
return -1;
107-
}
108-
return 0;
109-
}
110-
111-
112102
// Get type->tp_version_tag
113103
static PyObject *
114104
type_get_version(PyObject *self, PyObject *arg)
115105
{
116106
NULLABLE(arg);
117-
if (check_type_arg(arg) < 0) {
118-
return NULL;
119-
}
120107
PyTypeObject *type = (PyTypeObject*)arg;
121108

122109
PyObject *res = PyLong_FromUnsignedLong(type->tp_version_tag);
@@ -133,9 +120,6 @@ static PyObject *
133120
type_assign_version(PyObject *self, PyObject *arg)
134121
{
135122
NULLABLE(arg);
136-
if (check_type_arg(arg) < 0) {
137-
return NULL;
138-
}
139123
PyTypeObject *type = (PyTypeObject*)arg;
140124

141125
int res = PyUnstable_Type_AssignVersionTag(type);
@@ -148,9 +132,6 @@ static PyObject *
148132
type_get_tp_bases(PyObject *self, PyObject *arg)
149133
{
150134
NULLABLE(arg);
151-
if (check_type_arg(arg) < 0) {
152-
return NULL;
153-
}
154135
PyTypeObject *type = (PyTypeObject*)arg;
155136

156137
PyObject *bases = type->tp_bases;
@@ -166,9 +147,6 @@ static PyObject *
166147
type_get_tp_mro(PyObject *self, PyObject *arg)
167148
{
168149
NULLABLE(arg);
169-
if (check_type_arg(arg) < 0) {
170-
return NULL;
171-
}
172150
PyTypeObject *type = (PyTypeObject*)arg;
173151

174152
PyObject *mro = type->tp_mro;

Modules/_testlimitedcapi/type.c

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// Thin wrappers to PyType functions.
2+
// Do no check PyType_Check() so Python tests can pass arbitrary objects,
3+
// even if it's likely to crash.
4+
15
// Need limited C API version 3.14 for PyType_Freeze()
26
#include "pyconfig.h" // Py_GIL_DISABLED
37
#if !defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API)
@@ -28,28 +32,11 @@ get_heaptype_for_name(PyObject *self, PyObject *Py_UNUSED(ignored))
2832
}
2933

3034

31-
static int
32-
check_type_arg(PyObject *arg)
33-
{
34-
if (arg == NULL) {
35-
return 0;
36-
}
37-
if (!PyType_Check(arg)) {
38-
PyErr_SetString(PyExc_TypeError, "argument must be a type");
39-
return -1;
40-
}
41-
return 0;
42-
}
43-
44-
4535
// Test PyType_GetName()
4636
static PyObject*
4737
get_type_name(PyObject *self, PyObject *arg)
4838
{
4939
NULLABLE(arg);
50-
if (check_type_arg(arg) < 0) {
51-
return NULL;
52-
}
5340
PyTypeObject *type = (PyTypeObject*)arg;
5441

5542
return PyType_GetName(type);
@@ -61,9 +48,6 @@ static PyObject*
6148
get_type_qualname(PyObject *self, PyObject *arg)
6249
{
6350
NULLABLE(arg);
64-
if (check_type_arg(arg) < 0) {
65-
return NULL;
66-
}
6751
PyTypeObject *type = (PyTypeObject*)arg;
6852

6953
return PyType_GetQualName(type);
@@ -75,9 +59,6 @@ static PyObject*
7559
get_type_fullyqualname(PyObject *self, PyObject *arg)
7660
{
7761
NULLABLE(arg);
78-
if (check_type_arg(arg) < 0) {
79-
return NULL;
80-
}
8162
PyTypeObject *type = (PyTypeObject*)arg;
8263

8364
return PyType_GetFullyQualifiedName(type);
@@ -89,9 +70,6 @@ static PyObject*
8970
get_type_module_name(PyObject *self, PyObject *arg)
9071
{
9172
NULLABLE(arg);
92-
if (check_type_arg(arg) < 0) {
93-
return NULL;
94-
}
9573
PyTypeObject *type = (PyTypeObject*)arg;
9674

9775
return PyType_GetModuleName(type);
@@ -103,9 +81,6 @@ static PyObject*
10381
type_modified(PyObject *self, PyObject *arg)
10482
{
10583
NULLABLE(arg);
106-
if (check_type_arg(arg) < 0) {
107-
return NULL;
108-
}
10984
PyTypeObject *type = (PyTypeObject*)arg;
11085

11186
PyType_Modified(type);
@@ -118,11 +93,7 @@ static PyObject*
11893
type_ready(PyObject *self, PyObject *arg)
11994
{
12095
assert(!PyErr_Occurred());
121-
12296
NULLABLE(arg);
123-
if (check_type_arg(arg) < 0) {
124-
return NULL;
125-
}
12697
PyTypeObject *type = (PyTypeObject*)arg;
12798

12899
if (PyType_Ready(type) < 0) {
@@ -139,9 +110,6 @@ static PyObject *
139110
type_freeze(PyObject *module, PyObject *arg)
140111
{
141112
NULLABLE(arg);
142-
if (check_type_arg(arg) < 0) {
143-
return NULL;
144-
}
145113
PyTypeObject *type = (PyTypeObject*)arg;
146114

147115
if (PyType_Freeze(type) < 0) {
@@ -168,9 +136,6 @@ static PyObject *
168136
type_getflags(PyObject *module, PyObject *arg)
169137
{
170138
NULLABLE(arg);
171-
if (check_type_arg(arg) < 0) {
172-
return NULL;
173-
}
174139
PyTypeObject *type = (PyTypeObject*)arg;
175140

176141
unsigned long flags = PyType_GetFlags(type);

0 commit comments

Comments
 (0)