@@ -789,55 +789,50 @@ impl SyntaxExtension {
789789 }
790790 }
791791
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+ }
816807 }
817808
818809 /// if-ext - if macro from different crate (related to callsite code)
819810 /// | cmd \ attr | no | (unspecified) | external | yes |
820811 /// | no | no | no | no | no |
821- /// | (unspecified) | no | no | if-ext | yes |
812+ /// | (unspecified) | no | if-ext | if-ext | yes |
822813 /// | external | no | if-ext | if-ext | yes |
823814 /// | 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+ } ) ;
837832 #[ rustfmt:: skip]
838833 let collapse_table = [
839834 [ false , false , false , false ] ,
840- [ false , false , ext, true ] ,
835+ [ false , ext , ext, true ] ,
841836 [ false , ext, ext, true ] ,
842837 [ true , true , true , true ] ,
843838 ] ;
@@ -864,7 +859,7 @@ impl SyntaxExtension {
864859 let local_inner_macros = attr:: find_by_name ( attrs, sym:: macro_export)
865860 . and_then ( |macro_export| macro_export. meta_item_list ( ) )
866861 . 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) ;
868863 tracing:: debug!( ?name, ?local_inner_macros, ?collapse_debuginfo, ?allow_internal_unsafe) ;
869864
870865 let ( builtin_name, helper_attrs) = attr:: find_by_name ( attrs, sym:: rustc_builtin_macro)
0 commit comments