Back out NativeCallable trait.
This commit is contained in:
parent
6b8c6bda42
commit
a22f338b03
@ -82,6 +82,7 @@ pub enum NativeFunctionABI {
|
|||||||
Method,
|
Method,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
/// Trait implemented by all native Rust functions that are callable by Rhai.
|
/// Trait implemented by all native Rust functions that are callable by Rhai.
|
||||||
#[cfg(not(feature = "sync"))]
|
#[cfg(not(feature = "sync"))]
|
||||||
pub trait NativeCallable {
|
pub trait NativeCallable {
|
||||||
@ -99,15 +100,16 @@ pub trait NativeCallable: Send + Sync {
|
|||||||
/// Call a native Rust function.
|
/// Call a native Rust function.
|
||||||
fn call(&self, args: &mut FnCallArgs) -> Result<Dynamic, Box<EvalAltResult>>;
|
fn call(&self, args: &mut FnCallArgs) -> Result<Dynamic, Box<EvalAltResult>>;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/// A type encapsulating a native Rust function callable by Rhai.
|
/// A type encapsulating a native Rust function callable by Rhai.
|
||||||
pub struct NativeFunction(Box<FnAny>, NativeFunctionABI);
|
pub struct NativeFunction(Box<FnAny>, NativeFunctionABI);
|
||||||
|
|
||||||
impl NativeCallable for NativeFunction {
|
impl NativeFunction {
|
||||||
fn abi(&self) -> NativeFunctionABI {
|
pub fn abi(&self) -> NativeFunctionABI {
|
||||||
self.1
|
self.1
|
||||||
}
|
}
|
||||||
fn call(&self, args: &mut FnCallArgs) -> Result<Dynamic, Box<EvalAltResult>> {
|
pub fn call(&self, args: &mut FnCallArgs) -> Result<Dynamic, Box<EvalAltResult>> {
|
||||||
(self.0)(args)
|
(self.0)(args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -126,10 +128,10 @@ impl NativeFunction {
|
|||||||
|
|
||||||
/// An external native Rust function.
|
/// An external native Rust function.
|
||||||
#[cfg(not(feature = "sync"))]
|
#[cfg(not(feature = "sync"))]
|
||||||
pub type SharedNativeFunction = Rc<Box<dyn NativeCallable>>;
|
pub type SharedNativeFunction = Rc<NativeFunction>;
|
||||||
/// An external native Rust function.
|
/// An external native Rust function.
|
||||||
#[cfg(feature = "sync")]
|
#[cfg(feature = "sync")]
|
||||||
pub type SharedNativeFunction = Arc<Box<dyn NativeCallable>>;
|
pub type SharedNativeFunction = Arc<NativeFunction>;
|
||||||
|
|
||||||
/// A type iterator function.
|
/// A type iterator function.
|
||||||
#[cfg(not(feature = "sync"))]
|
#[cfg(not(feature = "sync"))]
|
||||||
|
@ -91,7 +91,7 @@ mod utils;
|
|||||||
pub use any::Dynamic;
|
pub use any::Dynamic;
|
||||||
pub use engine::Engine;
|
pub use engine::Engine;
|
||||||
pub use error::{ParseError, ParseErrorType};
|
pub use error::{ParseError, ParseErrorType};
|
||||||
pub use fn_native::NativeCallable;
|
//pub use fn_native::NativeCallable;
|
||||||
pub use fn_register::{RegisterDynamicFn, RegisterFn, RegisterResultFn};
|
pub use fn_register::{RegisterDynamicFn, RegisterFn, RegisterResultFn};
|
||||||
pub use module::Module;
|
pub use module::Module;
|
||||||
pub use parser::{AST, INT};
|
pub use parser::{AST, INT};
|
||||||
|
@ -4,8 +4,8 @@ use crate::any::{Dynamic, Variant};
|
|||||||
use crate::calc_fn_hash;
|
use crate::calc_fn_hash;
|
||||||
use crate::engine::{Engine, FunctionsLib};
|
use crate::engine::{Engine, FunctionsLib};
|
||||||
use crate::fn_native::{
|
use crate::fn_native::{
|
||||||
FnAny, FnCallArgs, IteratorFn, NativeCallable, NativeFunction, NativeFunctionABI,
|
FnAny, FnCallArgs, IteratorFn, NativeFunction, NativeFunctionABI, NativeFunctionABI::*,
|
||||||
NativeFunctionABI::*, SharedIteratorFunction, SharedNativeFunction,
|
SharedIteratorFunction, SharedNativeFunction,
|
||||||
};
|
};
|
||||||
use crate::parser::{FnAccess, FnDef, SharedFnDef, AST};
|
use crate::parser::{FnAccess, FnDef, SharedFnDef, AST};
|
||||||
use crate::result::EvalAltResult;
|
use crate::result::EvalAltResult;
|
||||||
@ -285,7 +285,7 @@ impl Module {
|
|||||||
) -> u64 {
|
) -> u64 {
|
||||||
let hash_fn = calc_fn_hash(empty(), &name, params.iter().cloned());
|
let hash_fn = calc_fn_hash(empty(), &name, params.iter().cloned());
|
||||||
|
|
||||||
let f = Box::new(NativeFunction::from((func, abi))) as Box<dyn NativeCallable>;
|
let f = NativeFunction::from((func, abi));
|
||||||
|
|
||||||
#[cfg(not(feature = "sync"))]
|
#[cfg(not(feature = "sync"))]
|
||||||
let func = Rc::new(f);
|
let func = Rc::new(f);
|
||||||
@ -531,7 +531,7 @@ impl Module {
|
|||||||
/// let hash = module.set_fn_1("calc", |x: i64| Ok(x + 1));
|
/// let hash = module.set_fn_1("calc", |x: i64| Ok(x + 1));
|
||||||
/// assert!(module.get_fn(hash).is_some());
|
/// assert!(module.get_fn(hash).is_some());
|
||||||
/// ```
|
/// ```
|
||||||
pub fn get_fn(&self, hash_fn: u64) -> Option<&Box<dyn NativeCallable>> {
|
pub fn get_fn(&self, hash_fn: u64) -> Option<&NativeFunction> {
|
||||||
self.functions.get(&hash_fn).map(|(_, _, _, v)| v.as_ref())
|
self.functions.get(&hash_fn).map(|(_, _, _, v)| v.as_ref())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -543,7 +543,7 @@ impl Module {
|
|||||||
&mut self,
|
&mut self,
|
||||||
name: &str,
|
name: &str,
|
||||||
hash_fn_native: u64,
|
hash_fn_native: u64,
|
||||||
) -> Result<&Box<dyn NativeCallable>, Box<EvalAltResult>> {
|
) -> Result<&NativeFunction, Box<EvalAltResult>> {
|
||||||
self.all_functions
|
self.all_functions
|
||||||
.get(&hash_fn_native)
|
.get(&hash_fn_native)
|
||||||
.map(|f| f.as_ref())
|
.map(|f| f.as_ref())
|
||||||
|
@ -15,7 +15,6 @@ use crate::utils::StaticVec;
|
|||||||
use crate::stdlib::{
|
use crate::stdlib::{
|
||||||
boxed::Box,
|
boxed::Box,
|
||||||
iter::empty,
|
iter::empty,
|
||||||
mem,
|
|
||||||
string::{String, ToString},
|
string::{String, ToString},
|
||||||
vec,
|
vec,
|
||||||
vec::Vec,
|
vec::Vec,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Module containing all built-in _packages_ available to Rhai, plus facilities to define custom packages.
|
//! Module containing all built-in _packages_ available to Rhai, plus facilities to define custom packages.
|
||||||
|
|
||||||
use crate::fn_native::{NativeCallable, SharedIteratorFunction};
|
use crate::fn_native::{NativeFunction, SharedIteratorFunction};
|
||||||
use crate::module::Module;
|
use crate::module::Module;
|
||||||
use crate::utils::StaticVec;
|
use crate::utils::StaticVec;
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ impl PackagesCollection {
|
|||||||
self.packages.iter().any(|p| p.contains_fn(hash))
|
self.packages.iter().any(|p| p.contains_fn(hash))
|
||||||
}
|
}
|
||||||
/// Get specified function via its hash key.
|
/// Get specified function via its hash key.
|
||||||
pub fn get_fn(&self, hash: u64) -> Option<&Box<dyn NativeCallable>> {
|
pub fn get_fn(&self, hash: u64) -> Option<&NativeFunction> {
|
||||||
self.packages
|
self.packages
|
||||||
.iter()
|
.iter()
|
||||||
.map(|p| p.get_fn(hash))
|
.map(|p| p.get_fn(hash))
|
||||||
|
Loading…
Reference in New Issue
Block a user