Fix function exit trigger and add function enter trigger.
This commit is contained in:
@@ -191,8 +191,8 @@ impl Engine {
|
||||
let fn_name = crate::engine::FN_IDX_SET;
|
||||
|
||||
if let Err(err) = self.exec_fn_call(
|
||||
global, state, lib, fn_name, hash_set, args, is_ref_mut, true,
|
||||
root_pos, None, level,
|
||||
None, global, state, lib, fn_name, hash_set, args, is_ref_mut,
|
||||
true, root_pos, level,
|
||||
) {
|
||||
// Just ignore if there is no index setter
|
||||
if !matches!(*err, ERR::ErrorFunctionNotFound(_, _)) {
|
||||
@@ -244,8 +244,8 @@ impl Engine {
|
||||
let fn_name = crate::engine::FN_IDX_SET;
|
||||
|
||||
self.exec_fn_call(
|
||||
global, state, lib, fn_name, hash_set, args, is_ref_mut, true,
|
||||
root_pos, None, level,
|
||||
None, global, state, lib, fn_name, hash_set, args, is_ref_mut,
|
||||
true, root_pos, level,
|
||||
)?;
|
||||
}
|
||||
|
||||
@@ -351,8 +351,8 @@ impl Engine {
|
||||
let args = &mut [target.as_mut()];
|
||||
let (mut orig_val, _) = self
|
||||
.exec_fn_call(
|
||||
global, state, lib, getter, hash, args, is_ref_mut, true, *pos,
|
||||
None, level,
|
||||
None, global, state, lib, getter, hash, args, is_ref_mut, true,
|
||||
*pos, level,
|
||||
)
|
||||
.or_else(|err| match *err {
|
||||
// Try an indexer if property does not exist
|
||||
@@ -392,7 +392,7 @@ impl Engine {
|
||||
let hash = crate::ast::FnCallHashes::from_native(*hash_set);
|
||||
let args = &mut [target.as_mut(), &mut new_val];
|
||||
self.exec_fn_call(
|
||||
global, state, lib, setter, hash, args, is_ref_mut, true, *pos, None,
|
||||
None, global, state, lib, setter, hash, args, is_ref_mut, true, *pos,
|
||||
level,
|
||||
)
|
||||
.or_else(|err| match *err {
|
||||
@@ -405,8 +405,8 @@ impl Engine {
|
||||
let pos = Position::NONE;
|
||||
|
||||
self.exec_fn_call(
|
||||
global, state, lib, fn_name, hash_set, args, is_ref_mut, true,
|
||||
pos, None, level,
|
||||
None, global, state, lib, fn_name, hash_set, args, is_ref_mut,
|
||||
true, pos, level,
|
||||
)
|
||||
.map_err(
|
||||
|idx_err| match *idx_err {
|
||||
@@ -429,7 +429,7 @@ impl Engine {
|
||||
let hash = crate::ast::FnCallHashes::from_native(*hash_get);
|
||||
let args = &mut [target.as_mut()];
|
||||
self.exec_fn_call(
|
||||
global, state, lib, getter, hash, args, is_ref_mut, true, *pos, None,
|
||||
None, global, state, lib, getter, hash, args, is_ref_mut, true, *pos,
|
||||
level,
|
||||
)
|
||||
.map_or_else(
|
||||
@@ -537,8 +537,8 @@ impl Engine {
|
||||
// Assume getters are always pure
|
||||
let (mut val, _) = self
|
||||
.exec_fn_call(
|
||||
global, state, lib, getter, hash_get, args, is_ref_mut,
|
||||
true, pos, None, level,
|
||||
None, global, state, lib, getter, hash_get, args,
|
||||
is_ref_mut, true, pos, level,
|
||||
)
|
||||
.or_else(|err| match *err {
|
||||
// Try an indexer if property does not exist
|
||||
@@ -585,8 +585,8 @@ impl Engine {
|
||||
let mut arg_values = [target.as_mut(), val];
|
||||
let args = &mut arg_values;
|
||||
self.exec_fn_call(
|
||||
global, state, lib, setter, hash_set, args, is_ref_mut,
|
||||
true, pos, None, level,
|
||||
None, global, state, lib, setter, hash_set, args,
|
||||
is_ref_mut, true, pos, level,
|
||||
)
|
||||
.or_else(
|
||||
|err| match *err {
|
||||
@@ -600,8 +600,8 @@ impl Engine {
|
||||
global.hash_idx_set(),
|
||||
);
|
||||
self.exec_fn_call(
|
||||
global, state, lib, fn_name, hash_set, args,
|
||||
is_ref_mut, true, pos, None, level,
|
||||
None, global, state, lib, fn_name, hash_set,
|
||||
args, is_ref_mut, true, pos, level,
|
||||
)
|
||||
.or_else(|idx_err| match *idx_err {
|
||||
ERR::ErrorIndexingType(_, _) => {
|
||||
@@ -767,7 +767,7 @@ impl Engine {
|
||||
(crate::FnArgsVec::with_capacity(args.len()), Position::NONE),
|
||||
|(mut values, mut pos), expr| -> RhaiResultOf<_> {
|
||||
let (value, arg_pos) = self.get_arg_value(
|
||||
scope, global, state, lib, this_ptr, level, expr, constants,
|
||||
scope, global, state, lib, this_ptr, expr, constants, level,
|
||||
)?;
|
||||
if values.is_empty() {
|
||||
pos = arg_pos;
|
||||
@@ -813,7 +813,7 @@ impl Engine {
|
||||
(crate::FnArgsVec::with_capacity(args.len()), Position::NONE),
|
||||
|(mut values, mut pos), expr| -> RhaiResultOf<_> {
|
||||
let (value, arg_pos) = self.get_arg_value(
|
||||
scope, global, state, lib, this_ptr, level, expr, constants,
|
||||
scope, global, state, lib, this_ptr, expr, constants, level,
|
||||
)?;
|
||||
if values.is_empty() {
|
||||
pos = arg_pos
|
||||
@@ -1079,7 +1079,7 @@ impl Engine {
|
||||
let pos = Position::NONE;
|
||||
|
||||
self.exec_fn_call(
|
||||
global, state, lib, fn_name, hash_get, args, true, true, pos, None, level,
|
||||
None, global, state, lib, fn_name, hash_get, args, true, true, pos, level,
|
||||
)
|
||||
.map(|(v, _)| v.into())
|
||||
}
|
||||
|
Reference in New Issue
Block a user