Refine Module::iter_script_fn_info.
This commit is contained in:
parent
2f6bb643aa
commit
44f8d9e429
@ -8,8 +8,8 @@ Breaking changes
|
|||||||
----------------
|
----------------
|
||||||
|
|
||||||
* `AST::iter_functions` now returns an iterator instead of taking a closure.
|
* `AST::iter_functions` now returns an iterator instead of taking a closure.
|
||||||
* `Module::iter_script_fn_info` is removed and merged into `Module::iter_script_fn`.
|
|
||||||
* `Module::get_script_function_by_signature` renamed to `Module::get_script_fn` and returns `&<Shared<ScriptFnDef>>`.
|
* `Module::get_script_function_by_signature` renamed to `Module::get_script_fn` and returns `&<Shared<ScriptFnDef>>`.
|
||||||
|
* `Module::num_fn`, `Module::num_var` and `Module::num_iter` are removed and merged into `Module::count`.
|
||||||
* The `merge_namespaces` parameter to `Module::eval_ast_as_new` is removed and now defaults to `true`.
|
* The `merge_namespaces` parameter to `Module::eval_ast_as_new` is removed and now defaults to `true`.
|
||||||
* `GlobalFileModuleResolver` is removed because its performance gain over the `FileModuleResolver` is no longer very significant.
|
* `GlobalFileModuleResolver` is removed because its performance gain over the `FileModuleResolver` is no longer very significant.
|
||||||
* The following `EvalAltResult` variants are removed and merged into `EvalAltResult::ErrorMismatchDataType`: `ErrorCharMismatch`, `ErrorNumericIndexExpr`, `ErrorStringIndexExpr`, `ErrorImportExpr`, `ErrorLogicGuard`, `ErrorBooleanArgMismatch`
|
* The following `EvalAltResult` variants are removed and merged into `EvalAltResult::ErrorMismatchDataType`: `ErrorCharMismatch`, `ErrorNumericIndexExpr`, `ErrorStringIndexExpr`, `ErrorImportExpr`, `ErrorLogicGuard`, `ErrorBooleanArgMismatch`
|
||||||
|
@ -663,7 +663,7 @@ impl Engine {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
// If new functions are defined within the eval string, it is an error
|
// If new functions are defined within the eval string, it is an error
|
||||||
if ast.lib().num_fn() != 0 {
|
if ast.lib().count().0 != 0 {
|
||||||
return Err(ParseErrorType::WrongFnDefinition.into());
|
return Err(ParseErrorType::WrongFnDefinition.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1228,17 +1228,13 @@ impl Module {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the number of variables in the module.
|
/// Get the number of variables, functions and type iterators in the module.
|
||||||
pub fn num_var(&self) -> usize {
|
pub fn count(&self) -> (usize, usize, usize) {
|
||||||
self.variables.len()
|
(
|
||||||
}
|
self.variables.len(),
|
||||||
/// Get the number of functions in the module.
|
self.variables.len(),
|
||||||
pub fn num_fn(&self) -> usize {
|
self.variables.len(),
|
||||||
self.variables.len()
|
)
|
||||||
}
|
|
||||||
/// Get the number of type iterators in the module.
|
|
||||||
pub fn num_iter(&self) -> usize {
|
|
||||||
self.variables.len()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get an iterator to the variables in the module.
|
/// Get an iterator to the variables in the module.
|
||||||
@ -1252,8 +1248,14 @@ impl Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Get an iterator over all script-defined functions in the module.
|
/// Get an iterator over all script-defined functions in the module.
|
||||||
|
///
|
||||||
|
/// Function metadata includes:
|
||||||
|
/// 1) Access mode (`FnAccess::Public` or `FnAccess::Private`).
|
||||||
|
/// 2) Function name (as string slice).
|
||||||
|
/// 3) Number of parameters.
|
||||||
|
/// 4) Shared reference to function definition `ScriptFnDef`.
|
||||||
#[cfg(not(feature = "no_function"))]
|
#[cfg(not(feature = "no_function"))]
|
||||||
pub fn iter_script_fn<'a>(
|
pub(crate) fn iter_script_fn<'a>(
|
||||||
&'a self,
|
&'a self,
|
||||||
) -> impl Iterator<Item = (FnAccess, &str, usize, Shared<ScriptFnDef>)> + 'a {
|
) -> impl Iterator<Item = (FnAccess, &str, usize, Shared<ScriptFnDef>)> + 'a {
|
||||||
self.functions
|
self.functions
|
||||||
@ -1267,6 +1269,38 @@ impl Module {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get an iterator over all script-defined functions in the module.
|
||||||
|
///
|
||||||
|
/// Function metadata includes:
|
||||||
|
/// 1) Access mode (`FnAccess::Public` or `FnAccess::Private`).
|
||||||
|
/// 2) Function name (as string slice).
|
||||||
|
/// 3) Number of parameters.
|
||||||
|
#[cfg(not(feature = "no_function"))]
|
||||||
|
#[cfg(not(feature = "internals"))]
|
||||||
|
pub fn iter_script_fn_info(&self) -> impl Iterator<Item = (FnAccess, &str, usize)> {
|
||||||
|
self.functions
|
||||||
|
.values()
|
||||||
|
.filter(|(_, _, _, _, f)| f.is_script())
|
||||||
|
.map(|(name, access, num_params, _, _)| (*access, name.as_str(), *num_params))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get an iterator over all script-defined functions in the module.
|
||||||
|
///
|
||||||
|
/// Function metadata includes:
|
||||||
|
/// 1) Access mode (`FnAccess::Public` or `FnAccess::Private`).
|
||||||
|
/// 2) Function name (as string slice).
|
||||||
|
/// 3) Number of parameters.
|
||||||
|
/// 4) _[INTERNALS]_ Shared reference to function definition `ScriptFnDef`.
|
||||||
|
/// Exported under the internals feature only.
|
||||||
|
#[cfg(not(feature = "no_function"))]
|
||||||
|
#[cfg(feature = "internals")]
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn iter_script_fn_info(
|
||||||
|
&self,
|
||||||
|
) -> impl Iterator<Item = (FnAccess, &str, usize, Shared<ScriptFnDef>)> {
|
||||||
|
self.iter_script_fn()
|
||||||
|
}
|
||||||
|
|
||||||
/// Create a new `Module` by evaluating an `AST`.
|
/// Create a new `Module` by evaluating an `AST`.
|
||||||
///
|
///
|
||||||
/// The entire `AST` is encapsulated into each function, allowing functions
|
/// The entire `AST` is encapsulated into each function, allowing functions
|
||||||
|
Loading…
Reference in New Issue
Block a user