summaryrefslogtreecommitdiff
path: root/src/stages/intermediate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/stages/intermediate.rs')
-rw-r--r--src/stages/intermediate.rs6
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);