From 6061439ede1e0feda049a251ae3fa1c942cb9221 Mon Sep 17 00:00:00 2001 From: Stephen Chung Date: Sun, 12 Sep 2021 13:31:37 +0800 Subject: [PATCH] Use StaticVec for function resolution caches for the common case where no modules are used. --- src/engine.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/engine.rs b/src/engine.rs index bc7ff71c..4f4ce8bb 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -662,18 +662,18 @@ pub struct EvalState { pub num_operations: u64, /// Number of modules loaded. pub num_modules: usize, + /// Stack of function resolution caches. + fn_resolution_caches: StaticVec, /// Embedded module resolver. #[cfg(not(feature = "no_module"))] pub embedded_module_resolver: Option>, - /// Stack of function resolution caches. - fn_resolution_caches: Vec, } impl EvalState { /// Create a new [`EvalState`]. #[inline(always)] #[must_use] - pub const fn new() -> Self { + pub fn new() -> Self { Self { source: None, always_search_scope: false, @@ -682,7 +682,7 @@ impl EvalState { num_modules: 0, #[cfg(not(feature = "no_module"))] embedded_module_resolver: None, - fn_resolution_caches: Vec::new(), + fn_resolution_caches: StaticVec::new(), } } /// Is the state currently at global (root) level? @@ -697,7 +697,7 @@ impl EvalState { pub fn fn_resolution_cache_mut(&mut self) -> &mut FnResolutionCache { if self.fn_resolution_caches.is_empty() { // Push a new function resolution cache if the stack is empty - self.fn_resolution_caches.push(Default::default()); + self.push_fn_resolution_cache(); } self.fn_resolution_caches .last_mut() @@ -713,7 +713,7 @@ impl EvalState { /// /// # Panics /// - /// Panics if there are no more function resolution cache in the stack. + /// Panics if there is no more function resolution cache in the stack. #[inline(always)] pub fn pop_fn_resolution_cache(&mut self) { self.fn_resolution_caches