@@ -761,55 +761,50 @@ impl SyntaxExtension {
761761 }
762762 }
763763
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+ }
788779 }
789780
790781 /// if-ext - if macro from different crate (related to callsite code)
791782 /// | cmd \ attr | no | (unspecified) | external | yes |
792783 /// | no | no | no | no | no |
793- /// | (unspecified) | no | no | if-ext | yes |
784+ /// | (unspecified) | no | if-ext | if-ext | yes |
794785 /// | external | no | if-ext | if-ext | yes |
795786 /// | 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+ } ) ;
809804 #[ rustfmt:: skip]
810805 let collapse_table = [
811806 [ false , false , false , false ] ,
812- [ false , false , ext, true ] ,
807+ [ false , ext , ext, true ] ,
813808 [ false , ext, ext, true ] ,
814809 [ true , true , true , true ] ,
815810 ] ;
@@ -836,7 +831,7 @@ impl SyntaxExtension {
836831 let local_inner_macros = attr:: find_by_name ( attrs, sym:: macro_export)
837832 . and_then ( |macro_export| macro_export. meta_item_list ( ) )
838833 . 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) ;
840835 tracing:: debug!( ?name, ?local_inner_macros, ?collapse_debuginfo, ?allow_internal_unsafe) ;
841836
842837 let ( builtin_name, helper_attrs) = attr:: find_by_name ( attrs, sym:: rustc_builtin_macro)
0 commit comments