@@ -789,55 +789,50 @@ impl SyntaxExtension {
789
789
}
790
790
}
791
791
792
- fn collapse_debuginfo_by_name ( sess : & Session , attr : & Attribute ) -> CollapseMacroDebuginfo {
793
- use crate :: errors:: CollapseMacroDebuginfoIllegal ;
794
- // #[collapse_debuginfo] without enum value (#[collapse_debuginfo(no/external/yes)])
795
- // considered as `yes`
796
- attr. meta_item_list ( ) . map_or ( CollapseMacroDebuginfo :: Yes , |l| {
797
- let [ NestedMetaItem :: MetaItem ( item) ] = & l[ ..] else {
798
- sess. dcx ( ) . emit_err ( CollapseMacroDebuginfoIllegal { span : attr. span } ) ;
799
- return CollapseMacroDebuginfo :: Unspecified ;
800
- } ;
801
- if !item. is_word ( ) {
802
- sess. dcx ( ) . emit_err ( CollapseMacroDebuginfoIllegal { span : item. span } ) ;
803
- CollapseMacroDebuginfo :: Unspecified
804
- } else {
805
- match item. name_or_empty ( ) {
806
- sym:: no => CollapseMacroDebuginfo :: No ,
807
- sym:: external => CollapseMacroDebuginfo :: External ,
808
- sym:: yes => CollapseMacroDebuginfo :: Yes ,
809
- _ => {
810
- sess. dcx ( ) . emit_err ( CollapseMacroDebuginfoIllegal { span : item. span } ) ;
811
- CollapseMacroDebuginfo :: Unspecified
812
- }
813
- }
814
- }
815
- } )
792
+ fn collapse_debuginfo_by_name ( attr : & Attribute ) -> Result < CollapseMacroDebuginfo , Span > {
793
+ let list = attr. meta_item_list ( ) ;
794
+ let Some ( [ NestedMetaItem :: MetaItem ( item) ] ) = list. as_deref ( ) else {
795
+ return Err ( attr. span ) ;
796
+ } ;
797
+ if !item. is_word ( ) {
798
+ return Err ( item. span ) ;
799
+ }
800
+
801
+ match item. name_or_empty ( ) {
802
+ sym:: no => Ok ( CollapseMacroDebuginfo :: No ) ,
803
+ sym:: external => Ok ( CollapseMacroDebuginfo :: External ) ,
804
+ sym:: yes => Ok ( CollapseMacroDebuginfo :: Yes ) ,
805
+ _ => Err ( item. path . span ) ,
806
+ }
816
807
}
817
808
818
809
/// if-ext - if macro from different crate (related to callsite code)
819
810
/// | cmd \ attr | no | (unspecified) | external | yes |
820
811
/// | no | no | no | no | no |
821
- /// | (unspecified) | no | no | if-ext | yes |
812
+ /// | (unspecified) | no | if-ext | if-ext | yes |
822
813
/// | external | no | if-ext | if-ext | yes |
823
814
/// | yes | yes | yes | yes | yes |
824
- fn get_collapse_debuginfo ( sess : & Session , attrs : & [ ast:: Attribute ] , is_local : bool ) -> bool {
825
- let mut collapse_debuginfo_attr = attr:: find_by_name ( attrs, sym:: collapse_debuginfo)
826
- . map ( |v| Self :: collapse_debuginfo_by_name ( sess, v) )
827
- . unwrap_or ( CollapseMacroDebuginfo :: Unspecified ) ;
828
- if collapse_debuginfo_attr == CollapseMacroDebuginfo :: Unspecified
829
- && attr:: contains_name ( attrs, sym:: rustc_builtin_macro)
830
- {
831
- collapse_debuginfo_attr = CollapseMacroDebuginfo :: Yes ;
832
- }
833
-
834
- let flag = sess. opts . unstable_opts . collapse_macro_debuginfo ;
835
- let attr = collapse_debuginfo_attr;
836
- let ext = !is_local;
815
+ fn get_collapse_debuginfo ( sess : & Session , attrs : & [ ast:: Attribute ] , ext : bool ) -> bool {
816
+ let flag = sess. opts . cg . collapse_macro_debuginfo ;
817
+ let attr = attr:: find_by_name ( attrs, sym:: collapse_debuginfo)
818
+ . and_then ( |attr| {
819
+ Self :: collapse_debuginfo_by_name ( attr)
820
+ . map_err ( |span| {
821
+ sess. dcx ( ) . emit_err ( errors:: CollapseMacroDebuginfoIllegal { span } )
822
+ } )
823
+ . ok ( )
824
+ } )
825
+ . unwrap_or_else ( || {
826
+ if attr:: contains_name ( attrs, sym:: rustc_builtin_macro) {
827
+ CollapseMacroDebuginfo :: Yes
828
+ } else {
829
+ CollapseMacroDebuginfo :: Unspecified
830
+ }
831
+ } ) ;
837
832
#[ rustfmt:: skip]
838
833
let collapse_table = [
839
834
[ false , false , false , false ] ,
840
- [ false , false , ext, true ] ,
835
+ [ false , ext , ext, true ] ,
841
836
[ false , ext, ext, true ] ,
842
837
[ true , true , true , true ] ,
843
838
] ;
@@ -864,7 +859,7 @@ impl SyntaxExtension {
864
859
let local_inner_macros = attr:: find_by_name ( attrs, sym:: macro_export)
865
860
. and_then ( |macro_export| macro_export. meta_item_list ( ) )
866
861
. is_some_and ( |l| attr:: list_contains_name ( & l, sym:: local_inner_macros) ) ;
867
- let collapse_debuginfo = Self :: get_collapse_debuginfo ( sess, attrs, is_local) ;
862
+ let collapse_debuginfo = Self :: get_collapse_debuginfo ( sess, attrs, ! is_local) ;
868
863
tracing:: debug!( ?name, ?local_inner_macros, ?collapse_debuginfo, ?allow_internal_unsafe) ;
869
864
870
865
let ( builtin_name, helper_attrs) = attr:: find_by_name ( attrs, sym:: rustc_builtin_macro)
0 commit comments