Fix eval call.
This commit is contained in:
parent
cbaf095c7a
commit
4bd482352e
@ -1039,9 +1039,15 @@ impl Engine {
|
|||||||
let script = &value
|
let script = &value
|
||||||
.into_immutable_string()
|
.into_immutable_string()
|
||||||
.map_err(|typ| self.make_type_mismatch_err::<ImmutableString>(typ, pos))?;
|
.map_err(|typ| self.make_type_mismatch_err::<ImmutableString>(typ, pos))?;
|
||||||
let level = level + 1;
|
let result = self.eval_script_expr_in_place(
|
||||||
let result =
|
scope,
|
||||||
self.eval_script_expr_in_place(scope, global, state, lib, script, pos, level);
|
global,
|
||||||
|
state,
|
||||||
|
lib,
|
||||||
|
script,
|
||||||
|
pos,
|
||||||
|
level + 1,
|
||||||
|
);
|
||||||
|
|
||||||
// IMPORTANT! If the eval defines new variables in the current scope,
|
// IMPORTANT! If the eval defines new variables in the current scope,
|
||||||
// all variable offsets from this point on will be mis-aligned.
|
// all variable offsets from this point on will be mis-aligned.
|
||||||
@ -1339,7 +1345,19 @@ impl Engine {
|
|||||||
return Ok(Dynamic::UNIT);
|
return Ok(Dynamic::UNIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Backup the original state
|
||||||
|
let orig_scope_level = state.scope_level;
|
||||||
|
|
||||||
|
// Scope level is set to zero in order to retain all variables
|
||||||
|
state.scope_level = 0;
|
||||||
|
|
||||||
// Evaluate the AST
|
// Evaluate the AST
|
||||||
self.eval_global_statements(scope, global, state, statements, lib, level)
|
let result = self.eval_global_statements(scope, global, state, statements, lib, level);
|
||||||
|
|
||||||
|
// Restore original state
|
||||||
|
state.scope_level = orig_scope_level;
|
||||||
|
|
||||||
|
// Return result
|
||||||
|
result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user