Avoid creating new Scope.
This commit is contained in:
parent
dd2a0a64aa
commit
6d64a75bd2
@ -389,6 +389,11 @@ impl Engine {
|
|||||||
)?,
|
)?,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "debugging")]
|
||||||
|
let scope2 = &mut Scope::new();
|
||||||
|
#[cfg(not(feature = "debugging"))]
|
||||||
|
let scope2 = ();
|
||||||
|
|
||||||
match lhs {
|
match lhs {
|
||||||
// id.??? or id[???]
|
// id.??? or id[???]
|
||||||
Expr::Variable(.., var_pos) => {
|
Expr::Variable(.., var_pos) => {
|
||||||
@ -399,7 +404,7 @@ impl Engine {
|
|||||||
let target = &mut self.search_namespace(global, caches, scope, this_ptr, lhs)?;
|
let target = &mut self.search_namespace(global, caches, scope, this_ptr, lhs)?;
|
||||||
|
|
||||||
self.eval_dot_index_chain_raw(
|
self.eval_dot_index_chain_raw(
|
||||||
global, caches, None, lhs, expr, target, rhs, idx_values, new_val,
|
global, caches, scope2, None, lhs, expr, target, rhs, idx_values, new_val,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// {expr}.??? = ??? or {expr}[???] = ???
|
// {expr}.??? = ??? or {expr}[???] = ???
|
||||||
@ -412,7 +417,8 @@ impl Engine {
|
|||||||
let obj_ptr = &mut value.into();
|
let obj_ptr = &mut value.into();
|
||||||
|
|
||||||
self.eval_dot_index_chain_raw(
|
self.eval_dot_index_chain_raw(
|
||||||
global, caches, this_ptr, lhs_expr, expr, obj_ptr, rhs, idx_values, new_val,
|
global, caches, scope2, this_ptr, lhs_expr, expr, obj_ptr, rhs, idx_values,
|
||||||
|
new_val,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -523,6 +529,8 @@ impl Engine {
|
|||||||
&self,
|
&self,
|
||||||
global: &mut GlobalRuntimeState,
|
global: &mut GlobalRuntimeState,
|
||||||
caches: &mut Caches,
|
caches: &mut Caches,
|
||||||
|
#[cfg(feature = "debugging")] scope: &mut Scope,
|
||||||
|
#[cfg(not(feature = "debugging"))] scope: (),
|
||||||
this_ptr: Option<&mut Dynamic>,
|
this_ptr: Option<&mut Dynamic>,
|
||||||
root: &Expr,
|
root: &Expr,
|
||||||
parent: &Expr,
|
parent: &Expr,
|
||||||
@ -537,9 +545,6 @@ impl Engine {
|
|||||||
#[cfg(feature = "debugging")]
|
#[cfg(feature = "debugging")]
|
||||||
let mut this_ptr = this_ptr;
|
let mut this_ptr = this_ptr;
|
||||||
|
|
||||||
#[cfg(feature = "debugging")]
|
|
||||||
let scope = &mut Scope::new();
|
|
||||||
|
|
||||||
match ChainType::from(parent) {
|
match ChainType::from(parent) {
|
||||||
#[cfg(not(feature = "no_index"))]
|
#[cfg(not(feature = "no_index"))]
|
||||||
ChainType::Indexing => {
|
ChainType::Indexing => {
|
||||||
@ -570,8 +575,8 @@ impl Engine {
|
|||||||
let obj_ptr = &mut obj;
|
let obj_ptr = &mut obj;
|
||||||
|
|
||||||
match self.eval_dot_index_chain_raw(
|
match self.eval_dot_index_chain_raw(
|
||||||
global, caches, this_ptr, root, rhs, obj_ptr, &x.rhs, idx_values,
|
global, caches, scope, this_ptr, root, rhs, obj_ptr, &x.rhs,
|
||||||
new_val,
|
idx_values, new_val,
|
||||||
) {
|
) {
|
||||||
Ok((result, true)) if is_obj_temp_val => {
|
Ok((result, true)) if is_obj_temp_val => {
|
||||||
(Some(obj.take_or_clone()), (result, true))
|
(Some(obj.take_or_clone()), (result, true))
|
||||||
@ -880,8 +885,8 @@ impl Engine {
|
|||||||
};
|
};
|
||||||
|
|
||||||
self.eval_dot_index_chain_raw(
|
self.eval_dot_index_chain_raw(
|
||||||
global, caches, _this_ptr, root, rhs, val_target, &x.rhs, idx_values,
|
global, caches, scope, _this_ptr, root, rhs, val_target, &x.rhs,
|
||||||
new_val,
|
idx_values, new_val,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// xxx.sub_lhs[expr] | xxx.sub_lhs.expr
|
// xxx.sub_lhs[expr] | xxx.sub_lhs.expr
|
||||||
@ -926,8 +931,8 @@ impl Engine {
|
|||||||
let val = &mut (&mut val).into();
|
let val = &mut (&mut val).into();
|
||||||
|
|
||||||
let (result, may_be_changed) = self.eval_dot_index_chain_raw(
|
let (result, may_be_changed) = self.eval_dot_index_chain_raw(
|
||||||
global, caches, _this_ptr, root, rhs, val, &x.rhs, idx_values,
|
global, caches, scope, _this_ptr, root, rhs, val, &x.rhs,
|
||||||
new_val,
|
idx_values, new_val,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Feed the value back via a setter just in case it has been updated
|
// Feed the value back via a setter just in case it has been updated
|
||||||
@ -994,8 +999,8 @@ impl Engine {
|
|||||||
let val = &mut val.into();
|
let val = &mut val.into();
|
||||||
|
|
||||||
self.eval_dot_index_chain_raw(
|
self.eval_dot_index_chain_raw(
|
||||||
global, caches, _this_ptr, root, rhs, val, &x.rhs, idx_values,
|
global, caches, scope, _this_ptr, root, rhs, val, &x.rhs,
|
||||||
new_val,
|
idx_values, new_val,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// xxx.module::fn_name(...) - syntax error
|
// xxx.module::fn_name(...) - syntax error
|
||||||
|
Loading…
Reference in New Issue
Block a user