@@ -513,43 +513,54 @@ to_complex(PyObject **pobj, Py_complex *pc)
513513
514514
515515static PyObject *
516- complex_add (PyComplexObject * v , PyComplexObject * w )
516+ complex_add (PyObject * v , PyObject * w )
517517{
518518 Py_complex result ;
519+ Py_complex a , b ;
520+ TO_COMPLEX (v , a );
521+ TO_COMPLEX (w , b );
519522 PyFPE_START_PROTECT ("complex_add" , return 0 )
520- result = c_sum (v -> cval , w -> cval );
523+ result = c_sum (a , b );
521524 PyFPE_END_PROTECT (result )
522525 return PyComplex_FromCComplex (result );
523526}
524527
525528static PyObject *
526- complex_sub (PyComplexObject * v , PyComplexObject * w )
529+ complex_sub (PyObject * v , PyObject * w )
527530{
528- Py_complex result ;
531+ Py_complex result ;
532+ Py_complex a , b ;
533+ TO_COMPLEX (v , a );
534+ TO_COMPLEX (w , b );;
529535 PyFPE_START_PROTECT ("complex_sub" , return 0 )
530- result = c_diff (v -> cval , w -> cval );
536+ result = c_diff (a , b );
531537 PyFPE_END_PROTECT (result )
532538 return PyComplex_FromCComplex (result );
533539}
534540
535541static PyObject *
536- complex_mul (PyComplexObject * v , PyComplexObject * w )
542+ complex_mul (PyObject * v , PyObject * w )
537543{
538544 Py_complex result ;
545+ Py_complex a , b ;
546+ TO_COMPLEX (v , a );
547+ TO_COMPLEX (w , b );
539548 PyFPE_START_PROTECT ("complex_mul" , return 0 )
540- result = c_prod (v -> cval , w -> cval );
549+ result = c_prod (a , b );
541550 PyFPE_END_PROTECT (result )
542551 return PyComplex_FromCComplex (result );
543552}
544553
545554static PyObject *
546- complex_div (PyComplexObject * v , PyComplexObject * w )
555+ complex_div (PyObject * v , PyObject * w )
547556{
548557 Py_complex quot ;
549-
558+ Py_complex a , b ;
559+ TO_COMPLEX (v , a );
560+ TO_COMPLEX (w , b );
550561 PyFPE_START_PROTECT ("complex_div" , return 0 )
551562 errno = 0 ;
552- quot = c_quot (v -> cval , w -> cval );
563+ quot = c_quot (a , b );
553564 PyFPE_END_PROTECT (quot )
554565 if (errno == EDOM ) {
555566 PyErr_SetString (PyExc_ZeroDivisionError , "complex division" );
@@ -559,18 +570,20 @@ complex_div(PyComplexObject *v, PyComplexObject *w)
559570}
560571
561572static PyObject *
562- complex_classic_div (PyComplexObject * v , PyComplexObject * w )
573+ complex_classic_div (PyObject * v , PyObject * w )
563574{
564575 Py_complex quot ;
565-
576+ Py_complex a , b ;
577+ TO_COMPLEX (v , a );
578+ TO_COMPLEX (w , b );
566579 if (Py_DivisionWarningFlag >= 2 &&
567580 PyErr_Warn (PyExc_DeprecationWarning ,
568581 "classic complex division" ) < 0 )
569582 return NULL ;
570583
571584 PyFPE_START_PROTECT ("complex_classic_div" , return 0 )
572585 errno = 0 ;
573- quot = c_quot (v -> cval , w -> cval );
586+ quot = c_quot (a , b );
574587 PyFPE_END_PROTECT (quot )
575588 if (errno == EDOM ) {
576589 PyErr_SetString (PyExc_ZeroDivisionError , "complex division" );
@@ -580,47 +593,51 @@ complex_classic_div(PyComplexObject *v, PyComplexObject *w)
580593}
581594
582595static PyObject *
583- complex_remainder (PyComplexObject * v , PyComplexObject * w )
596+ complex_remainder (PyObject * v , PyObject * w )
584597{
585598 Py_complex div , mod ;
586-
599+ Py_complex a , b ;
600+ TO_COMPLEX (v , a );
601+ TO_COMPLEX (w , b );
587602 if (PyErr_Warn (PyExc_DeprecationWarning ,
588603 "complex divmod(), // and % are deprecated" ) < 0 )
589604 return NULL ;
590605
591606 errno = 0 ;
592- div = c_quot (v -> cval , w -> cval ); /* The raw divisor value. */
607+ div = c_quot (a , b ); /* The raw divisor value. */
593608 if (errno == EDOM ) {
594609 PyErr_SetString (PyExc_ZeroDivisionError , "complex remainder" );
595610 return NULL ;
596611 }
597612 div .real = floor (div .real ); /* Use the floor of the real part. */
598613 div .imag = 0.0 ;
599- mod = c_diff (v -> cval , c_prod (w -> cval , div ));
614+ mod = c_diff (a , c_prod (b , div ));
600615
601616 return PyComplex_FromCComplex (mod );
602617}
603618
604619
605620static PyObject *
606- complex_divmod (PyComplexObject * v , PyComplexObject * w )
621+ complex_divmod (PyObject * v , PyObject * w )
607622{
608623 Py_complex div , mod ;
609624 PyObject * d , * m , * z ;
610-
625+ Py_complex a , b ;
626+ TO_COMPLEX (v , a );
627+ TO_COMPLEX (w , b );
611628 if (PyErr_Warn (PyExc_DeprecationWarning ,
612629 "complex divmod(), // and % are deprecated" ) < 0 )
613630 return NULL ;
614631
615632 errno = 0 ;
616- div = c_quot (v -> cval , w -> cval ); /* The raw divisor value. */
633+ div = c_quot (a , b ); /* The raw divisor value. */
617634 if (errno == EDOM ) {
618635 PyErr_SetString (PyExc_ZeroDivisionError , "complex divmod()" );
619636 return NULL ;
620637 }
621638 div .real = floor (div .real ); /* Use the floor of the real part. */
622639 div .imag = 0.0 ;
623- mod = c_diff (v -> cval , c_prod (w -> cval , div ));
640+ mod = c_diff (a , c_prod (b , div ));
624641 d = PyComplex_FromCComplex (div );
625642 m = PyComplex_FromCComplex (mod );
626643 z = PyTuple_Pack (2 , d , m );
@@ -638,8 +655,7 @@ complex_pow(PyObject *v, PyObject *w, PyObject *z)
638655 Py_complex a , b ;
639656 TO_COMPLEX (v , a );
640657 TO_COMPLEX (w , b );
641-
642- if (z != Py_None ) {
658+ if (z != Py_None ) {
643659 PyErr_SetString (PyExc_ValueError , "complex modulo" );
644660 return NULL ;
645661 }
@@ -668,10 +684,12 @@ complex_pow(PyObject *v, PyObject *w, PyObject *z)
668684}
669685
670686static PyObject *
671- complex_int_div (PyComplexObject * v , PyComplexObject * w )
687+ complex_int_div (PyObject * v , PyObject * w )
672688{
673689 PyObject * t , * r ;
674-
690+ Py_complex a , b ;
691+ TO_COMPLEX (v , a );
692+ TO_COMPLEX (w , b );
675693 if (PyErr_Warn (PyExc_DeprecationWarning ,
676694 "complex divmod(), // and % are deprecated" ) < 0 )
677695 return NULL ;
@@ -1282,7 +1300,8 @@ PyTypeObject PyComplex_Type = {
12821300 PyObject_GenericGetAttr , /* tp_getattro */
12831301 0 , /* tp_setattro */
12841302 0 , /* tp_as_buffer */
1285- Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE , /* tp_flags */
1303+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
1304+ Py_TPFLAGS_BASETYPE , /* tp_flags */
12861305 complex_doc , /* tp_doc */
12871306 0 , /* tp_traverse */
12881307 0 , /* tp_clear */
0 commit comments