1 #include "parts.h"
2 #include "util.h"
3
4
5 static PyObject *
object_repr(PyObject * self,PyObject * arg)6 object_repr(PyObject *self, PyObject *arg)
7 {
8 NULLABLE(arg);
9 return PyObject_Repr(arg);
10 }
11
12 static PyObject *
object_ascii(PyObject * self,PyObject * arg)13 object_ascii(PyObject *self, PyObject *arg)
14 {
15 NULLABLE(arg);
16 return PyObject_ASCII(arg);
17 }
18
19 static PyObject *
object_str(PyObject * self,PyObject * arg)20 object_str(PyObject *self, PyObject *arg)
21 {
22 NULLABLE(arg);
23 return PyObject_Str(arg);
24 }
25
26 static PyObject *
object_bytes(PyObject * self,PyObject * arg)27 object_bytes(PyObject *self, PyObject *arg)
28 {
29 NULLABLE(arg);
30 return PyObject_Bytes(arg);
31 }
32
33 static PyObject *
object_getattr(PyObject * self,PyObject * args)34 object_getattr(PyObject *self, PyObject *args)
35 {
36 PyObject *obj, *attr_name;
37 if (!PyArg_ParseTuple(args, "OO", &obj, &attr_name)) {
38 return NULL;
39 }
40 NULLABLE(obj);
41 NULLABLE(attr_name);
42 return PyObject_GetAttr(obj, attr_name);
43 }
44
45 static PyObject *
object_getattrstring(PyObject * self,PyObject * args)46 object_getattrstring(PyObject *self, PyObject *args)
47 {
48 PyObject *obj;
49 const char *attr_name;
50 Py_ssize_t size;
51 if (!PyArg_ParseTuple(args, "Oz#", &obj, &attr_name, &size)) {
52 return NULL;
53 }
54 NULLABLE(obj);
55 return PyObject_GetAttrString(obj, attr_name);
56 }
57
58 static PyObject *
object_hasattr(PyObject * self,PyObject * args)59 object_hasattr(PyObject *self, PyObject *args)
60 {
61 PyObject *obj, *attr_name;
62 if (!PyArg_ParseTuple(args, "OO", &obj, &attr_name)) {
63 return NULL;
64 }
65 NULLABLE(obj);
66 NULLABLE(attr_name);
67 return PyLong_FromLong(PyObject_HasAttr(obj, attr_name));
68 }
69
70 static PyObject *
object_hasattrstring(PyObject * self,PyObject * args)71 object_hasattrstring(PyObject *self, PyObject *args)
72 {
73 PyObject *obj;
74 const char *attr_name;
75 Py_ssize_t size;
76 if (!PyArg_ParseTuple(args, "Oz#", &obj, &attr_name, &size)) {
77 return NULL;
78 }
79 NULLABLE(obj);
80 return PyLong_FromLong(PyObject_HasAttrString(obj, attr_name));
81 }
82
83 static PyObject *
object_setattr(PyObject * self,PyObject * args)84 object_setattr(PyObject *self, PyObject *args)
85 {
86 PyObject *obj, *attr_name, *value;
87 if (!PyArg_ParseTuple(args, "OOO", &obj, &attr_name, &value)) {
88 return NULL;
89 }
90 NULLABLE(obj);
91 NULLABLE(attr_name);
92 NULLABLE(value);
93 RETURN_INT(PyObject_SetAttr(obj, attr_name, value));
94 }
95
96 static PyObject *
object_setattrstring(PyObject * self,PyObject * args)97 object_setattrstring(PyObject *self, PyObject *args)
98 {
99 PyObject *obj, *value;
100 const char *attr_name;
101 Py_ssize_t size;
102 if (!PyArg_ParseTuple(args, "Oz#O", &obj, &attr_name, &size, &value)) {
103 return NULL;
104 }
105 NULLABLE(obj);
106 NULLABLE(value);
107 RETURN_INT(PyObject_SetAttrString(obj, attr_name, value));
108 }
109
110 static PyObject *
object_delattr(PyObject * self,PyObject * args)111 object_delattr(PyObject *self, PyObject *args)
112 {
113 PyObject *obj, *attr_name;
114 if (!PyArg_ParseTuple(args, "OO", &obj, &attr_name)) {
115 return NULL;
116 }
117 NULLABLE(obj);
118 NULLABLE(attr_name);
119 RETURN_INT(PyObject_DelAttr(obj, attr_name));
120 }
121
122 static PyObject *
object_delattrstring(PyObject * self,PyObject * args)123 object_delattrstring(PyObject *self, PyObject *args)
124 {
125 PyObject *obj;
126 const char *attr_name;
127 Py_ssize_t size;
128 if (!PyArg_ParseTuple(args, "Oz#", &obj, &attr_name, &size)) {
129 return NULL;
130 }
131 NULLABLE(obj);
132 RETURN_INT(PyObject_DelAttrString(obj, attr_name));
133 }
134
135 static PyObject *
number_check(PyObject * self,PyObject * obj)136 number_check(PyObject *self, PyObject *obj)
137 {
138 NULLABLE(obj);
139 return PyBool_FromLong(PyNumber_Check(obj));
140 }
141
142 static PyObject *
mapping_check(PyObject * self,PyObject * obj)143 mapping_check(PyObject *self, PyObject *obj)
144 {
145 NULLABLE(obj);
146 return PyLong_FromLong(PyMapping_Check(obj));
147 }
148
149 static PyObject *
mapping_size(PyObject * self,PyObject * obj)150 mapping_size(PyObject *self, PyObject *obj)
151 {
152 NULLABLE(obj);
153 RETURN_SIZE(PyMapping_Size(obj));
154 }
155
156 static PyObject *
mapping_length(PyObject * self,PyObject * obj)157 mapping_length(PyObject *self, PyObject *obj)
158 {
159 NULLABLE(obj);
160 RETURN_SIZE(PyMapping_Length(obj));
161 }
162
163 static PyObject *
object_getitem(PyObject * self,PyObject * args)164 object_getitem(PyObject *self, PyObject *args)
165 {
166 PyObject *mapping, *key;
167 if (!PyArg_ParseTuple(args, "OO", &mapping, &key)) {
168 return NULL;
169 }
170 NULLABLE(mapping);
171 NULLABLE(key);
172 return PyObject_GetItem(mapping, key);
173 }
174
175 static PyObject *
mapping_getitemstring(PyObject * self,PyObject * args)176 mapping_getitemstring(PyObject *self, PyObject *args)
177 {
178 PyObject *mapping;
179 const char *key;
180 Py_ssize_t size;
181 if (!PyArg_ParseTuple(args, "Oz#", &mapping, &key, &size)) {
182 return NULL;
183 }
184 NULLABLE(mapping);
185 return PyMapping_GetItemString(mapping, key);
186 }
187
188 static PyObject *
mapping_haskey(PyObject * self,PyObject * args)189 mapping_haskey(PyObject *self, PyObject *args)
190 {
191 PyObject *mapping, *key;
192 if (!PyArg_ParseTuple(args, "OO", &mapping, &key)) {
193 return NULL;
194 }
195 NULLABLE(mapping);
196 NULLABLE(key);
197 return PyLong_FromLong(PyMapping_HasKey(mapping, key));
198 }
199
200 static PyObject *
mapping_haskeystring(PyObject * self,PyObject * args)201 mapping_haskeystring(PyObject *self, PyObject *args)
202 {
203 PyObject *mapping;
204 const char *key;
205 Py_ssize_t size;
206 if (!PyArg_ParseTuple(args, "Oz#", &mapping, &key, &size)) {
207 return NULL;
208 }
209 NULLABLE(mapping);
210 return PyLong_FromLong(PyMapping_HasKeyString(mapping, key));
211 }
212
213 static PyObject *
mapping_haskeywitherror(PyObject * self,PyObject * args)214 mapping_haskeywitherror(PyObject *self, PyObject *args)
215 {
216 PyObject *mapping, *key;
217 if (!PyArg_ParseTuple(args, "OO", &mapping, &key)) {
218 return NULL;
219 }
220 NULLABLE(mapping);
221 NULLABLE(key);
222 RETURN_INT(PyMapping_HasKeyWithError(mapping, key));
223 }
224
225 static PyObject *
mapping_haskeystringwitherror(PyObject * self,PyObject * args)226 mapping_haskeystringwitherror(PyObject *self, PyObject *args)
227 {
228 PyObject *mapping;
229 const char *key;
230 Py_ssize_t size;
231 if (!PyArg_ParseTuple(args, "Oz#", &mapping, &key, &size)) {
232 return NULL;
233 }
234 NULLABLE(mapping);
235 RETURN_INT(PyMapping_HasKeyStringWithError(mapping, key));
236 }
237
238 static PyObject *
object_setitem(PyObject * self,PyObject * args)239 object_setitem(PyObject *self, PyObject *args)
240 {
241 PyObject *mapping, *key, *value;
242 if (!PyArg_ParseTuple(args, "OOO", &mapping, &key, &value)) {
243 return NULL;
244 }
245 NULLABLE(mapping);
246 NULLABLE(key);
247 NULLABLE(value);
248 RETURN_INT(PyObject_SetItem(mapping, key, value));
249 }
250
251 static PyObject *
mapping_setitemstring(PyObject * self,PyObject * args)252 mapping_setitemstring(PyObject *self, PyObject *args)
253 {
254 PyObject *mapping, *value;
255 const char *key;
256 Py_ssize_t size;
257 if (!PyArg_ParseTuple(args, "Oz#O", &mapping, &key, &size, &value)) {
258 return NULL;
259 }
260 NULLABLE(mapping);
261 NULLABLE(value);
262 RETURN_INT(PyMapping_SetItemString(mapping, key, value));
263 }
264
265 static PyObject *
object_delitem(PyObject * self,PyObject * args)266 object_delitem(PyObject *self, PyObject *args)
267 {
268 PyObject *mapping, *key;
269 if (!PyArg_ParseTuple(args, "OO", &mapping, &key)) {
270 return NULL;
271 }
272 NULLABLE(mapping);
273 NULLABLE(key);
274 RETURN_INT(PyObject_DelItem(mapping, key));
275 }
276
277 static PyObject *
mapping_delitem(PyObject * self,PyObject * args)278 mapping_delitem(PyObject *self, PyObject *args)
279 {
280 PyObject *mapping, *key;
281 if (!PyArg_ParseTuple(args, "OO", &mapping, &key)) {
282 return NULL;
283 }
284 NULLABLE(mapping);
285 NULLABLE(key);
286 RETURN_INT(PyMapping_DelItem(mapping, key));
287 }
288
289 static PyObject *
mapping_delitemstring(PyObject * self,PyObject * args)290 mapping_delitemstring(PyObject *self, PyObject *args)
291 {
292 PyObject *mapping;
293 const char *key;
294 Py_ssize_t size;
295 if (!PyArg_ParseTuple(args, "Oz#", &mapping, &key, &size)) {
296 return NULL;
297 }
298 NULLABLE(mapping);
299 RETURN_INT(PyMapping_DelItemString(mapping, key));
300 }
301
302 static PyObject *
mapping_keys(PyObject * self,PyObject * obj)303 mapping_keys(PyObject *self, PyObject *obj)
304 {
305 NULLABLE(obj);
306 return PyMapping_Keys(obj);
307 }
308
309 static PyObject *
mapping_values(PyObject * self,PyObject * obj)310 mapping_values(PyObject *self, PyObject *obj)
311 {
312 NULLABLE(obj);
313 return PyMapping_Values(obj);
314 }
315
316 static PyObject *
mapping_items(PyObject * self,PyObject * obj)317 mapping_items(PyObject *self, PyObject *obj)
318 {
319 NULLABLE(obj);
320 return PyMapping_Items(obj);
321 }
322
323
324 static PyObject *
sequence_check(PyObject * self,PyObject * obj)325 sequence_check(PyObject* self, PyObject *obj)
326 {
327 NULLABLE(obj);
328 return PyLong_FromLong(PySequence_Check(obj));
329 }
330
331 static PyObject *
sequence_size(PyObject * self,PyObject * obj)332 sequence_size(PyObject* self, PyObject *obj)
333 {
334 NULLABLE(obj);
335 RETURN_SIZE(PySequence_Size(obj));
336 }
337
338 static PyObject *
sequence_length(PyObject * self,PyObject * obj)339 sequence_length(PyObject* self, PyObject *obj)
340 {
341 NULLABLE(obj);
342 RETURN_SIZE(PySequence_Length(obj));
343 }
344
345 static PyObject *
sequence_concat(PyObject * self,PyObject * args)346 sequence_concat(PyObject *self, PyObject *args)
347 {
348 PyObject *seq1, *seq2;
349 if (!PyArg_ParseTuple(args, "OO", &seq1, &seq2)) {
350 return NULL;
351 }
352 NULLABLE(seq1);
353 NULLABLE(seq2);
354
355 return PySequence_Concat(seq1, seq2);
356 }
357
358 static PyObject *
sequence_repeat(PyObject * self,PyObject * args)359 sequence_repeat(PyObject *self, PyObject *args)
360 {
361 PyObject *seq;
362 Py_ssize_t count;
363 if (!PyArg_ParseTuple(args, "On", &seq, &count)) {
364 return NULL;
365 }
366 NULLABLE(seq);
367
368 return PySequence_Repeat(seq, count);
369 }
370
371 static PyObject *
sequence_inplaceconcat(PyObject * self,PyObject * args)372 sequence_inplaceconcat(PyObject *self, PyObject *args)
373 {
374 PyObject *seq1, *seq2;
375 if (!PyArg_ParseTuple(args, "OO", &seq1, &seq2)) {
376 return NULL;
377 }
378 NULLABLE(seq1);
379 NULLABLE(seq2);
380
381 return PySequence_InPlaceConcat(seq1, seq2);
382 }
383
384 static PyObject *
sequence_inplacerepeat(PyObject * self,PyObject * args)385 sequence_inplacerepeat(PyObject *self, PyObject *args)
386 {
387 PyObject *seq;
388 Py_ssize_t count;
389 if (!PyArg_ParseTuple(args, "On", &seq, &count)) {
390 return NULL;
391 }
392 NULLABLE(seq);
393
394 return PySequence_InPlaceRepeat(seq, count);
395 }
396
397 static PyObject *
sequence_getitem(PyObject * self,PyObject * args)398 sequence_getitem(PyObject *self, PyObject *args)
399 {
400 PyObject *seq;
401 Py_ssize_t i;
402 if (!PyArg_ParseTuple(args, "On", &seq, &i)) {
403 return NULL;
404 }
405 NULLABLE(seq);
406
407 return PySequence_GetItem(seq, i);
408 }
409
410 static PyObject *
sequence_setitem(PyObject * self,PyObject * args)411 sequence_setitem(PyObject *self, PyObject *args)
412 {
413 Py_ssize_t i;
414 PyObject *seq, *val;
415 if (!PyArg_ParseTuple(args, "OnO", &seq, &i, &val)) {
416 return NULL;
417 }
418 NULLABLE(seq);
419 NULLABLE(val);
420
421 RETURN_INT(PySequence_SetItem(seq, i, val));
422 }
423
424
425 static PyObject *
sequence_delitem(PyObject * self,PyObject * args)426 sequence_delitem(PyObject *self, PyObject *args)
427 {
428 Py_ssize_t i;
429 PyObject *seq;
430 if (!PyArg_ParseTuple(args, "On", &seq, &i)) {
431 return NULL;
432 }
433 NULLABLE(seq);
434
435 RETURN_INT(PySequence_DelItem(seq, i));
436 }
437
438 static PyObject *
sequence_setslice(PyObject * self,PyObject * args)439 sequence_setslice(PyObject* self, PyObject *args)
440 {
441 PyObject *sequence, *obj;
442 Py_ssize_t i1, i2;
443 if (!PyArg_ParseTuple(args, "OnnO", &sequence, &i1, &i2, &obj)) {
444 return NULL;
445 }
446 NULLABLE(sequence);
447 NULLABLE(obj);
448
449 RETURN_INT(PySequence_SetSlice(sequence, i1, i2, obj));
450 }
451
452 static PyObject *
sequence_delslice(PyObject * self,PyObject * args)453 sequence_delslice(PyObject *self, PyObject *args)
454 {
455 PyObject *sequence;
456 Py_ssize_t i1, i2;
457 if (!PyArg_ParseTuple(args, "Onn", &sequence, &i1, &i2)) {
458 return NULL;
459 }
460 NULLABLE(sequence);
461
462 RETURN_INT(PySequence_DelSlice(sequence, i1, i2));
463 }
464
465 static PyObject *
sequence_count(PyObject * self,PyObject * args)466 sequence_count(PyObject *self, PyObject *args)
467 {
468 PyObject *seq, *value;
469 if (!PyArg_ParseTuple(args, "OO", &seq, &value)) {
470 return NULL;
471 }
472 NULLABLE(seq);
473 NULLABLE(value);
474
475 RETURN_SIZE(PySequence_Count(seq, value));
476 }
477
478 static PyObject *
sequence_contains(PyObject * self,PyObject * args)479 sequence_contains(PyObject *self, PyObject *args)
480 {
481 PyObject *seq, *value;
482 if (!PyArg_ParseTuple(args, "OO", &seq, &value)) {
483 return NULL;
484 }
485 NULLABLE(seq);
486 NULLABLE(value);
487
488 RETURN_INT(PySequence_Contains(seq, value));
489 }
490
491 static PyObject *
sequence_index(PyObject * self,PyObject * args)492 sequence_index(PyObject *self, PyObject *args)
493 {
494 PyObject *seq, *value;
495 if (!PyArg_ParseTuple(args, "OO", &seq, &value)) {
496 return NULL;
497 }
498 NULLABLE(seq);
499 NULLABLE(value);
500
501 RETURN_SIZE(PySequence_Index(seq, value));
502 }
503
504 static PyObject *
sequence_list(PyObject * self,PyObject * obj)505 sequence_list(PyObject *self, PyObject *obj)
506 {
507 NULLABLE(obj);
508 return PySequence_List(obj);
509 }
510
511 static PyObject *
sequence_tuple(PyObject * self,PyObject * obj)512 sequence_tuple(PyObject *self, PyObject *obj)
513 {
514 NULLABLE(obj);
515 return PySequence_Tuple(obj);
516 }
517
518
519 static PyMethodDef test_methods[] = {
520 {"object_repr", object_repr, METH_O},
521 {"object_ascii", object_ascii, METH_O},
522 {"object_str", object_str, METH_O},
523 {"object_bytes", object_bytes, METH_O},
524
525 {"object_getattr", object_getattr, METH_VARARGS},
526 {"object_getattrstring", object_getattrstring, METH_VARARGS},
527 {"object_hasattr", object_hasattr, METH_VARARGS},
528 {"object_hasattrstring", object_hasattrstring, METH_VARARGS},
529 {"object_setattr", object_setattr, METH_VARARGS},
530 {"object_setattrstring", object_setattrstring, METH_VARARGS},
531 {"object_delattr", object_delattr, METH_VARARGS},
532 {"object_delattrstring", object_delattrstring, METH_VARARGS},
533
534 {"number_check", number_check, METH_O},
535 {"mapping_check", mapping_check, METH_O},
536 {"mapping_size", mapping_size, METH_O},
537 {"mapping_length", mapping_length, METH_O},
538 {"object_getitem", object_getitem, METH_VARARGS},
539 {"mapping_getitemstring", mapping_getitemstring, METH_VARARGS},
540 {"mapping_haskey", mapping_haskey, METH_VARARGS},
541 {"mapping_haskeystring", mapping_haskeystring, METH_VARARGS},
542 {"mapping_haskeywitherror", mapping_haskeywitherror, METH_VARARGS},
543 {"mapping_haskeystringwitherror", mapping_haskeystringwitherror, METH_VARARGS},
544 {"object_setitem", object_setitem, METH_VARARGS},
545 {"mapping_setitemstring", mapping_setitemstring, METH_VARARGS},
546 {"object_delitem", object_delitem, METH_VARARGS},
547 {"mapping_delitem", mapping_delitem, METH_VARARGS},
548 {"mapping_delitemstring", mapping_delitemstring, METH_VARARGS},
549 {"mapping_keys", mapping_keys, METH_O},
550 {"mapping_values", mapping_values, METH_O},
551 {"mapping_items", mapping_items, METH_O},
552
553 {"sequence_check", sequence_check, METH_O},
554 {"sequence_size", sequence_size, METH_O},
555 {"sequence_length", sequence_length, METH_O},
556 {"sequence_concat", sequence_concat, METH_VARARGS},
557 {"sequence_repeat", sequence_repeat, METH_VARARGS},
558 {"sequence_inplaceconcat", sequence_inplaceconcat, METH_VARARGS},
559 {"sequence_inplacerepeat", sequence_inplacerepeat, METH_VARARGS},
560 {"sequence_getitem", sequence_getitem, METH_VARARGS},
561 {"sequence_setitem", sequence_setitem, METH_VARARGS},
562 {"sequence_delitem", sequence_delitem, METH_VARARGS},
563 {"sequence_setslice", sequence_setslice, METH_VARARGS},
564 {"sequence_delslice", sequence_delslice, METH_VARARGS},
565 {"sequence_count", sequence_count, METH_VARARGS},
566 {"sequence_contains", sequence_contains, METH_VARARGS},
567 {"sequence_index", sequence_index, METH_VARARGS},
568 {"sequence_list", sequence_list, METH_O},
569 {"sequence_tuple", sequence_tuple, METH_O},
570
571 {NULL},
572 };
573
574 int
_PyTestLimitedCAPI_Init_Abstract(PyObject * m)575 _PyTestLimitedCAPI_Init_Abstract(PyObject *m)
576 {
577 if (PyModule_AddFunctions(m, test_methods) < 0) {
578 return -1;
579 }
580
581 return 0;
582 }
583