@@ -181,8 +181,9 @@ PyTuple_Pack(Py_ssize_t n, ...)
181
181
/* Methods */
182
182
183
183
static void
184
- tupledealloc (PyTupleObject * op )
184
+ tupledealloc (PyObject * arg )
185
185
{
186
+ PyTupleObject * op = _PyTuple_CAST (arg );
186
187
if (Py_SIZE (op ) == 0 ) {
187
188
/* The empty tuple is statically allocated. */
188
189
if (op == & _Py_SINGLETON (tuple_empty )) {
@@ -316,8 +317,9 @@ tuplerepr(PyTupleObject *v)
316
317
/* Tests have shown that it's not worth to cache the hash value, see
317
318
https://bugs.python.org/issue9685 */
318
319
static Py_hash_t
319
- tuplehash (PyTupleObject * v )
320
+ tuplehash (PyObject * op )
320
321
{
322
+ PyTupleObject * v = _PyTuple_CAST (op );
321
323
Py_ssize_t i , len = Py_SIZE (v );
322
324
PyObject * * item = v -> ob_item ;
323
325
@@ -342,25 +344,27 @@ tuplehash(PyTupleObject *v)
342
344
}
343
345
344
346
static Py_ssize_t
345
- tuplelength (PyTupleObject * a )
347
+ tuplelength (PyObject * op )
346
348
{
349
+ PyTupleObject * a = _PyTuple_CAST (op );
347
350
return Py_SIZE (a );
348
351
}
349
352
350
353
static int
351
- tuplecontains (PyTupleObject * a , PyObject * el )
354
+ tuplecontains (PyObject * op , PyObject * el )
352
355
{
353
- Py_ssize_t i ;
354
- int cmp ;
355
-
356
- for (i = 0 , cmp = 0 ; cmp == 0 && i < Py_SIZE (a ); ++ i )
356
+ PyTupleObject * a = _PyTuple_CAST (op );
357
+ int cmp = 0 ;
358
+ for (Py_ssize_t i = 0 ; cmp == 0 && i < Py_SIZE (a ); ++ i ) {
357
359
cmp = PyObject_RichCompareBool (PyTuple_GET_ITEM (a , i ), el , Py_EQ );
360
+ }
358
361
return cmp ;
359
362
}
360
363
361
364
static PyObject *
362
- tupleitem (PyTupleObject * a , Py_ssize_t i )
365
+ tupleitem (PyObject * op , Py_ssize_t i )
363
366
{
367
+ PyTupleObject * a = _PyTuple_CAST (op );
364
368
if (i < 0 || i >= Py_SIZE (a )) {
365
369
PyErr_SetString (PyExc_IndexError , "tuple index out of range" );
366
370
return NULL ;
@@ -458,12 +462,9 @@ PyTuple_GetSlice(PyObject *op, Py_ssize_t i, Py_ssize_t j)
458
462
}
459
463
460
464
static PyObject *
461
- tupleconcat (PyTupleObject * a , PyObject * bb )
465
+ tupleconcat (PyObject * op , PyObject * bb )
462
466
{
463
- Py_ssize_t size ;
464
- Py_ssize_t i ;
465
- PyObject * * src , * * dest ;
466
- PyTupleObject * np ;
467
+ PyTupleObject * a = _PyTuple_CAST (op );
467
468
if (Py_SIZE (a ) == 0 && PyTuple_CheckExact (bb )) {
468
469
return Py_NewRef (bb );
469
470
}
@@ -479,27 +480,30 @@ tupleconcat(PyTupleObject *a, PyObject *bb)
479
480
return Py_NewRef (a );
480
481
}
481
482
assert ((size_t )Py_SIZE (a ) + (size_t )Py_SIZE (b ) < PY_SSIZE_T_MAX );
482
- size = Py_SIZE (a ) + Py_SIZE (b );
483
+ Py_ssize_t size = Py_SIZE (a ) + Py_SIZE (b );
483
484
if (size == 0 ) {
484
485
return tuple_get_empty ();
485
486
}
486
487
487
- np = tuple_alloc (size );
488
+ PyTupleObject * np = tuple_alloc (size );
488
489
if (np == NULL ) {
489
490
return NULL ;
490
491
}
491
- src = a -> ob_item ;
492
- dest = np -> ob_item ;
493
- for (i = 0 ; i < Py_SIZE (a ); i ++ ) {
492
+
493
+ PyObject * * src = a -> ob_item ;
494
+ PyObject * * dest = np -> ob_item ;
495
+ for (Py_ssize_t i = 0 ; i < Py_SIZE (a ); i ++ ) {
494
496
PyObject * v = src [i ];
495
497
dest [i ] = Py_NewRef (v );
496
498
}
499
+
497
500
src = b -> ob_item ;
498
501
dest = np -> ob_item + Py_SIZE (a );
499
- for (i = 0 ; i < Py_SIZE (b ); i ++ ) {
502
+ for (Py_ssize_t i = 0 ; i < Py_SIZE (b ); i ++ ) {
500
503
PyObject * v = src [i ];
501
504
dest [i ] = Py_NewRef (v );
502
505
}
506
+
503
507
_PyObject_GC_TRACK (np );
504
508
return (PyObject * )np ;
505
509
}
@@ -621,11 +625,10 @@ tuple_count(PyTupleObject *self, PyObject *value)
621
625
}
622
626
623
627
static int
624
- tupletraverse (PyTupleObject * o , visitproc visit , void * arg )
628
+ tupletraverse (PyObject * op , visitproc visit , void * arg )
625
629
{
626
- Py_ssize_t i ;
627
-
628
- for (i = Py_SIZE (o ); -- i >= 0 ; )
630
+ PyTupleObject * o = _PyTuple_CAST (op );
631
+ for (Py_ssize_t i = Py_SIZE (o ); -- i >= 0 ; )
629
632
Py_VISIT (o -> ob_item [i ]);
630
633
return 0 ;
631
634
}
@@ -781,15 +784,16 @@ static PySequenceMethods tuple_as_sequence = {
781
784
};
782
785
783
786
static PyObject *
784
- tuplesubscript (PyTupleObject * self , PyObject * item )
787
+ tuplesubscript (PyObject * op , PyObject * item )
785
788
{
789
+ PyTupleObject * self = _PyTuple_CAST (op );
786
790
if (_PyIndex_Check (item )) {
787
791
Py_ssize_t i = PyNumber_AsSsize_t (item , PyExc_IndexError );
788
792
if (i == -1 && PyErr_Occurred ())
789
793
return NULL ;
790
794
if (i < 0 )
791
795
i += PyTuple_GET_SIZE (self );
792
- return tupleitem (self , i );
796
+ return tupleitem (( PyObject * ) self , i );
793
797
}
794
798
else if (PySlice_Check (item )) {
795
799
Py_ssize_t start , stop , step , slicelength , i ;
0 commit comments