From 456a1bbb351545f4527185d9b2f69270ae495add Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sun, 24 Apr 2022 20:39:47 +0000 Subject: [PATCH] fix: derive names for full destruction --- --- 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, fctx: Pending, expr: LocExpr, } impl ThunkValue for EvaluateThunkValue { type Output = Val; fn get(self: Box, s: State) -> Result { - 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(), })); --- a/crates/jrsonnet-parser/src/expr.rs +++ b/crates/jrsonnet-parser/src/expr.rs @@ -204,6 +204,15 @@ rest: Option, }, } +impl Destruct { + pub fn name(&self) -> Option { + match self { + Self::Full(name) => Some(name.clone()), + #[cfg(feature = "exp-destruct")] + _ => None, + } + } +} #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone, PartialEq, Trace)] -- gitstuff