Hard code constant checking.
This commit is contained in:
@@ -74,10 +74,7 @@ impl Engine {
|
||||
///
|
||||
/// [`Position`] in [`EvalAltResult`][crate::EvalAltResult] is always [`NONE`][Position::NONE]
|
||||
/// and should be set afterwards.
|
||||
pub(crate) fn raise_err_if_over_data_size_limit(
|
||||
&self,
|
||||
(_arr, _map, s): (usize, usize, usize),
|
||||
) -> RhaiResultOf<()> {
|
||||
pub(crate) fn throw_on_size(&self, (_arr, _map, s): (usize, usize, usize)) -> RhaiResultOf<()> {
|
||||
if self
|
||||
.limits
|
||||
.max_string_len
|
||||
@@ -127,9 +124,10 @@ impl Engine {
|
||||
|
||||
let sizes = value.borrow().calc_data_sizes(true);
|
||||
|
||||
self.raise_err_if_over_data_size_limit(sizes)
|
||||
.map(|_| value)
|
||||
.map_err(|err| err.fill_position(pos))
|
||||
self.throw_on_size(sizes)
|
||||
.map_err(|err| err.fill_position(pos))?;
|
||||
|
||||
Ok(value)
|
||||
}
|
||||
|
||||
/// Raise an error if the size of a [`Dynamic`] is out of limits (if any).
|
||||
|
@@ -329,7 +329,7 @@ impl Engine {
|
||||
total_data_sizes.1 + val_sizes.1,
|
||||
total_data_sizes.2 + val_sizes.2,
|
||||
);
|
||||
self.raise_err_if_over_data_size_limit(total_data_sizes)
|
||||
self.throw_on_size(total_data_sizes)
|
||||
.map_err(|err| err.fill_position(item_expr.position()))?;
|
||||
}
|
||||
|
||||
@@ -360,7 +360,7 @@ impl Engine {
|
||||
total_data_sizes.1 + delta.1,
|
||||
total_data_sizes.2 + delta.2,
|
||||
);
|
||||
self.raise_err_if_over_data_size_limit(total_data_sizes)
|
||||
self.throw_on_size(total_data_sizes)
|
||||
.map_err(|err| err.fill_position(value_expr.position()))?;
|
||||
}
|
||||
|
||||
|
@@ -142,7 +142,7 @@ impl Engine {
|
||||
let args = &mut [&mut *lock_guard, &mut new_val];
|
||||
|
||||
if self.fast_operators() {
|
||||
if let Some(func) =
|
||||
if let Some((func, ctx)) =
|
||||
get_builtin_op_assignment_fn(op_assign_token.clone(), args[0], args[1])
|
||||
{
|
||||
// Built-in found
|
||||
@@ -152,7 +152,11 @@ impl Engine {
|
||||
global.level += 1;
|
||||
let global = &*RestoreOnDrop::lock(global, move |g| g.level = orig_level);
|
||||
|
||||
let context = (self, op, None, global, *op_pos).into();
|
||||
let context = if ctx {
|
||||
Some((self, op, None, global, *op_pos).into())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
return func(context, args).map(|_| ());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user