@@ -681,33 +681,34 @@ impl MacResult for DummyResult {
681
681
}
682
682
683
683
/// A syntax extension kind.
684
+ #[ derive( Clone ) ]
684
685
pub enum SyntaxExtensionKind {
685
686
/// A token-based function-like macro.
686
687
Bang (
687
688
/// An expander with signature TokenStream -> TokenStream.
688
- Box < dyn BangProcMacro + sync:: DynSync + sync:: DynSend > ,
689
+ Arc < dyn BangProcMacro + sync:: DynSync + sync:: DynSend > ,
689
690
) ,
690
691
691
692
/// An AST-based function-like macro.
692
693
LegacyBang (
693
694
/// An expander with signature TokenStream -> AST.
694
- Box < dyn TTMacroExpander + sync:: DynSync + sync:: DynSend > ,
695
+ Arc < dyn TTMacroExpander + sync:: DynSync + sync:: DynSend > ,
695
696
) ,
696
697
697
698
/// A token-based attribute macro.
698
699
Attr (
699
700
/// An expander with signature (TokenStream, TokenStream) -> TokenStream.
700
701
/// The first TokenStream is the attribute itself, the second is the annotated item.
701
702
/// The produced TokenStream replaces the input TokenStream.
702
- Box < dyn AttrProcMacro + sync:: DynSync + sync:: DynSend > ,
703
+ Arc < dyn AttrProcMacro + sync:: DynSync + sync:: DynSend > ,
703
704
) ,
704
705
705
706
/// An AST-based attribute macro.
706
707
LegacyAttr (
707
708
/// An expander with signature (AST, AST) -> AST.
708
709
/// The first AST fragment is the attribute itself, the second is the annotated item.
709
710
/// The produced AST fragment replaces the input AST fragment.
710
- Box < dyn MultiItemModifier + sync:: DynSync + sync:: DynSend > ,
711
+ Arc < dyn MultiItemModifier + sync:: DynSync + sync:: DynSend > ,
711
712
) ,
712
713
713
714
/// A trivial attribute "macro" that does nothing,
@@ -724,18 +725,18 @@ pub enum SyntaxExtensionKind {
724
725
/// is handled identically to `LegacyDerive`. It should be migrated to
725
726
/// a token-based representation like `Bang` and `Attr`, instead of
726
727
/// using `MultiItemModifier`.
727
- Box < dyn MultiItemModifier + sync:: DynSync + sync:: DynSend > ,
728
+ Arc < dyn MultiItemModifier + sync:: DynSync + sync:: DynSend > ,
728
729
) ,
729
730
730
731
/// An AST-based derive macro.
731
732
LegacyDerive (
732
733
/// An expander with signature AST -> AST.
733
734
/// The produced AST fragment is appended to the input AST fragment.
734
- Box < dyn MultiItemModifier + sync:: DynSync + sync:: DynSend > ,
735
+ Arc < dyn MultiItemModifier + sync:: DynSync + sync:: DynSend > ,
735
736
) ,
736
737
737
738
/// A glob delegation.
738
- GlobDelegation ( Box < dyn GlobDelegationExpander + sync:: DynSync + sync:: DynSend > ) ,
739
+ GlobDelegation ( Arc < dyn GlobDelegationExpander + sync:: DynSync + sync:: DynSend > ) ,
739
740
}
740
741
741
742
/// A struct representing a macro definition in "lowered" form ready for expansion.
@@ -937,7 +938,7 @@ impl SyntaxExtension {
937
938
cx. dcx ( ) . span_delayed_bug ( span, "expanded a dummy bang macro" ) ,
938
939
) )
939
940
}
940
- SyntaxExtension :: default ( SyntaxExtensionKind :: LegacyBang ( Box :: new ( expander) ) , edition)
941
+ SyntaxExtension :: default ( SyntaxExtensionKind :: LegacyBang ( Arc :: new ( expander) ) , edition)
941
942
}
942
943
943
944
/// A dummy derive macro `#[derive(Foo)]`.
@@ -950,7 +951,7 @@ impl SyntaxExtension {
950
951
) -> Vec < Annotatable > {
951
952
Vec :: new ( )
952
953
}
953
- SyntaxExtension :: default ( SyntaxExtensionKind :: Derive ( Box :: new ( expander) ) , edition)
954
+ SyntaxExtension :: default ( SyntaxExtensionKind :: Derive ( Arc :: new ( expander) ) , edition)
954
955
}
955
956
956
957
pub fn non_macro_attr ( edition : Edition ) -> SyntaxExtension {
@@ -980,7 +981,7 @@ impl SyntaxExtension {
980
981
}
981
982
982
983
let expander = GlobDelegationExpanderImpl { trait_def_id, impl_def_id } ;
983
- SyntaxExtension :: default ( SyntaxExtensionKind :: GlobDelegation ( Box :: new ( expander) ) , edition)
984
+ SyntaxExtension :: default ( SyntaxExtensionKind :: GlobDelegation ( Arc :: new ( expander) ) , edition)
984
985
}
985
986
986
987
pub fn expn_data (
0 commit comments