@@ -12,11 +12,15 @@ use syntax::{
12
12
use triomphe:: Arc ;
13
13
14
14
use crate :: {
15
- ast_id_map:: AstIdMap , builtin_attr_macro:: pseudo_derive_attr_expansion,
16
- builtin_fn_macro:: EagerExpander , fixup, hygiene:: HygieneFrame , tt, AstId , BuiltinAttrExpander ,
17
- BuiltinDeriveExpander , BuiltinFnLikeExpander , EagerCallInfo , ExpandError , ExpandResult ,
18
- ExpandTo , HirFileId , HirFileIdRepr , MacroCallId , MacroCallKind , MacroCallLoc , MacroDefId ,
19
- MacroDefKind , MacroFile , ProcMacroExpander ,
15
+ ast_id_map:: AstIdMap ,
16
+ builtin_attr_macro:: pseudo_derive_attr_expansion,
17
+ builtin_fn_macro:: EagerExpander ,
18
+ fixup,
19
+ hygiene:: HygieneFrame ,
20
+ name:: { name, AsName } ,
21
+ tt, AstId , BuiltinAttrExpander , BuiltinDeriveExpander , BuiltinFnLikeExpander , EagerCallInfo ,
22
+ ExpandError , ExpandResult , ExpandTo , HirFileId , HirFileIdRepr , MacroCallId , MacroCallKind ,
23
+ MacroCallLoc , MacroDefId , MacroDefKind , MacroFile , ProcMacroExpander ,
20
24
} ;
21
25
22
26
/// Total limit on the number of tokens produced by any macro invocation.
@@ -614,9 +618,25 @@ fn macro_expand(db: &dyn ExpandDatabase, id: MacroCallId) -> ExpandResult<Arc<tt
614
618
err = error. clone ( ) . or ( err) ;
615
619
}
616
620
617
- // Set a hard limit for the expanded tt
618
- if let Err ( value) = check_tt_count ( & tt) {
619
- return value;
621
+ // Skip checking token tree limit for include! macro call
622
+ let skip_check_tt_count = match loc. kind {
623
+ MacroCallKind :: FnLike { ast_id, expand_to : _ } => {
624
+ if let Some ( name_ref) =
625
+ ast_id. to_node ( db) . path ( ) . and_then ( |p| p. segment ( ) ) . and_then ( |s| s. name_ref ( ) )
626
+ {
627
+ name_ref. as_name ( ) == name ! ( include)
628
+ } else {
629
+ false
630
+ }
631
+ }
632
+ _ => false ,
633
+ } ;
634
+
635
+ if !skip_check_tt_count {
636
+ // Set a hard limit for the expanded tt
637
+ if let Err ( value) = check_tt_count ( & tt) {
638
+ return value;
639
+ }
620
640
}
621
641
622
642
ExpandResult { value : Arc :: new ( tt) , err }
0 commit comments