difftreelog
feat optional tailstrict in FuncVal::evaluate_simple
in: master
7 files changed
crates/jrsonnet-evaluator/src/arr/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/arr/mod.rs
+++ b/crates/jrsonnet-evaluator/src/arr/mod.rs
@@ -234,6 +234,7 @@
}
}
+ /// Is this vec supports .get_cheap()?
pub fn is_cheap(&self) -> bool {
match self {
ArrValue::Eager(_) | ArrValue::Range(..) | ArrValue::Bytes(_) => true,
crates/jrsonnet-evaluator/src/arr/spec.rsdiffbeforeafterboth748 .get(index)748 .get(index)749 .transpose()749 .transpose()750 .expect("index checked")750 .expect("index checked")751 .and_then(|r| self.0.mapper.evaluate_simple(&(r,)));751 .and_then(|r| self.0.mapper.evaluate_simple(&(r,), false));752752753 let new_value = match val {753 let new_value = match val {754 Ok(v) => v,754 Ok(v) => v,crates/jrsonnet-evaluator/src/evaluate/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/evaluate/mod.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate/mod.rs
@@ -414,6 +414,7 @@
#[allow(clippy::too_many_lines)]
pub fn evaluate(ctx: Context, expr: &LocExpr) -> Result<Val> {
use Expr::*;
+
if let Some(trivial) = evaluate_trivial(expr) {
return Ok(trivial);
}
crates/jrsonnet-evaluator/src/function/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/function/mod.rs
+++ b/crates/jrsonnet-evaluator/src/function/mod.rs
@@ -164,12 +164,16 @@
Self::Builtin(b) => b.call(call_ctx, loc, args),
}
}
- pub fn evaluate_simple<A: ArgsLike + OptionalContext>(&self, args: &A) -> Result<Val> {
+ pub fn evaluate_simple<A: ArgsLike + OptionalContext>(
+ &self,
+ args: &A,
+ tailstrict: bool,
+ ) -> Result<Val> {
self.evaluate(
ContextBuilder::dangerous_empty_state().build(),
CallLocation::native(),
args,
- true,
+ tailstrict,
)
}
/// Convert jsonnet function to plain `Fn` value.
crates/jrsonnet-evaluator/src/function/native.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/function/native.rs
+++ b/crates/jrsonnet-evaluator/src/function/native.rs
@@ -22,6 +22,7 @@
Box::new(move |$($gen),*| {
let val = val.evaluate_simple(
&($($gen,)*),
+ false,
)?;
O::from_untyped(val)
})
crates/jrsonnet-interner/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-interner/src/lib.rs
+++ b/crates/jrsonnet-interner/src/lib.rs
@@ -174,7 +174,6 @@
}
// First reference - current object, second - POOL
if Inner::strong_count(&self.0) <= 2 {
- eprintln!("unpool");
unpool(&self.0);
}
}
crates/jrsonnet-stdlib/src/arrays.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/arrays.rs
+++ b/crates/jrsonnet-stdlib/src/arrays.rs
@@ -88,14 +88,14 @@
#[builtin]
pub fn builtin_filter(func: FuncVal, arr: ArrValue) -> Result<ArrValue> {
- arr.filter(|val| bool::from_untyped(func.evaluate_simple(&(val.clone(),))?))
+ arr.filter(|val| bool::from_untyped(func.evaluate_simple(&(val.clone(),), false)?))
}
#[builtin]
pub fn builtin_foldl(func: FuncVal, arr: ArrValue, init: Val) -> Result<Val> {
let mut acc = init;
for i in arr.iter() {
- acc = func.evaluate_simple(&(acc, i?))?;
+ acc = func.evaluate_simple(&(acc, i?), false)?;
}
Ok(acc)
}
@@ -104,7 +104,7 @@
pub fn builtin_foldr(func: FuncVal, arr: ArrValue, init: Val) -> Result<Val> {
let mut acc = init;
for i in arr.iter().rev() {
- acc = func.evaluate_simple(&(i?, acc))?;
+ acc = func.evaluate_simple(&(i?, acc), false)?;
}
Ok(acc)
}