refactor(tvix/eval): use im::Vector directly where possible

The conversion from im::Vector -> Vec is cheaper for NixList
construction (of course), so where possible we should make use of
that.

This updates most builtins dealing with lists to use Vector directly,
and marks the function constructing NixList from Vec as deprecated so
that we get appropriate warnings in places where it's still in use.

These places are currently inside of JSON serialisation logic which is
in flux right now, so lets leave them as-is until it's stabilised.

Change-Id: I037f12a2800f2576db4d9526bd935efd079163f0
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7671
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
This commit is contained in:
Vincent Ambo 2022-12-29 15:50:19 +03:00 committed by tazjin
parent 6324f586c9
commit 610c44ec1e
3 changed files with 31 additions and 28 deletions

View file

@ -544,7 +544,7 @@ impl From<PathBuf> for Value {
impl From<Vec<Value>> for Value {
fn from(val: Vec<Value>) -> Self {
Self::List(NixList::from(val))
Self::List(NixList::from_vec(val))
}
}
@ -601,6 +601,7 @@ fn type_error(expected: &'static str, actual: &Value) -> ErrorKind {
#[cfg(test)]
mod tests {
use super::*;
use im::vector;
mod nix_eq {
use crate::observer::NoOpObserver;
@ -643,8 +644,8 @@ mod tests {
let mut observer = NoOpObserver {};
let mut vm = VM::new(Default::default(), Box::new(crate::DummyIO), &mut observer);
let v1 = Value::List(NixList::from(vec![Value::Integer(1)]));
let v2 = Value::List(NixList::from(vec![Value::Float(1.0)]));
let v1 = Value::List(NixList::from(vector![Value::Integer(1)]));
let v2 = Value::List(NixList::from(vector![Value::Float(1.0)]));
assert!(v1.nix_eq(&v2, &mut vm).unwrap())
}