--- a/crates/jsonnet-evaluator/Cargo.toml +++ b/crates/jsonnet-evaluator/Cargo.toml @@ -10,6 +10,7 @@ default = ["serialized-stdlib", "faster"] serialized-stdlib = ["serde", "bincode"] # Replace some standard library functions with faster implementations +# Library works fine without this feature, but requires more memory and time for std function calls faster = [] [dependencies] --- a/crates/jsonnet-evaluator/src/evaluate.rs +++ b/crates/jsonnet-evaluator/src/evaluate.rs @@ -168,7 +168,6 @@ future_wrapper!(HashMap, FutureNewBindings); future_wrapper!(ObjValue, FutureObjValue); -#[inline(always)] pub fn evaluate_comp( context: Context, value: &impl Fn(Context) -> Result, @@ -370,7 +369,6 @@ }) } -#[inline(always)] pub fn evaluate(context: Context, expr: &LocExpr) -> Result { use Expr::*; let locexpr = expr.clone(); @@ -731,8 +729,7 @@ (ns, name) => panic!("Intristic not found: {}.{}", ns, name), }, Val::Func(f) => { - let body = #[inline(always)] - || f.evaluate(context, args, *tailstrict); + let body = || f.evaluate(context, args, *tailstrict); if *tailstrict { body()? } else { --- a/crates/jsonnet-evaluator/src/function.rs +++ b/crates/jsonnet-evaluator/src/function.rs @@ -24,7 +24,6 @@ /// /// ## Notes /// This function is always inlined for tailstrict -#[inline(always)] pub(crate) fn inline_parse_function_call( ctx: Context, body_ctx: Option, @@ -79,7 +78,6 @@ Ok(body_ctx.unwrap_or(ctx).extend(out, None, None, None)?) } -#[inline(always)] pub(crate) fn place_args( ctx: Context, body_ctx: Option, --- a/crates/jsonnet-evaluator/src/lib.rs +++ b/crates/jsonnet-evaluator/src/lib.rs @@ -2,7 +2,6 @@ #![feature(type_alias_impl_trait)] #![feature(debug_non_exhaustive)] #![allow(macro_expanded_macro_exports_accessed_by_absolute_paths)] -#![feature(stmt_expr_attributes)] mod ctx; mod dynamic; mod error; @@ -81,17 +80,14 @@ /// Global state is fine there pub(crate) static EVAL_STATE: RefCell> = RefCell::new(None) } -#[inline(always)] pub(crate) fn with_state(f: impl FnOnce(&EvaluationState) -> T) -> T { EVAL_STATE.with( - #[inline(always)] |s| f(s.borrow().as_ref().unwrap()), ) } pub(crate) fn create_error(err: Error) -> Result { with_state(|s| s.error(err)) } -#[inline(always)] pub(crate) fn push(e: LocExpr, comment: String, f: impl FnOnce() -> Result) -> Result { with_state(|s| s.push(e, comment, f)) } @@ -251,7 +247,6 @@ Context::new().extend_unbound(new_bindings, None, None, None) } - #[inline(always)] pub fn push(&self, e: LocExpr, comment: String, f: impl FnOnce() -> Result) -> Result { { let mut stack = self.0.stack.borrow_mut(); @@ -287,7 +282,6 @@ Err(LocError(err, self.stack_trace())) } - #[inline(always)] fn run_in_state(&self, f: impl FnOnce() -> T) -> T { EVAL_STATE.with(|v| { let has_state = v.borrow().is_some(); --- a/crates/jsonnet-evaluator/src/map.rs +++ b/crates/jsonnet-evaluator/src/map.rs @@ -18,7 +18,6 @@ })) } - #[inline(always)] pub fn get(&self, key: &Q) -> Option<&V> where K: Borrow, --- a/crates/jsonnet-evaluator/src/val.rs +++ b/crates/jsonnet-evaluator/src/val.rs @@ -77,7 +77,6 @@ } impl FuncDesc { /// This function is always inlined to make tailstrict work - #[inline(always)] pub fn evaluate(&self, call_ctx: Context, args: &ArgsDesc, tailstrict: bool) -> Result { let ctx = inline_parse_function_call( call_ctx, @@ -89,7 +88,6 @@ evaluate(ctx, &self.body) } - #[inline(always)] pub fn evaluate_values(&self, call_ctx: Context, args: &[Val]) -> Result { let ctx = place_args(call_ctx, Some(self.ctx.clone()), &self.params, args)?; evaluate(ctx, &self.body)