@@ -256,13 +256,12 @@ fn float_wrapper(num: PyNumber, vm: &VirtualMachine) -> PyResult<PyRef<PyFloat>>
256256
257257macro_rules! number_binary_op_wrapper {
258258 ( $name: ident) => {
259- |num, other, vm| {
260- vm. call_special_method(
261- num. deref( ) . to_owned( ) ,
262- identifier!( vm, $name) ,
263- ( other. to_owned( ) , ) ,
264- )
265- }
259+ |a, b, vm| vm. call_special_method( a. to_owned( ) , identifier!( vm, $name) , ( b. to_owned( ) , ) )
260+ } ;
261+ }
262+ macro_rules! number_binary_right_op_wrapper {
263+ ( $name: ident) => {
264+ |a, b, vm| vm. call_special_method( b. to_owned( ) , identifier!( vm, $name) , ( a. to_owned( ) , ) )
266265 } ;
267266}
268267
@@ -560,7 +559,7 @@ impl PyType {
560559 toggle_subslot ! ( number, add, number_binary_op_wrapper!( __add__) ) ;
561560 }
562561 _ if name == identifier ! ( ctx, __radd__) => {
563- toggle_subslot ! ( number, right_add, number_binary_op_wrapper !( __radd__) ) ;
562+ toggle_subslot ! ( number, right_add, number_binary_right_op_wrapper !( __radd__) ) ;
564563 }
565564 _ if name == identifier ! ( ctx, __iadd__) => {
566565 toggle_subslot ! ( number, inplace_add, number_binary_op_wrapper!( __iadd__) ) ;
@@ -569,7 +568,11 @@ impl PyType {
569568 toggle_subslot ! ( number, subtract, number_binary_op_wrapper!( __sub__) ) ;
570569 }
571570 _ if name == identifier ! ( ctx, __rsub__) => {
572- toggle_subslot ! ( number, right_subtract, number_binary_op_wrapper!( __rsub__) ) ;
571+ toggle_subslot ! (
572+ number,
573+ right_subtract,
574+ number_binary_right_op_wrapper!( __rsub__)
575+ ) ;
573576 }
574577 _ if name == identifier ! ( ctx, __isub__) => {
575578 toggle_subslot ! (
@@ -582,7 +585,11 @@ impl PyType {
582585 toggle_subslot ! ( number, multiply, number_binary_op_wrapper!( __mul__) ) ;
583586 }
584587 _ if name == identifier ! ( ctx, __rmul__) => {
585- toggle_subslot ! ( number, right_multiply, number_binary_op_wrapper!( __rmul__) ) ;
588+ toggle_subslot ! (
589+ number,
590+ right_multiply,
591+ number_binary_right_op_wrapper!( __rmul__)
592+ ) ;
586593 }
587594 _ if name == identifier ! ( ctx, __imul__) => {
588595 toggle_subslot ! (
@@ -595,7 +602,11 @@ impl PyType {
595602 toggle_subslot ! ( number, remainder, number_binary_op_wrapper!( __mod__) ) ;
596603 }
597604 _ if name == identifier ! ( ctx, __rmod__) => {
598- toggle_subslot ! ( number, right_remainder, number_binary_op_wrapper!( __rmod__) ) ;
605+ toggle_subslot ! (
606+ number,
607+ right_remainder,
608+ number_binary_right_op_wrapper!( __rmod__)
609+ ) ;
599610 }
600611 _ if name == identifier ! ( ctx, __imod__) => {
601612 toggle_subslot ! (
@@ -608,13 +619,21 @@ impl PyType {
608619 toggle_subslot ! ( number, divmod, number_binary_op_wrapper!( __divmod__) ) ;
609620 }
610621 _ if name == identifier ! ( ctx, __rdivmod__) => {
611- toggle_subslot ! ( number, right_divmod, number_binary_op_wrapper!( __rdivmod__) ) ;
622+ toggle_subslot ! (
623+ number,
624+ right_divmod,
625+ number_binary_right_op_wrapper!( __rdivmod__)
626+ ) ;
612627 }
613628 _ if name == identifier ! ( ctx, __pow__) => {
614629 toggle_subslot ! ( number, power, number_binary_op_wrapper!( __pow__) ) ;
615630 }
616631 _ if name == identifier ! ( ctx, __rpow__) => {
617- toggle_subslot ! ( number, right_power, number_binary_op_wrapper!( __rpow__) ) ;
632+ toggle_subslot ! (
633+ number,
634+ right_power,
635+ number_binary_right_op_wrapper!( __rpow__)
636+ ) ;
618637 }
619638 _ if name == identifier ! ( ctx, __ipow__) => {
620639 toggle_subslot ! ( number, inplace_power, number_binary_op_wrapper!( __ipow__) ) ;
@@ -623,7 +642,11 @@ impl PyType {
623642 toggle_subslot ! ( number, lshift, number_binary_op_wrapper!( __lshift__) ) ;
624643 }
625644 _ if name == identifier ! ( ctx, __rlshift__) => {
626- toggle_subslot ! ( number, right_lshift, number_binary_op_wrapper!( __rlshift__) ) ;
645+ toggle_subslot ! (
646+ number,
647+ right_lshift,
648+ number_binary_right_op_wrapper!( __rlshift__)
649+ ) ;
627650 }
628651 _ if name == identifier ! ( ctx, __ilshift__) => {
629652 toggle_subslot ! (
@@ -636,7 +659,11 @@ impl PyType {
636659 toggle_subslot ! ( number, rshift, number_binary_op_wrapper!( __rshift__) ) ;
637660 }
638661 _ if name == identifier ! ( ctx, __rrshift__) => {
639- toggle_subslot ! ( number, right_rshift, number_binary_op_wrapper!( __rrshift__) ) ;
662+ toggle_subslot ! (
663+ number,
664+ right_rshift,
665+ number_binary_right_op_wrapper!( __rrshift__)
666+ ) ;
640667 }
641668 _ if name == identifier ! ( ctx, __irshift__) => {
642669 toggle_subslot ! (
@@ -649,7 +676,7 @@ impl PyType {
649676 toggle_subslot ! ( number, and, number_binary_op_wrapper!( __and__) ) ;
650677 }
651678 _ if name == identifier ! ( ctx, __rand__) => {
652- toggle_subslot ! ( number, right_and, number_binary_op_wrapper !( __rand__) ) ;
679+ toggle_subslot ! ( number, right_and, number_binary_right_op_wrapper !( __rand__) ) ;
653680 }
654681 _ if name == identifier ! ( ctx, __iand__) => {
655682 toggle_subslot ! ( number, inplace_and, number_binary_op_wrapper!( __iand__) ) ;
@@ -658,7 +685,7 @@ impl PyType {
658685 toggle_subslot ! ( number, xor, number_binary_op_wrapper!( __xor__) ) ;
659686 }
660687 _ if name == identifier ! ( ctx, __rxor__) => {
661- toggle_subslot ! ( number, right_xor, number_binary_op_wrapper !( __rxor__) ) ;
688+ toggle_subslot ! ( number, right_xor, number_binary_right_op_wrapper !( __rxor__) ) ;
662689 }
663690 _ if name == identifier ! ( ctx, __ixor__) => {
664691 toggle_subslot ! ( number, inplace_xor, number_binary_op_wrapper!( __ixor__) ) ;
@@ -667,7 +694,7 @@ impl PyType {
667694 toggle_subslot ! ( number, or, number_binary_op_wrapper!( __or__) ) ;
668695 }
669696 _ if name == identifier ! ( ctx, __ror__) => {
670- toggle_subslot ! ( number, right_or, number_binary_op_wrapper !( __ror__) ) ;
697+ toggle_subslot ! ( number, right_or, number_binary_right_op_wrapper !( __ror__) ) ;
671698 }
672699 _ if name == identifier ! ( ctx, __ior__) => {
673700 toggle_subslot ! ( number, inplace_or, number_binary_op_wrapper!( __ior__) ) ;
@@ -683,7 +710,7 @@ impl PyType {
683710 toggle_subslot ! (
684711 number,
685712 right_floor_divide,
686- number_binary_op_wrapper !( __rfloordiv__)
713+ number_binary_right_op_wrapper !( __rfloordiv__)
687714 ) ;
688715 }
689716 _ if name == identifier ! ( ctx, __ifloordiv__) => {
@@ -700,7 +727,7 @@ impl PyType {
700727 toggle_subslot ! (
701728 number,
702729 right_true_divide,
703- number_binary_op_wrapper !( __rtruediv__)
730+ number_binary_right_op_wrapper !( __rtruediv__)
704731 ) ;
705732 }
706733 _ if name == identifier ! ( ctx, __itruediv__) => {
@@ -721,7 +748,7 @@ impl PyType {
721748 toggle_subslot ! (
722749 number,
723750 right_matrix_multiply,
724- number_binary_op_wrapper !( __rmatmul__)
751+ number_binary_right_op_wrapper !( __rmatmul__)
725752 ) ;
726753 }
727754 _ if name == identifier ! ( ctx, __imatmul__) => {
0 commit comments