diff --git a/src/optimize.rs b/src/optimize.rs index 1dda360d..70ad4e6e 100644 --- a/src/optimize.rs +++ b/src/optimize.rs @@ -2,9 +2,7 @@ use crate::ast::{Expr, OpAssignment, Stmt}; use crate::dynamic::AccessMode; -use crate::engine::{ - KEYWORD_DEBUG, KEYWORD_EVAL, KEYWORD_FN_PTR, KEYWORD_IS_SHARED, KEYWORD_PRINT, KEYWORD_TYPE_OF, -}; +use crate::engine::{KEYWORD_DEBUG, KEYWORD_EVAL, KEYWORD_FN_PTR, KEYWORD_PRINT, KEYWORD_TYPE_OF}; use crate::fn_builtin::get_builtin_binary_op_fn; use crate::fn_hash::get_hasher; use crate::token::Token; @@ -20,6 +18,9 @@ use std::{ mem, }; +#[cfg(not(feature = "no_closure"))] +use crate::engine::KEYWORD_IS_SHARED; + /// Level of optimization performed. #[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)] pub enum OptimizationLevel { @@ -956,6 +957,7 @@ fn optimize_expr(expr: &mut Expr, state: &mut OptimizerState, _chaining: bool) { let result = match x.name.as_str() { KEYWORD_TYPE_OF if arg_values.len() == 1 => Some(state.engine.map_type_name(arg_values[0].type_name()).into()), + #[cfg(not(feature = "no_closure"))] KEYWORD_IS_SHARED if arg_values.len() == 1 => Some(Dynamic::FALSE), // Overloaded operators can override built-in. _ if x.args.len() == 2 && !state.has_native_fn(x.hashes.native, arg_types.as_ref()) => { @@ -1007,6 +1009,7 @@ fn optimize_expr(expr: &mut Expr, state: &mut OptimizerState, _chaining: bool) { let result = match x.name.as_str() { KEYWORD_TYPE_OF if arg_values.len() == 1 => Some(state.engine.map_type_name(arg_values[0].type_name()).into()), + #[cfg(not(feature = "no_closure"))] KEYWORD_IS_SHARED if arg_values.len() == 1 => Some(Dynamic::FALSE), _ => state.call_fn_with_constant_arguments(x.name.as_ref(), arg_values) }; diff --git a/src/parse.rs b/src/parse.rs index 4ec4a8b9..657ce113 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -17,8 +17,8 @@ use crate::token::{ is_keyword_function, is_valid_identifier, Token, TokenStream, TokenizerControl, }; use crate::{ - calc_fn_hash, calc_qualified_fn_hash, calc_qualified_var_hash, Dynamic, Engine, Identifier, - LexError, ParseError, ParseErrorType, Position, Scope, Shared, StaticVec, AST, + calc_fn_hash, calc_qualified_fn_hash, calc_qualified_var_hash, Engine, Identifier, LexError, + ParseError, ParseErrorType, Position, Scope, Shared, StaticVec, AST, }; #[cfg(feature = "no_std")] use std::prelude::v1::*; @@ -806,7 +806,7 @@ fn parse_map_literal( settings.pos = eat_token(input, Token::MapStart); let mut map: StaticVec<(Ident, Expr)> = Default::default(); - let mut template: BTreeMap = Default::default(); + let mut template: BTreeMap = Default::default(); loop { const MISSING_RBRACE: &str = "to end this object map literal";