From b31c9587bc598ab038d70d1cf4f6daec8c16d989 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Fri, 14 Feb 2020 10:10:51 -0500 Subject: [PATCH] Implement builtin function `length()` --- src/builtin/list.rs | 14 ++++++++++++++ src/builtin/mod.rs | 1 + 2 files changed, 15 insertions(+) diff --git a/src/builtin/list.rs b/src/builtin/list.rs index 8b13789..58acc76 100644 --- a/src/builtin/list.rs +++ b/src/builtin/list.rs @@ -1 +1,15 @@ +use std::collections::BTreeMap; +use super::Builtin; +use crate::units::Unit; +use crate::value::{Number, Value}; + +pub(crate) fn register(f: &mut BTreeMap) { + decl!(f "length", |args, _| { + let len = match arg!(args, 0, "list").eval() { + Value::List(v, _) => Number::from(v.len()), + _ => Number::from(1) + }; + Some(Value::Dimension(len, Unit::None)) + }); +} diff --git a/src/builtin/mod.rs b/src/builtin/mod.rs index eed9302..3cb388f 100644 --- a/src/builtin/mod.rs +++ b/src/builtin/mod.rs @@ -22,6 +22,7 @@ lazy_static! { pub(crate) static ref GLOBAL_FUNCTIONS: BTreeMap = { let mut m = BTreeMap::new(); color::register(&mut m); + list::register(&mut m); math::register(&mut m); meta::register(&mut m); string::register(&mut m);