@@ -763,55 +763,50 @@ impl SyntaxExtension {
763
763
}
764
764
}
765
765
766
- fn collapse_debuginfo_by_name ( sess : & Session , attr : & Attribute ) -> CollapseMacroDebuginfo {
767
- use crate :: errors:: CollapseMacroDebuginfoIllegal ;
768
- // #[collapse_debuginfo] without enum value (#[collapse_debuginfo(no/external/yes)])
769
- // considered as `yes`
770
- attr. meta_item_list ( ) . map_or ( CollapseMacroDebuginfo :: Yes , |l| {
771
- let [ NestedMetaItem :: MetaItem ( item) ] = & l[ ..] else {
772
- sess. dcx ( ) . emit_err ( CollapseMacroDebuginfoIllegal { span : attr. span } ) ;
773
- return CollapseMacroDebuginfo :: Unspecified ;
774
- } ;
775
- if !item. is_word ( ) {
776
- sess. dcx ( ) . emit_err ( CollapseMacroDebuginfoIllegal { span : item. span } ) ;
777
- CollapseMacroDebuginfo :: Unspecified
778
- } else {
779
- match item. name_or_empty ( ) {
780
- sym:: no => CollapseMacroDebuginfo :: No ,
781
- sym:: external => CollapseMacroDebuginfo :: External ,
782
- sym:: yes => CollapseMacroDebuginfo :: Yes ,
783
- _ => {
784
- sess. dcx ( ) . emit_err ( CollapseMacroDebuginfoIllegal { span : item. span } ) ;
785
- CollapseMacroDebuginfo :: Unspecified
786
- }
787
- }
788
- }
789
- } )
766
+ fn collapse_debuginfo_by_name ( attr : & Attribute ) -> Result < CollapseMacroDebuginfo , Span > {
767
+ let list = attr. meta_item_list ( ) ;
768
+ let Some ( [ NestedMetaItem :: MetaItem ( item) ] ) = list. as_deref ( ) else {
769
+ return Err ( attr. span ) ;
770
+ } ;
771
+ if !item. is_word ( ) {
772
+ return Err ( item. span ) ;
773
+ }
774
+
775
+ match item. name_or_empty ( ) {
776
+ sym:: no => Ok ( CollapseMacroDebuginfo :: No ) ,
777
+ sym:: external => Ok ( CollapseMacroDebuginfo :: External ) ,
778
+ sym:: yes => Ok ( CollapseMacroDebuginfo :: Yes ) ,
779
+ _ => Err ( item. path . span ) ,
780
+ }
790
781
}
791
782
792
783
/// if-ext - if macro from different crate (related to callsite code)
793
784
/// | cmd \ attr | no | (unspecified) | external | yes |
794
785
/// | no | no | no | no | no |
795
- /// | (unspecified) | no | no | if-ext | yes |
786
+ /// | (unspecified) | no | if-ext | if-ext | yes |
796
787
/// | external | no | if-ext | if-ext | yes |
797
788
/// | yes | yes | yes | yes | yes |
798
- fn get_collapse_debuginfo ( sess : & Session , attrs : & [ ast:: Attribute ] , is_local : bool ) -> bool {
799
- let mut collapse_debuginfo_attr = attr:: find_by_name ( attrs, sym:: collapse_debuginfo)
800
- . map ( |v| Self :: collapse_debuginfo_by_name ( sess, v) )
801
- . unwrap_or ( CollapseMacroDebuginfo :: Unspecified ) ;
802
- if collapse_debuginfo_attr == CollapseMacroDebuginfo :: Unspecified
803
- && attr:: contains_name ( attrs, sym:: rustc_builtin_macro)
804
- {
805
- collapse_debuginfo_attr = CollapseMacroDebuginfo :: Yes ;
806
- }
807
-
808
- let flag = sess. opts . unstable_opts . collapse_macro_debuginfo ;
809
- let attr = collapse_debuginfo_attr;
810
- let ext = !is_local;
789
+ fn get_collapse_debuginfo ( sess : & Session , attrs : & [ ast:: Attribute ] , ext : bool ) -> bool {
790
+ let flag = sess. opts . cg . collapse_macro_debuginfo ;
791
+ let attr = attr:: find_by_name ( attrs, sym:: collapse_debuginfo)
792
+ . and_then ( |attr| {
793
+ Self :: collapse_debuginfo_by_name ( attr)
794
+ . map_err ( |span| {
795
+ sess. dcx ( ) . emit_err ( errors:: CollapseMacroDebuginfoIllegal { span } )
796
+ } )
797
+ . ok ( )
798
+ } )
799
+ . unwrap_or_else ( || {
800
+ if attr:: contains_name ( attrs, sym:: rustc_builtin_macro) {
801
+ CollapseMacroDebuginfo :: Yes
802
+ } else {
803
+ CollapseMacroDebuginfo :: Unspecified
804
+ }
805
+ } ) ;
811
806
#[ rustfmt:: skip]
812
807
let collapse_table = [
813
808
[ false , false , false , false ] ,
814
- [ false , false , ext, true ] ,
809
+ [ false , ext , ext, true ] ,
815
810
[ false , ext, ext, true ] ,
816
811
[ true , true , true , true ] ,
817
812
] ;
@@ -838,7 +833,7 @@ impl SyntaxExtension {
838
833
let local_inner_macros = attr:: find_by_name ( attrs, sym:: macro_export)
839
834
. and_then ( |macro_export| macro_export. meta_item_list ( ) )
840
835
. is_some_and ( |l| attr:: list_contains_name ( & l, sym:: local_inner_macros) ) ;
841
- let collapse_debuginfo = Self :: get_collapse_debuginfo ( sess, attrs, is_local) ;
836
+ let collapse_debuginfo = Self :: get_collapse_debuginfo ( sess, attrs, ! is_local) ;
842
837
tracing:: debug!( ?name, ?local_inner_macros, ?collapse_debuginfo, ?allow_internal_unsafe) ;
843
838
844
839
let ( builtin_name, helper_attrs) = attr:: find_by_name ( attrs, sym:: rustc_builtin_macro)
0 commit comments