Limit function calls depth.

This commit is contained in:
Stephen Chung
2020-03-27 14:34:01 +08:00
parent cc8554d095
commit 337a96394f
4 changed files with 150 additions and 114 deletions

View File

@@ -726,11 +726,9 @@ impl<'e> Engine<'e> {
statements
};
let mut result = ().into_dynamic();
for stmt in statements {
result = engine.eval_stmt(scope, stmt)?;
}
let result = statements.iter().try_fold(().into_dynamic(), |_, stmt| {
engine.eval_stmt(scope, stmt, 0)
})?;
if !retain_functions {
engine.clear_functions();
@@ -829,7 +827,7 @@ impl<'e> Engine<'e> {
let result = statements
.iter()
.try_fold(().into_dynamic(), |_, o| self.eval_stmt(scope, o))
.try_fold(().into_dynamic(), |_, stmt| self.eval_stmt(scope, stmt, 0))
.map(|_| ());
if !retain_functions {
@@ -889,7 +887,7 @@ impl<'e> Engine<'e> {
mut values: Vec<Dynamic>,
) -> Result<Dynamic, EvalAltResult> {
let mut values: Vec<_> = values.iter_mut().map(Dynamic::as_mut).collect();
engine.call_fn_raw(name, &mut values, None, Position::none())
engine.call_fn_raw(name, &mut values, None, Position::none(), 0)
}
call_fn_internal(self, name, args.into_vec()).and_then(|b| {