Add new &Module parameter to native functions.

This commit is contained in:
Stephen Chung
2020-07-06 12:04:02 +08:00
parent 495d202af4
commit ea86888638
10 changed files with 107 additions and 99 deletions

View File

@@ -661,7 +661,7 @@ impl Engine {
}
// Run external function
let result = func.get_native_fn()(self, args)?;
let result = func.get_native_fn()(self, lib, args)?;
// Restore the original reference
restore_first_arg(old_this_ptr, args);
@@ -1616,7 +1616,7 @@ impl Engine {
.or_else(|| self.packages.get_fn(hash_fn))
{
// Overriding exact implementation
func(self, &mut [lhs_ptr, &mut rhs_val])?;
func(self, lib, &mut [lhs_ptr, &mut rhs_val])?;
} else if run_builtin_op_assignment(op, lhs_ptr, &rhs_val)?.is_none() {
// Not built in, map to `var = var op rhs`
let op = &op[..op.len() - 1]; // extract operator without =
@@ -1885,9 +1885,8 @@ impl Engine {
)
.map_err(|err| err.new_position(*pos))
}
Ok(f) => {
f.get_native_fn()(self, args.as_mut()).map_err(|err| err.new_position(*pos))
}
Ok(f) => f.get_native_fn()(self, lib, args.as_mut())
.map_err(|err| err.new_position(*pos)),
Err(err) => match *err {
EvalAltResult::ErrorFunctionNotFound(_, _) if def_val.is_some() => {
Ok(def_val.clone().unwrap())