From: Maybe Waffle Date: Thu, 27 Jan 2022 20:53:49 +0000 (+0300) Subject: Use `crate_limits` query in macro expansion X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=81211f538ccfbcd1cfb83dc0ad29c7577ad74fa1;p=rust.git Use `crate_limits` query in macro expansion --- diff --git a/crates/hir_def/src/body.rs b/crates/hir_def/src/body.rs index 505b07cc8ac..8488b4f0d03 100644 --- a/crates/hir_def/src/body.rs +++ b/crates/hir_def/src/body.rs @@ -54,12 +54,6 @@ pub struct Expander { recursion_limit: usize, } -#[cfg(test)] -static EXPANSION_RECURSION_LIMIT: Limit = Limit::new(32); - -#[cfg(not(test))] -static EXPANSION_RECURSION_LIMIT: Limit = Limit::new(128); - impl CfgExpander { pub(crate) fn new( db: &dyn DefDatabase, @@ -101,7 +95,7 @@ pub fn enter_expand( db: &dyn DefDatabase, macro_call: ast::MacroCall, ) -> Result>, UnresolvedMacro> { - if EXPANSION_RECURSION_LIMIT.check(self.recursion_limit + 1).is_err() { + if self.recursion_limit(db).check(self.recursion_limit + 1).is_err() { cov_mark::hit!(your_stack_belongs_to_me); return Ok(ExpandResult::str_err( "reached recursion limit during macro expansion".into(), @@ -222,6 +216,17 @@ fn ast_id(&self, item: &N) -> AstId { let file_local_id = self.ast_id_map.ast_id(item); AstId::new(self.current_file_id, file_local_id) } + + fn recursion_limit(&self, db: &dyn DefDatabase) -> Limit { + let limit = db.crate_limits(self.cfg_expander.krate).recursion_limit as _; + + #[cfg(not(test))] + return Limit::new(limit); + + // Without this, `body::tests::your_stack_belongs_to_me` stack-overflows in debug + #[cfg(test)] + return Limit::new(std::cmp::min(32, limit)); + } } #[derive(Debug)]