@@ -670,10 +670,7 @@ macro_rules! __declare_class_output_impls {
670
670
671
671
$( #[ $m] ) *
672
672
impl $for {
673
- $crate:: __declare_class_rewrite_methods! {
674
- ( $crate:: __declare_class_method_out)
675
- ( )
676
-
673
+ $crate:: __declare_class_output_methods! {
677
674
$( $methods) *
678
675
}
679
676
}
@@ -694,10 +691,7 @@ macro_rules! __declare_class_output_impls {
694
691
) => {
695
692
$( #[ $m] ) *
696
693
impl $for {
697
- $crate:: __declare_class_rewrite_methods! {
698
- ( $crate:: __declare_class_method_out)
699
- ( )
700
-
694
+ $crate:: __declare_class_output_methods! {
701
695
$( $methods) *
702
696
}
703
697
}
@@ -708,6 +702,63 @@ macro_rules! __declare_class_output_impls {
708
702
} ;
709
703
}
710
704
705
+ #[ doc( hidden) ]
706
+ #[ macro_export]
707
+ macro_rules! __declare_class_output_methods {
708
+ // Base case
709
+ { } => { } ;
710
+
711
+ // Unsafe variant
712
+ {
713
+ $( #[ $( $m: tt) * ] ) *
714
+ unsafe fn $name: ident( $( $params: tt) * ) $( -> $ret: ty) ? $body: block
715
+
716
+ $( $rest: tt) *
717
+ } => {
718
+ $crate:: __rewrite_self_param! {
719
+ ( $( $params) * )
720
+
721
+ ( $crate:: __extract_custom_attributes)
722
+ ( $( #[ $( $m) * ] ) * )
723
+
724
+ ( $crate:: __declare_class_method_out)
725
+ ( unsafe )
726
+ ( $name)
727
+ ( $( $ret) ?)
728
+ ( $body)
729
+ }
730
+
731
+ $crate:: __declare_class_output_methods! {
732
+ $( $rest) *
733
+ }
734
+ } ;
735
+
736
+ // Safe variant
737
+ {
738
+ $( #[ $( $m: tt) * ] ) *
739
+ fn $name: ident( $( $params: tt) * ) $( -> $ret: ty) ? $body: block
740
+
741
+ $( $rest: tt) *
742
+ } => {
743
+ $crate:: __rewrite_self_param! {
744
+ ( $( $params) * )
745
+
746
+ ( $crate:: __extract_custom_attributes)
747
+ ( $( #[ $( $m) * ] ) * )
748
+
749
+ ( $crate:: __declare_class_method_out)
750
+ ( )
751
+ ( $name)
752
+ ( $( $ret) ?)
753
+ ( $body)
754
+ }
755
+
756
+ $crate:: __declare_class_output_methods! {
757
+ $( $rest) *
758
+ }
759
+ } ;
760
+ }
761
+
711
762
#[ doc( hidden) ]
712
763
#[ macro_export]
713
764
macro_rules! __declare_class_register_impls {
@@ -742,8 +793,7 @@ macro_rules! __declare_class_register_impls {
742
793
#[ allow( unused_unsafe) ]
743
794
// SAFETY: Upheld by caller
744
795
unsafe {
745
- $crate:: __declare_class_rewrite_methods! {
746
- ( $crate:: __declare_class_register_out)
796
+ $crate:: __declare_class_register_methods! {
747
797
( __objc2_protocol_builder)
748
798
749
799
$( $methods) *
@@ -781,8 +831,7 @@ macro_rules! __declare_class_register_impls {
781
831
#[ allow( unused_unsafe) ]
782
832
// SAFETY: Upheld by caller
783
833
unsafe {
784
- $crate:: __declare_class_rewrite_methods! {
785
- ( $crate:: __declare_class_register_out)
834
+ $crate:: __declare_class_register_methods! {
786
835
( $builder)
787
836
788
837
$( $methods) *
@@ -800,16 +849,15 @@ macro_rules! __declare_class_register_impls {
800
849
801
850
#[ doc( hidden) ]
802
851
#[ macro_export]
803
- macro_rules! __declare_class_rewrite_methods {
852
+ macro_rules! __declare_class_register_methods {
853
+ // Base case
804
854
{
805
- ( $out_macro: path)
806
- ( $( $macro_args: tt) * )
855
+ ( $builder: ident)
807
856
} => { } ;
808
857
809
858
// Unsafe variant
810
859
{
811
- ( $out_macro: path)
812
- ( $( $macro_args: tt) * )
860
+ ( $builder: ident)
813
861
814
862
$( #[ $( $m: tt) * ] ) *
815
863
unsafe fn $name: ident( $( $params: tt) * ) $( -> $ret: ty) ? $body: block
@@ -822,26 +870,24 @@ macro_rules! __declare_class_rewrite_methods {
822
870
( $crate:: __extract_custom_attributes)
823
871
( $( #[ $( $m) * ] ) * )
824
872
825
- ( $out_macro )
826
- ( $( $macro_args ) * )
873
+ ( $crate :: __declare_class_register_out )
874
+ ( $builder )
827
875
( unsafe )
828
876
( $name)
829
877
( $( $ret) ?)
830
878
( $body)
831
879
}
832
880
833
- $crate:: __declare_class_rewrite_methods! {
834
- ( $out_macro)
835
- ( $( $macro_args) * )
881
+ $crate:: __declare_class_register_methods! {
882
+ ( $builder)
836
883
837
884
$( $rest) *
838
885
}
839
886
} ;
840
887
841
888
// Safe variant
842
889
{
843
- ( $out_macro: path)
844
- ( $( $macro_args: tt) * )
890
+ ( $builder: ident)
845
891
846
892
$( #[ $( $m: tt) * ] ) *
847
893
fn $name: ident( $( $params: tt) * ) $( -> $ret: ty) ? $body: block
@@ -854,28 +900,43 @@ macro_rules! __declare_class_rewrite_methods {
854
900
( $crate:: __extract_custom_attributes)
855
901
( $( #[ $( $m) * ] ) * )
856
902
857
- ( $out_macro )
858
- ( $( $macro_args ) * )
903
+ ( $crate :: __declare_class_register_out )
904
+ ( $builder )
859
905
( )
860
906
( $name)
861
907
( $( $ret) ?)
862
908
( $body)
863
909
}
864
910
865
- $crate:: __declare_class_rewrite_methods! {
866
- ( $out_macro)
867
- ( $( $macro_args) * )
911
+ $crate:: __declare_class_register_methods! {
912
+ ( $builder)
868
913
869
914
$( $rest) *
870
915
}
871
916
} ;
917
+
918
+ // Consume associated items for better UI.
919
+ //
920
+ // This will still fail inside __declare_class_output_methods!
921
+ {
922
+ ( $builder: ident)
923
+
924
+ $_associated_item: item
925
+
926
+ $( $rest: tt) *
927
+ } => {
928
+ $crate:: __declare_class_output_methods! {
929
+ ( $builder)
930
+
931
+ $( $rest) *
932
+ }
933
+ }
872
934
}
873
935
874
936
#[ doc( hidden) ]
875
937
#[ macro_export]
876
938
macro_rules! __declare_class_method_out {
877
939
{
878
- ( )
879
940
( $( $qualifiers: tt) * )
880
941
( $name: ident)
881
942
( $( $ret: ty) ?)
0 commit comments