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.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/arr/spec.rs
+++ b/crates/jrsonnet-evaluator/src/arr/spec.rs
@@ -748,7 +748,7 @@
.get(index)
.transpose()
.expect("index checked")
- .and_then(|r| self.0.mapper.evaluate_simple(&(r,)));
+ .and_then(|r| self.0.mapper.evaluate_simple(&(r,), false));
let new_value = match val {
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.rsdiffbeforeafterboth166 }166 }167 pub fn evaluate_simple<A: ArgsLike + OptionalContext>(&self, args: &A) -> Result<Val> {167 pub fn evaluate_simple<A: ArgsLike + OptionalContext>(168 &self,169 args: &A,170 tailstrict: bool,171 ) -> Result<Val> {168 self.evaluate(172 self.evaluate(169 ContextBuilder::dangerous_empty_state().build(),173 ContextBuilder::dangerous_empty_state().build(),170 CallLocation::native(),174 CallLocation::native(),171 args,175 args,172 true,176 tailstrict,173 )177 )174 }178 }175 /// Convert jsonnet function to plain `Fn` value.179 /// 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)
}