Coverage Report

Created: 2022-07-08 09:39

/home/mdboom/Work/builds/cpython/Include/abstract.h
Line
Count
Source (jump to first uncovered line)
1
/* Abstract Object Interface (many thanks to Jim Fulton) */
2
3
#ifndef Py_ABSTRACTOBJECT_H
4
#define Py_ABSTRACTOBJECT_H
5
#ifdef __cplusplus
6
extern "C" {
7
#endif
8
9
/* === Object Protocol ================================================== */
10
11
/* Implemented elsewhere:
12
13
   int PyObject_Print(PyObject *o, FILE *fp, int flags);
14
15
   Print an object 'o' on file 'fp'.  Returns -1 on error. The flags argument
16
   is used to enable certain printing options. The only option currently
17
   supported is Py_PRINT_RAW. By default (flags=0), PyObject_Print() formats
18
   the object by calling PyObject_Repr(). If flags equals to Py_PRINT_RAW, it
19
   formats the object by calling PyObject_Str(). */
20
21
22
/* Implemented elsewhere:
23
24
   int PyObject_HasAttrString(PyObject *o, const char *attr_name);
25
26
   Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise.
27
28
   This is equivalent to the Python expression: hasattr(o,attr_name).
29
30
   This function always succeeds. */
31
32
33
/* Implemented elsewhere:
34
35
   PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);
36
37
   Retrieve an attributed named attr_name form object o.
38
   Returns the attribute value on success, or NULL on failure.
39
40
   This is the equivalent of the Python expression: o.attr_name. */
41
42
43
/* Implemented elsewhere:
44
45
   int PyObject_HasAttr(PyObject *o, PyObject *attr_name);
46
47
   Returns 1 if o has the attribute attr_name, and 0 otherwise.
48
49
   This is equivalent to the Python expression: hasattr(o,attr_name).
50
51
   This function always succeeds. */
52
53
/* Implemented elsewhere:
54
55
   PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);
56
57
   Retrieve an attributed named 'attr_name' form object 'o'.
58
   Returns the attribute value on success, or NULL on failure.
59
60
   This is the equivalent of the Python expression: o.attr_name. */
61
62
63
/* Implemented elsewhere:
64
65
   int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);
66
67
   Set the value of the attribute named attr_name, for object 'o',
68
   to the value 'v'. Raise an exception and return -1 on failure; return 0 on
69
   success.
70
71
   This is the equivalent of the Python statement o.attr_name=v. */
72
73
74
/* Implemented elsewhere:
75
76
   int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v);
77
78
   Set the value of the attribute named attr_name, for object 'o', to the value
79
   'v'. an exception and return -1 on failure; return 0 on success.
80
81
   This is the equivalent of the Python statement o.attr_name=v. */
82
83
/* Implemented as a macro:
84
85
   int PyObject_DelAttrString(PyObject *o, const char *attr_name);
86
87
   Delete attribute named attr_name, for object o. Returns
88
   -1 on failure.
89
90
   This is the equivalent of the Python statement: del o.attr_name. */
91
#define PyObject_DelAttrString(O, A) PyObject_SetAttrString((O), (A), NULL)
92
93
94
/* Implemented as a macro:
95
96
   int PyObject_DelAttr(PyObject *o, PyObject *attr_name);
97
98
   Delete attribute named attr_name, for object o. Returns -1
99
   on failure.  This is the equivalent of the Python
100
   statement: del o.attr_name. */
101
#define  PyObject_DelAttr(O, A) PyObject_SetAttr((O), (A), NULL)
102
103
104
/* Implemented elsewhere:
105
106
   PyObject *PyObject_Repr(PyObject *o);
107
108
   Compute the string representation of object 'o'.  Returns the
109
   string representation on success, NULL on failure.
110
111
   This is the equivalent of the Python expression: repr(o).
112
113
   Called by the repr() built-in function. */
114
115
116
/* Implemented elsewhere:
117
118
   PyObject *PyObject_Str(PyObject *o);
119
120
   Compute the string representation of object, o.  Returns the
121
   string representation on success, NULL on failure.
122
123
   This is the equivalent of the Python expression: str(o).
124
125
   Called by the str() and print() built-in functions. */
126
127
128
/* Declared elsewhere
129
130
   PyAPI_FUNC(int) PyCallable_Check(PyObject *o);
131
132
   Determine if the object, o, is callable.  Return 1 if the object is callable
133
   and 0 otherwise.
134
135
   This function always succeeds. */
136
137
138
#ifdef PY_SSIZE_T_CLEAN
139
#  define PyObject_CallFunction _PyObject_CallFunction_SizeT
140
#  define PyObject_CallMethod _PyObject_CallMethod_SizeT
141
#endif
142
143
144
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
145
/* Call a callable Python object without any arguments */
146
PyAPI_FUNC(PyObject *) PyObject_CallNoArgs(PyObject *func);
147
#endif
148
149
150
/* Call a callable Python object 'callable' with arguments given by the
151
   tuple 'args' and keywords arguments given by the dictionary 'kwargs'.
152
153
   'args' must not be NULL, use an empty tuple if no arguments are
154
   needed. If no named arguments are needed, 'kwargs' can be NULL.
155
156
   This is the equivalent of the Python expression:
157
   callable(*args, **kwargs). */
158
PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable,
159
                                     PyObject *args, PyObject *kwargs);
160
161
162
/* Call a callable Python object 'callable', with arguments given by the
163
   tuple 'args'.  If no arguments are needed, then 'args' can be NULL.
164
165
   Returns the result of the call on success, or NULL on failure.
166
167
   This is the equivalent of the Python expression:
168
   callable(*args). */
169
PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable,
170
                                           PyObject *args);
171
172
/* Call a callable Python object, callable, with a variable number of C
173
   arguments. The C arguments are described using a mkvalue-style format
174
   string.
175
176
   The format may be NULL, indicating that no arguments are provided.
177
178
   Returns the result of the call on success, or NULL on failure.
179
180
   This is the equivalent of the Python expression:
181
   callable(arg1, arg2, ...). */
182
PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable,
183
                                             const char *format, ...);
184
185
/* Call the method named 'name' of object 'obj' with a variable number of
186
   C arguments.  The C arguments are described by a mkvalue format string.
187
188
   The format can be NULL, indicating that no arguments are provided.
189
190
   Returns the result of the call on success, or NULL on failure.
191
192
   This is the equivalent of the Python expression:
193
   obj.name(arg1, arg2, ...). */
194
PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj,
195
                                           const char *name,
196
                                           const char *format, ...);
197
198
PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
199
                                                    const char *format,
200
                                                    ...);
201
202
PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj,
203
                                                  const char *name,
204
                                                  const char *format,
205
                                                  ...);
206
207
/* Call a callable Python object 'callable' with a variable number of C
208
   arguments. The C arguments are provided as PyObject* values, terminated
209
   by a NULL.
210
211
   Returns the result of the call on success, or NULL on failure.
212
213
   This is the equivalent of the Python expression:
214
   callable(arg1, arg2, ...). */
215
PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
216
                                                    ...);
217
218
/* Call the method named 'name' of object 'obj' with a variable number of
219
   C arguments.  The C arguments are provided as PyObject* values, terminated
220
   by NULL.
221
222
   Returns the result of the call on success, or NULL on failure.
223
224
   This is the equivalent of the Python expression: obj.name(*args). */
225
226
PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(
227
    PyObject *obj,
228
    PyObject *name,
229
    ...);
230
231
232
/* Implemented elsewhere:
233
234
   Py_hash_t PyObject_Hash(PyObject *o);
235
236
   Compute and return the hash, hash_value, of an object, o.  On
237
   failure, return -1.
238
239
   This is the equivalent of the Python expression: hash(o). */
240
241
242
/* Implemented elsewhere:
243
244
   int PyObject_IsTrue(PyObject *o);
245
246
   Returns 1 if the object, o, is considered to be true, 0 if o is
247
   considered to be false and -1 on failure.
248
249
   This is equivalent to the Python expression: not not o. */
250
251
252
/* Implemented elsewhere:
253
254
   int PyObject_Not(PyObject *o);
255
256
   Returns 0 if the object, o, is considered to be true, 1 if o is
257
   considered to be false and -1 on failure.
258
259
   This is equivalent to the Python expression: not o. */
260
261
262
/* Get the type of an object.
263
264
   On success, returns a type object corresponding to the object type of object
265
   'o'. On failure, returns NULL.
266
267
   This is equivalent to the Python expression: type(o) */
268
PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
269
270
271
/* Return the size of object 'o'.  If the object 'o' provides both sequence and
272
   mapping protocols, the sequence size is returned.
273
274
   On error, -1 is returned.
275
276
   This is the equivalent to the Python expression: len(o) */
277
PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
278
279
280
/* For DLL compatibility */
281
#undef PyObject_Length
282
PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
283
#define PyObject_Length PyObject_Size
284
285
/* Return element of 'o' corresponding to the object 'key'. Return NULL
286
  on failure.
287
288
  This is the equivalent of the Python expression: o[key] */
289
PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
290
291
292
/* Map the object 'key' to the value 'v' into 'o'.
293
294
   Raise an exception and return -1 on failure; return 0 on success.
295
296
   This is the equivalent of the Python statement: o[key]=v. */
297
PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
298
299
/* Remove the mapping for the string 'key' from the object 'o'.
300
   Returns -1 on failure.
301
302
   This is equivalent to the Python statement: del o[key]. */
303
PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);
304
305
/* Delete the mapping for the object 'key' from the object 'o'.
306
   Returns -1 on failure.
307
308
   This is the equivalent of the Python statement: del o[key]. */
309
PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
310
311
312
/* === Old Buffer API ============================================ */
313
314
/* FIXME:  usage of these should all be replaced in Python itself
315
   but for backwards compatibility we will implement them.
316
   Their usage without a corresponding "unlock" mechanism
317
   may create issues (but they would already be there). */
318
319
/* Takes an arbitrary object which must support the (character, single segment)
320
   buffer interface and returns a pointer to a read-only memory location
321
   usable as character based input for subsequent processing.
322
323
   Return 0 on success.  buffer and buffer_len are only set in case no error
324
   occurs. Otherwise, -1 is returned and an exception set. */
325
Py_DEPRECATED(3.0)
326
PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
327
                                      const char **buffer,
328
                                      Py_ssize_t *buffer_len);
329
330
/* Checks whether an arbitrary object supports the (character, single segment)
331
   buffer interface.
332
333
   Returns 1 on success, 0 on failure. */
334
Py_DEPRECATED(3.0) PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);
335
336
/* Same as PyObject_AsCharBuffer() except that this API expects (readable,
337
   single segment) buffer interface and returns a pointer to a read-only memory
338
   location which can contain arbitrary data.
339
340
   0 is returned on success.  buffer and buffer_len are only set in case no
341
   error occurs.  Otherwise, -1 is returned and an exception set. */
342
Py_DEPRECATED(3.0)
343
PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
344
                                      const void **buffer,
345
                                      Py_ssize_t *buffer_len);
346
347
/* Takes an arbitrary object which must support the (writable, single segment)
348
   buffer interface and returns a pointer to a writable memory location in
349
   buffer of size 'buffer_len'.
350
351
   Return 0 on success.  buffer and buffer_len are only set in case no error
352
   occurs. Otherwise, -1 is returned and an exception set. */
353
Py_DEPRECATED(3.0)
354
PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
355
                                       void **buffer,
356
                                       Py_ssize_t *buffer_len);
357
358
359
/* === New Buffer API ============================================ */
360
361
/* Takes an arbitrary object and returns the result of calling
362
   obj.__format__(format_spec). */
363
PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj,
364
                                       PyObject *format_spec);
365
366
367
/* ==== Iterators ================================================ */
368
369
/* Takes an object and returns an iterator for it.
370
   This is typically a new iterator but if the argument is an iterator, this
371
   returns itself. */
372
PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
373
374
/* Takes an AsyncIterable object and returns an AsyncIterator for it.
375
   This is typically a new iterator but if the argument is an AsyncIterator,
376
   this returns itself. */
377
PyAPI_FUNC(PyObject *) PyObject_GetAIter(PyObject *);
378
379
/* Returns non-zero if the object 'obj' provides iterator protocols, and 0 otherwise.
380
381
   This function always succeeds. */
382
PyAPI_FUNC(int) PyIter_Check(PyObject *);
383
384
/* Returns non-zero if the object 'obj' provides AsyncIterator protocols, and 0 otherwise.
385
386
   This function always succeeds. */
387
PyAPI_FUNC(int) PyAIter_Check(PyObject *);
388
389
/* Takes an iterator object and calls its tp_iternext slot,
390
   returning the next value.
391
392
   If the iterator is exhausted, this returns NULL without setting an
393
   exception.
394
395
   NULL with an exception means an error occurred. */
396
PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
397
398
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000
399
400
/* Takes generator, coroutine or iterator object and sends the value into it.
401
   Returns:
402
   - PYGEN_RETURN (0) if generator has returned.
403
     'result' parameter is filled with return value
404
   - PYGEN_ERROR (-1) if exception was raised.
405
     'result' parameter is NULL
406
   - PYGEN_NEXT (1) if generator has yielded.
407
     'result' parameter is filled with yielded value. */
408
PyAPI_FUNC(PySendResult) PyIter_Send(PyObject *, PyObject *, PyObject **);
409
#endif
410
411
412
/* === Number Protocol ================================================== */
413
414
/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.
415
416
   This function always succeeds. */
417
PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
418
419
/* Returns the result of adding o1 and o2, or NULL on failure.
420
421
   This is the equivalent of the Python expression: o1 + o2. */
422
PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
423
424
/* Returns the result of subtracting o2 from o1, or NULL on failure.
425
426
   This is the equivalent of the Python expression: o1 - o2. */
427
PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
428
429
/* Returns the result of multiplying o1 and o2, or NULL on failure.
430
431
   This is the equivalent of the Python expression: o1 * o2. */
432
PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
433
434
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
435
/* This is the equivalent of the Python expression: o1 @ o2. */
436
PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
437
#endif
438
439
/* Returns the result of dividing o1 by o2 giving an integral result,
440
   or NULL on failure.
441
442
   This is the equivalent of the Python expression: o1 // o2. */
443
PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
444
445
/* Returns the result of dividing o1 by o2 giving a float result, or NULL on
446
   failure.
447
448
   This is the equivalent of the Python expression: o1 / o2. */
449
PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
450
451
/* Returns the remainder of dividing o1 by o2, or NULL on failure.
452
453
   This is the equivalent of the Python expression: o1 % o2. */
454
PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
455
456
/* See the built-in function divmod.
457
458
   Returns NULL on failure.
459
460
   This is the equivalent of the Python expression: divmod(o1, o2). */
461
PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
462
463
/* See the built-in function pow. Returns NULL on failure.
464
465
   This is the equivalent of the Python expression: pow(o1, o2, o3),
466
   where o3 is optional. */
467
PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
468
                                      PyObject *o3);
469
470
/* Returns the negation of o on success, or NULL on failure.
471
472
 This is the equivalent of the Python expression: -o. */
473
PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
474
475
/* Returns the positive of o on success, or NULL on failure.
476
477
   This is the equivalent of the Python expression: +o. */
478
PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
479
480
/* Returns the absolute value of 'o', or NULL on failure.
481
482
   This is the equivalent of the Python expression: abs(o). */
483
PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
484
485
/* Returns the bitwise negation of 'o' on success, or NULL on failure.
486
487
   This is the equivalent of the Python expression: ~o. */
488
PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
489
490
/* Returns the result of left shifting o1 by o2 on success, or NULL on failure.
491
492
   This is the equivalent of the Python expression: o1 << o2. */
493
PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
494
495
/* Returns the result of right shifting o1 by o2 on success, or NULL on
496
   failure.
497
498
   This is the equivalent of the Python expression: o1 >> o2. */
499
PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
500
501
/* Returns the result of bitwise and of o1 and o2 on success, or NULL on
502
   failure.
503
504
   This is the equivalent of the Python expression: o1 & o2. */
505
PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
506
507
/* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure.
508
509
   This is the equivalent of the Python expression: o1 ^ o2. */
510
PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
511
512
/* Returns the result of bitwise or on o1 and o2 on success, or NULL on
513
   failure.
514
515
   This is the equivalent of the Python expression: o1 | o2. */
516
PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
517
518
/* Returns 1 if obj is an index integer (has the nb_index slot of the
519
   tp_as_number structure filled in), and 0 otherwise. */
520
PyAPI_FUNC(int) PyIndex_Check(PyObject *);
521
522
/* Returns the object 'o' converted to a Python int, or NULL with an exception
523
   raised on failure. */
524
PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
525
526
/* Returns the object 'o' converted to Py_ssize_t by going through
527
   PyNumber_Index() first.
528
529
   If an overflow error occurs while converting the int to Py_ssize_t, then the
530
   second argument 'exc' is the error-type to return.  If it is NULL, then the
531
   overflow error is cleared and the value is clipped. */
532
PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
533
534
/* Returns the object 'o' converted to an integer object on success, or NULL
535
   on failure.
536
537
   This is the equivalent of the Python expression: int(o). */
538
PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
539
540
/* Returns the object 'o' converted to a float object on success, or NULL
541
  on failure.
542
543
  This is the equivalent of the Python expression: float(o). */
544
PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
545
546
547
/* --- In-place variants of (some of) the above number protocol functions -- */
548
549
/* Returns the result of adding o2 to o1, possibly in-place, or NULL
550
   on failure.
551
552
   This is the equivalent of the Python expression: o1 += o2. */
553
PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
554
555
/* Returns the result of subtracting o2 from o1, possibly in-place or
556
   NULL on failure.
557
558
   This is the equivalent of the Python expression: o1 -= o2. */
559
PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
560
561
/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
562
   failure.
563
564
   This is the equivalent of the Python expression: o1 *= o2. */
565
PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
566
567
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
568
/* This is the equivalent of the Python expression: o1 @= o2. */
569
PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
570
#endif
571
572
/* Returns the result of dividing o1 by o2 giving an integral result, possibly
573
   in-place, or NULL on failure.
574
575
   This is the equivalent of the Python expression: o1 /= o2. */
576
PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
577
                                                   PyObject *o2);
578
579
/* Returns the result of dividing o1 by o2 giving a float result, possibly
580
   in-place, or null on failure.
581
582
   This is the equivalent of the Python expression: o1 /= o2. */
583
PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
584
                                                  PyObject *o2);
585
586
/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
587
   failure.
588
589
   This is the equivalent of the Python expression: o1 %= o2. */
590
PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
591
592
/* Returns the result of raising o1 to the power of o2, possibly in-place,
593
   or NULL on failure.
594
595
   This is the equivalent of the Python expression: o1 **= o2,
596
   or o1 = pow(o1, o2, o3) if o3 is present. */
597
PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
598
                                             PyObject *o3);
599
600
/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
601
   on failure.
602
603
   This is the equivalent of the Python expression: o1 <<= o2. */
604
PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
605
606
/* Returns the result of right shifting o1 by o2, possibly in-place or NULL
607
   on failure.
608
609
   This is the equivalent of the Python expression: o1 >>= o2. */
610
PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
611
612
/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
613
   on failure.
614
615
   This is the equivalent of the Python expression: o1 &= o2. */
616
PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
617
618
/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
619
   on failure.
620
621
   This is the equivalent of the Python expression: o1 ^= o2. */
622
PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
623
624
/* Returns the result of bitwise or of o1 and o2, possibly in-place,
625
   or NULL on failure.
626
627
   This is the equivalent of the Python expression: o1 |= o2. */
628
PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
629
630
/* Returns the integer n converted to a string with a base, with a base
631
   marker of 0b, 0o or 0x prefixed if applicable.
632
633
   If n is not an int object, it is converted with PyNumber_Index first. */
634
PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
635
636
637
/* === Sequence protocol ================================================ */
638
639
/* Return 1 if the object provides sequence protocol, and zero
640
   otherwise.
641
642
   This function always succeeds. */
643
PyAPI_FUNC(int) PySequence_Check(PyObject *o);
644
645
/* Return the size of sequence object o, or -1 on failure. */
646
PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
647
648
/* For DLL compatibility */
649
#undef PySequence_Length
650
PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
651
#define PySequence_Length PySequence_Size
652
653
654
/* Return the concatenation of o1 and o2 on success, and NULL on failure.
655
656
   This is the equivalent of the Python expression: o1 + o2. */
657
PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
658
659
/* Return the result of repeating sequence object 'o' 'count' times,
660
  or NULL on failure.
661
662
  This is the equivalent of the Python expression: o * count. */
663
PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
664
665
/* Return the ith element of o, or NULL on failure.
666
667
   This is the equivalent of the Python expression: o[i]. */
668
PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
669
670
/* Return the slice of sequence object o between i1 and i2, or NULL on failure.
671
672
   This is the equivalent of the Python expression: o[i1:i2]. */
673
PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
674
675
/* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception
676
   and return -1 on failure; return 0 on success.
677
678
   This is the equivalent of the Python statement o[i] = v. */
679
PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
680
681
/* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure.
682
683
   This is the equivalent of the Python statement: del o[i]. */
684
PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
685
686
/* Assign the sequence object 'v' to the slice in sequence object 'o',
687
   from 'i1' to 'i2'. Returns -1 on failure.
688
689
   This is the equivalent of the Python statement: o[i1:i2] = v. */
690
PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
691
                                    PyObject *v);
692
693
/* Delete the slice in sequence object 'o' from 'i1' to 'i2'.
694
   Returns -1 on failure.
695
696
   This is the equivalent of the Python statement: del o[i1:i2]. */
697
PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
698
699
/* Returns the sequence 'o' as a tuple on success, and NULL on failure.
700
701
   This is equivalent to the Python expression: tuple(o). */
702
PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
703
704
/* Returns the sequence 'o' as a list on success, and NULL on failure.
705
   This is equivalent to the Python expression: list(o) */
706
PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
707
708
/* Return the sequence 'o' as a list, unless it's already a tuple or list.
709
710
   Use PySequence_Fast_GET_ITEM to access the members of this list, and
711
   PySequence_Fast_GET_SIZE to get its length.
712
713
   Returns NULL on failure.  If the object does not support iteration, raises a
714
   TypeError exception with 'm' as the message text. */
715
PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
716
717
/* Return the size of the sequence 'o', assuming that 'o' was returned by
718
   PySequence_Fast and is not NULL. */
719
#define PySequence_Fast_GET_SIZE(o) \
720
    (PyList_Check(o) ? 
PyList_GET_SIZE3.53M
(o) :
PyTuple_GET_SIZE4.45M
(o))
721
722
/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
723
   by PySequence_Fast, and that i is within bounds. */
724
#define PySequence_Fast_GET_ITEM(o, i)\
725
     (PyList_Check(o) ? 
PyList_GET_ITEM1.56M
((o), (i)) :
PyTuple_GET_ITEM1.26M
((o), (i)))
726
727
/* Return a pointer to the underlying item array for
728
   an object returned by PySequence_Fast */
729
#define PySequence_Fast_ITEMS(sf) \
730
    (PyList_Check(sf) ? 
((PyListObject *)(sf))->ob_item1.73M
\
731
                      : 
((PyTupleObject *)(sf))->ob_item3.12M
)
732
733
/* Return the number of occurrences on value on 'o', that is, return
734
   the number of keys for which o[key] == value.
735
736
   On failure, return -1.  This is equivalent to the Python expression:
737
   o.count(value). */
738
PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
739
740
/* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence
741
   'seq'; -1 on error.
742
743
   Use __contains__ if possible, else _PySequence_IterSearch(). */
744
PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
745
746
/* For DLL-level backwards compatibility */
747
#undef PySequence_In
748
/* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal
749
   to 'value', return 1, otherwise return 0. On error, return -1.
750
751
   This is equivalent to the Python expression: value in o. */
752
PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
753
754
/* For source-level backwards compatibility */
755
#define PySequence_In PySequence_Contains
756
757
758
/* Return the first index for which o[i] == value.
759
   On error, return -1.
760
761
   This is equivalent to the Python expression: o.index(value). */
762
PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
763
764
765
/* --- In-place versions of some of the above Sequence functions --- */
766
767
/* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the
768
   resulting object, which could be 'o1', or NULL on failure.
769
770
  This is the equivalent of the Python expression: o1 += o2. */
771
PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
772
773
/* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting
774
   object, which could be 'o', or NULL on failure.
775
776
   This is the equivalent of the Python expression: o1 *= count.  */
777
PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
778
779
780
/* === Mapping protocol ================================================= */
781
782
/* Return 1 if the object provides mapping protocol, and 0 otherwise.
783
784
   This function always succeeds. */
785
PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
786
787
/* Returns the number of keys in mapping object 'o' on success, and -1 on
788
  failure. This is equivalent to the Python expression: len(o). */
789
PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
790
791
/* For DLL compatibility */
792
#undef PyMapping_Length
793
PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
794
#define PyMapping_Length PyMapping_Size
795
796
797
/* Implemented as a macro:
798
799
   int PyMapping_DelItemString(PyObject *o, const char *key);
800
801
   Remove the mapping for the string 'key' from the mapping 'o'. Returns -1 on
802
   failure.
803
804
   This is equivalent to the Python statement: del o[key]. */
805
#define PyMapping_DelItemString(O, K) PyObject_DelItemString((O), (K))
806
807
/* Implemented as a macro:
808
809
   int PyMapping_DelItem(PyObject *o, PyObject *key);
810
811
   Remove the mapping for the object 'key' from the mapping object 'o'.
812
   Returns -1 on failure.
813
814
   This is equivalent to the Python statement: del o[key]. */
815
#define PyMapping_DelItem(O, K) PyObject_DelItem((O), (K))
816
817
/* On success, return 1 if the mapping object 'o' has the key 'key',
818
   and 0 otherwise.
819
820
   This is equivalent to the Python expression: key in o.
821
822
   This function always succeeds. */
823
PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
824
825
/* Return 1 if the mapping object has the key 'key', and 0 otherwise.
826
827
   This is equivalent to the Python expression: key in o.
828
829
   This function always succeeds. */
830
PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
831
832
/* On success, return a list or tuple of the keys in mapping object 'o'.
833
   On failure, return NULL. */
834
PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);
835
836
/* On success, return a list or tuple of the values in mapping object 'o'.
837
   On failure, return NULL. */
838
PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);
839
840
/* On success, return a list or tuple of the items in mapping object 'o',
841
   where each item is a tuple containing a key-value pair. On failure, return
842
   NULL. */
843
PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);
844
845
/* Return element of 'o' corresponding to the string 'key' or NULL on failure.
846
847
   This is the equivalent of the Python expression: o[key]. */
848
PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
849
                                               const char *key);
850
851
/* Map the string 'key' to the value 'v' in the mapping 'o'.
852
   Returns -1 on failure.
853
854
   This is the equivalent of the Python statement: o[key]=v. */
855
PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
856
                                        PyObject *value);
857
858
/* isinstance(object, typeorclass) */
859
PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
860
861
/* issubclass(object, typeorclass) */
862
PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
863
864
#ifndef Py_LIMITED_API
865
#  define Py_CPYTHON_ABSTRACTOBJECT_H
866
#  include "cpython/abstract.h"
867
#  undef Py_CPYTHON_ABSTRACTOBJECT_H
868
#endif
869
870
#ifdef __cplusplus
871
}
872
#endif
873
#endif /* Py_ABSTRACTOBJECT_H */