git.delta.rocks / jrsonnet / refs/commits / 456a1bbb3515

difftreelog

fix derive names for full destruction

Yaroslav Bolyukin2022-04-24parent: #b2f480a.patch.diff
in: master

2 files changed

modifiedcrates/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(),
 			}));
modifiedcrates/jrsonnet-parser/src/expr.rsdiffbeforeafterboth
204 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}
207216
208#[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)]