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