diff options
author | Vincent Ambo <mail@tazj.in> | 2022-08-23T17·37+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-09-01T21·41+0000 |
commit | d57366a6c2e6abec77357457b7cfb25fe3491c40 (patch) | |
tree | 03009d77a3e85e1b2c980588b9078d12719b4804 /tvix/eval | |
parent | 3ed40b4eeafb6c37ab1cc0550e591c4113efd252 (diff) |
feat(tvix/eval): introduce initial `Lambda` type r/4574
Change-Id: Ifa9766f5ffeff99e926936bafd697e885e733b78 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6238 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
Diffstat (limited to 'tvix/eval')
-rw-r--r-- | tvix/eval/src/value/lambda.rs | 12 | ||||
-rw-r--r-- | tvix/eval/src/value/mod.rs | 6 |
2 files changed, 18 insertions, 0 deletions
diff --git a/tvix/eval/src/value/lambda.rs b/tvix/eval/src/value/lambda.rs new file mode 100644 index 000000000000..2cecb4f5373b --- /dev/null +++ b/tvix/eval/src/value/lambda.rs @@ -0,0 +1,12 @@ +//! This module implements the runtime representation of functions. +use std::rc::Rc; + +use crate::chunk::Chunk; + +use super::NixString; + +#[derive(Clone, Debug)] +pub struct Lambda { + name: Option<NixString>, + chunk: Rc<Chunk>, +} diff --git a/tvix/eval/src/value/mod.rs b/tvix/eval/src/value/mod.rs index f054191f6716..2177ca26d904 100644 --- a/tvix/eval/src/value/mod.rs +++ b/tvix/eval/src/value/mod.rs @@ -4,11 +4,13 @@ use std::rc::Rc; use std::{fmt::Display, path::PathBuf}; mod attrs; +mod lambda; mod list; mod string; use crate::errors::{ErrorKind, EvalResult}; pub use attrs::NixAttrs; +pub use lambda::Lambda; pub use list::NixList; pub use string::NixString; @@ -23,6 +25,7 @@ pub enum Value { Path(PathBuf), Attrs(Rc<NixAttrs>), List(NixList), + Lambda(Lambda), // Internal values that, while they technically exist at runtime, // are never returned to or created directly by users. @@ -46,6 +49,7 @@ impl Value { Value::Path(_) => "path", Value::Attrs(_) => "set", Value::List(_) => "list", + Value::Lambda(_) => "lambda", // Internal types Value::AttrPath(_) | Value::Blackhole | Value::NotFound => "internal", @@ -123,6 +127,7 @@ impl Display for Value { Value::Path(p) => p.display().fmt(f), Value::Attrs(attrs) => attrs.fmt(f), Value::List(list) => list.fmt(f), + Value::Lambda(_) => f.write_str("lambda"), // TODO: print position // Nix prints floats with a maximum precision of 5 digits // only. @@ -158,6 +163,7 @@ impl PartialEq for Value { // Everything else is either incomparable (e.g. internal // types) or false. + // TODO(tazjin): mirror Lambda equality behaviour _ => false, } } |