@@ -21,6 +21,9 @@ this type and there is exactly one in existence.
21
21
#include "pycore_object.h" // _PyObject_GC_TRACK()
22
22
23
23
24
+ #define _PySlice_CAST (op ) _Py_CAST(PySliceObject*, (op))
25
+
26
+
24
27
static PyObject *
25
28
ellipsis_new (PyTypeObject * type , PyObject * args , PyObject * kwargs )
26
29
{
@@ -341,8 +344,9 @@ slice(start, stop[, step])\n\
341
344
Create a slice object. This is used for extended slicing (e.g. a[0:10:2])." );
342
345
343
346
static void
344
- slice_dealloc (PySliceObject * r )
347
+ slice_dealloc (PyObject * op )
345
348
{
349
+ PySliceObject * r = _PySlice_CAST (op );
346
350
PyObject_GC_UnTrack (r );
347
351
Py_DECREF (r -> step );
348
352
Py_DECREF (r -> start );
@@ -351,9 +355,11 @@ slice_dealloc(PySliceObject *r)
351
355
}
352
356
353
357
static PyObject *
354
- slice_repr (PySliceObject * r )
358
+ slice_repr (PyObject * op )
355
359
{
356
- return PyUnicode_FromFormat ("slice(%R, %R, %R)" , r -> start , r -> stop , r -> step );
360
+ PySliceObject * r = _PySlice_CAST (op );
361
+ return PyUnicode_FromFormat ("slice(%R, %R, %R)" ,
362
+ r -> start , r -> stop , r -> step );
357
363
}
358
364
359
365
static PyMemberDef slice_members [] = {
@@ -614,8 +620,9 @@ slice_richcompare(PyObject *v, PyObject *w, int op)
614
620
}
615
621
616
622
static int
617
- slice_traverse (PySliceObject * v , visitproc visit , void * arg )
623
+ slice_traverse (PyObject * op , visitproc visit , void * arg )
618
624
{
625
+ PySliceObject * v = _PySlice_CAST (op );
619
626
Py_VISIT (v -> start );
620
627
Py_VISIT (v -> stop );
621
628
Py_VISIT (v -> step );
@@ -636,8 +643,9 @@ slice_traverse(PySliceObject *v, visitproc visit, void *arg)
636
643
#endif
637
644
638
645
static Py_hash_t
639
- slicehash ( PySliceObject * v )
646
+ slice_hash ( PyObject * op )
640
647
{
648
+ PySliceObject * v = _PySlice_CAST (op );
641
649
Py_uhash_t acc = _PyHASH_XXPRIME_5 ;
642
650
#define _PyHASH_SLICE_PART (com ) { \
643
651
Py_uhash_t lane = PyObject_Hash(v->com); \
@@ -663,24 +671,24 @@ PyTypeObject PySlice_Type = {
663
671
"slice" , /* Name of this type */
664
672
sizeof (PySliceObject ), /* Basic object size */
665
673
0 , /* Item size for varobject */
666
- ( destructor ) slice_dealloc , /* tp_dealloc */
674
+ slice_dealloc , /* tp_dealloc */
667
675
0 , /* tp_vectorcall_offset */
668
676
0 , /* tp_getattr */
669
677
0 , /* tp_setattr */
670
678
0 , /* tp_as_async */
671
- ( reprfunc ) slice_repr , /* tp_repr */
679
+ slice_repr , /* tp_repr */
672
680
0 , /* tp_as_number */
673
681
0 , /* tp_as_sequence */
674
682
0 , /* tp_as_mapping */
675
- ( hashfunc ) slicehash , /* tp_hash */
683
+ slice_hash , /* tp_hash */
676
684
0 , /* tp_call */
677
685
0 , /* tp_str */
678
686
PyObject_GenericGetAttr , /* tp_getattro */
679
687
0 , /* tp_setattro */
680
688
0 , /* tp_as_buffer */
681
689
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC , /* tp_flags */
682
690
slice_doc , /* tp_doc */
683
- ( traverseproc ) slice_traverse , /* tp_traverse */
691
+ slice_traverse , /* tp_traverse */
684
692
0 , /* tp_clear */
685
693
slice_richcompare , /* tp_richcompare */
686
694
0 , /* tp_weaklistoffset */
0 commit comments