From 5a02548ebc5aca6434a763ff83df4c12a55c573a Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Wed, 13 May 2020 19:39:34 +0800 Subject: [PATCH] Allocate packages with higher functions capacity. --- examples/hello.rs | 1 - examples/repl.rs | 7 ++----- examples/rhai_runner.rs | 2 +- src/module.rs | 18 ++++++++++++++++++ src/packages/array_basic.rs | 4 ++-- src/packages/mod.rs | 2 +- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/examples/hello.rs b/examples/hello.rs index edec8cb8..af5e8b9c 100644 --- a/examples/hello.rs +++ b/examples/hello.rs @@ -1,5 +1,4 @@ use rhai::{packages::*, Engine, EvalAltResult, INT}; -use std::rc::Rc; fn main() -> Result<(), Box> { let mut engine = Engine::new_raw(); diff --git a/examples/repl.rs b/examples/repl.rs index a8763e28..f980a98e 100644 --- a/examples/repl.rs +++ b/examples/repl.rs @@ -1,12 +1,9 @@ -use rhai::{Dynamic, Engine, EvalAltResult, Scope, AST, INT}; +use rhai::{Dynamic, Engine, EvalAltResult, Scope, AST}; #[cfg(not(feature = "no_optimize"))] use rhai::OptimizationLevel; -use std::{ - io::{stdin, stdout, Write}, - iter, -}; +use std::io::{stdin, stdout, Write}; fn print_error(input: &str, err: EvalAltResult) { let lines: Vec<_> = input.trim().split('\n').collect(); diff --git a/examples/rhai_runner.rs b/examples/rhai_runner.rs index 2bc273e2..c5c5128d 100644 --- a/examples/rhai_runner.rs +++ b/examples/rhai_runner.rs @@ -3,7 +3,7 @@ use rhai::{Engine, EvalAltResult}; #[cfg(not(feature = "no_optimize"))] use rhai::OptimizationLevel; -use std::{env, fs::File, io::Read, iter, process::exit}; +use std::{env, fs::File, io::Read, process::exit}; fn eprint_error(input: &str, err: EvalAltResult) { fn eprint_line(lines: &[&str], line: usize, pos: usize, err: &str) { diff --git a/src/module.rs b/src/module.rs index d1bcabb1..5bc11d74 100644 --- a/src/module.rs +++ b/src/module.rs @@ -94,6 +94,24 @@ impl Module { Default::default() } + /// Create a new module with a specified capacity for native Rust functions. + /// + /// # Examples + /// + /// ``` + /// use rhai::Module; + /// + /// let mut module = Module::new(); + /// module.set_var("answer", 42_i64); + /// assert_eq!(module.get_var_value::("answer").unwrap(), 42); + /// ``` + pub fn new_with_capacity(capacity: usize) -> Self { + Self { + functions: HashMap::with_capacity(capacity), + ..Default::default() + } + } + /// Does a variable exist in the module? /// /// # Examples diff --git a/src/packages/array_basic.rs b/src/packages/array_basic.rs index 6ff90f39..5aed286e 100644 --- a/src/packages/array_basic.rs +++ b/src/packages/array_basic.rs @@ -17,7 +17,7 @@ fn ins(list: &mut Array, position: INT, item: T) -> FuncRetu if position <= 0 { list.insert(0, Dynamic::from(item)); } else if (position as usize) >= list.len() - 1 { - push(list, item); + push(list, item)?; } else { list.insert(position as usize, Dynamic::from(item)); } @@ -26,7 +26,7 @@ fn ins(list: &mut Array, position: INT, item: T) -> FuncRetu fn pad(list: &mut Array, len: INT, item: T) -> FuncReturn<()> { if len >= 0 { while list.len() < len as usize { - push(list, item.clone()); + push(list, item.clone())?; } } Ok(()) diff --git a/src/packages/mod.rs b/src/packages/mod.rs index a8599417..ceebf4bf 100644 --- a/src/packages/mod.rs +++ b/src/packages/mod.rs @@ -129,7 +129,7 @@ macro_rules! def_package { impl $package { pub fn new() -> Self { - let mut module = $root::Module::new(); + let mut module = $root::Module::new_with_capacity(512); ::init(&mut module); Self(module.into()) }