difftreelog
fix derive names for full destruction
in: master
2 files changed
crates/jrsonnet-evaluator/src/evaluate/destructure.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/evaluate/destructure.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate/destructure.rs
@@ -4,7 +4,7 @@
use crate::{
error::{Error::*, Result},
- evaluate, evaluate_method,
+ evaluate, evaluate_method, evaluate_named,
gc::GcHashMap,
tb, throw,
val::ThunkValue,
@@ -235,17 +235,22 @@
BindSpec::Field { into, value } => {
#[derive(Trace)]
struct EvaluateThunkValue {
+ name: Option<IStr>,
fctx: Pending<Context>,
expr: LocExpr,
}
impl ThunkValue for EvaluateThunkValue {
type Output = Val;
fn get(self: Box<Self>, s: State) -> Result<Self::Output> {
- evaluate(s, self.fctx.unwrap(), &self.expr)
+ if let Some(name) = self.name {
+ evaluate_named(s, self.fctx.unwrap(), &self.expr, name)
+ } else {
+ evaluate(s, self.fctx.unwrap(), &self.expr)
+ }
}
}
- // TODO: Generate some name, as destructure spec may be used with plain functions
let data = Thunk::new(tb!(EvaluateThunkValue {
+ name: into.name(),
fctx,
expr: value.clone(),
}));
crates/jrsonnet-parser/src/expr.rsdiffbeforeafterboth204 rest: Option<DestructRest>,204 rest: Option<DestructRest>,205 },205 },206}206}207impl Destruct {208 pub fn name(&self) -> Option<IStr> {209 match self {210 Self::Full(name) => Some(name.clone()),211 #[cfg(feature = "exp-destruct")]212 _ => None,213 }214 }215}207216208#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]217#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]209#[derive(Debug, Clone, PartialEq, Trace)]218#[derive(Debug, Clone, PartialEq, Trace)]