diff options
Diffstat (limited to 'src/stages/intermediate.rs')
-rw-r--r-- | src/stages/intermediate.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/stages/intermediate.rs b/src/stages/intermediate.rs index 07773a0..8cabe26 100644 --- a/src/stages/intermediate.rs +++ b/src/stages/intermediate.rs @@ -438,6 +438,12 @@ impl IntermediateParser { unreachable!("Uncaught duplicate macro argument name '{name}'"); }; } + // Test the current recursion depth. + if self.environment_stack.len() == MAX_RECURSION_DEPTH { + let error = IntermediateError::MaxRecursionDepthExceeded; + self.errors.push(Tracked::from(error, source.clone())); + return None; + } // Invoke the macro once. let env = Environment { arguments: argument_map, id: next_id!() }; self.environment_stack.push(env); |