diff options
Diffstat (limited to 'src/eval')
| -rw-r--r-- | src/eval/dict.rs | 7 | ||||
| -rw-r--r-- | src/eval/mod.rs | 3 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/eval/dict.rs b/src/eval/dict.rs index 6b4dbbd7..22b73e76 100644 --- a/src/eval/dict.rs +++ b/src/eval/dict.rs @@ -5,6 +5,7 @@ use std::sync::Arc; use super::{Args, Array, Func, Value}; use crate::diag::{StrResult, TypResult}; +use crate::parse::is_ident; use crate::syntax::Spanned; use crate::util::{ArcExt, EcoString}; use crate::Context; @@ -127,7 +128,11 @@ impl Debug for Dict { f.write_char(':')?; } for (i, (key, value)) in self.iter().enumerate() { - f.write_str(key)?; + if is_ident(key) { + f.write_str(key)?; + } else { + write!(f, "{key:?}")?; + } f.write_str(": ")?; value.fmt(f)?; if i + 1 < self.0.len() { diff --git a/src/eval/mod.rs b/src/eval/mod.rs index e9d62a69..677fa4aa 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -335,6 +335,9 @@ impl Eval for DictExpr { DictItem::Named(named) => { map.insert(named.name().take(), named.expr().eval(ctx, scp)?); } + DictItem::Keyed(keyed) => { + map.insert(keyed.key(), keyed.expr().eval(ctx, scp)?); + } DictItem::Spread(expr) => match expr.eval(ctx, scp)? { Value::None => {} Value::Dict(dict) => map.extend(dict.into_iter()), |
