MacroFile, ProcMacroExpander,
};
+/// Total limit on the number of tokens produced by any macro invocation.
+///
+/// If an invocation produces more tokens than this limit, it will not be stored in the database and
+/// an error will be emitted.
+const TOKEN_LIMIT: usize = 262144;
+
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum TokenExpander {
MacroRules(mbe::MacroRules),
let ExpandResult { value: tt, err } = macro_rules.0.expand(db, lazy_id, ¯o_arg.0);
// Set a hard limit for the expanded tt
let count = tt.count();
- if count > 262144 {
+ if count > TOKEN_LIMIT {
return ExpandResult::str_err(format!(
- "Total tokens count exceed limit : count = {}",
- count
+ "macro invocation exceeds token limit: produced {} tokens, limit is {}",
+ count, TOKEN_LIMIT,
));
}