Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-expand/src/db.rs')
-rw-r--r--crates/hir-expand/src/db.rs36
1 files changed, 28 insertions, 8 deletions
diff --git a/crates/hir-expand/src/db.rs b/crates/hir-expand/src/db.rs
index 5292a5fa1b..204227e338 100644
--- a/crates/hir-expand/src/db.rs
+++ b/crates/hir-expand/src/db.rs
@@ -12,11 +12,15 @@ use syntax::{
use triomphe::Arc;
use crate::{
- ast_id_map::AstIdMap, builtin_attr_macro::pseudo_derive_attr_expansion,
- builtin_fn_macro::EagerExpander, fixup, hygiene::HygieneFrame, tt, AstId, BuiltinAttrExpander,
- BuiltinDeriveExpander, BuiltinFnLikeExpander, EagerCallInfo, ExpandError, ExpandResult,
- ExpandTo, HirFileId, HirFileIdRepr, MacroCallId, MacroCallKind, MacroCallLoc, MacroDefId,
- MacroDefKind, MacroFile, ProcMacroExpander,
+ ast_id_map::AstIdMap,
+ builtin_attr_macro::pseudo_derive_attr_expansion,
+ builtin_fn_macro::EagerExpander,
+ fixup,
+ hygiene::HygieneFrame,
+ name::{name, AsName},
+ tt, AstId, BuiltinAttrExpander, BuiltinDeriveExpander, BuiltinFnLikeExpander, EagerCallInfo,
+ ExpandError, ExpandResult, ExpandTo, HirFileId, HirFileIdRepr, MacroCallId, MacroCallKind,
+ MacroCallLoc, MacroDefId, MacroDefKind, MacroFile, ProcMacroExpander,
};
/// 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
err = error.clone().or(err);
}
- // Set a hard limit for the expanded tt
- if let Err(value) = check_tt_count(&tt) {
- return value;
+ // Skip checking token tree limit for include! macro call
+ let skip_check_tt_count = match loc.kind {
+ MacroCallKind::FnLike { ast_id, expand_to: _ } => {
+ if let Some(name_ref) =
+ ast_id.to_node(db).path().and_then(|p| p.segment()).and_then(|s| s.name_ref())
+ {
+ name_ref.as_name() == name!(include)
+ } else {
+ false
+ }
+ }
+ _ => false,
+ };
+
+ if !skip_check_tt_count {
+ // Set a hard limit for the expanded tt
+ if let Err(value) = check_tt_count(&tt) {
+ return value;
+ }
}
ExpandResult { value: Arc::new(tt), err }