From f081259b0287b09cd29bad1735c3c22380c9570a Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Sun, 16 Feb 2020 18:15:56 -0500 Subject: [PATCH] Refactor meta builtins --- src/builtin/meta.rs | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/builtin/meta.rs b/src/builtin/meta.rs index 6ef1224..74c0487 100644 --- a/src/builtin/meta.rs +++ b/src/builtin/meta.rs @@ -7,18 +7,14 @@ use crate::value::Value; pub(crate) fn register(f: &mut BTreeMap) { decl!(f "if", |args, _| { - let cond: &Value = arg!(args, 0, "condition"); - let if_true = arg!(args, 1, "if-true").clone(); - let if_false = arg!(args, 2, "if-false").clone(); - if cond.is_true() { - Ok(if_true) + if arg!(args, 0, "condition").is_true() { + Ok(arg!(args, 1, "if-true").eval()) } else { - Ok(if_false) + Ok(arg!(args, 2, "if-false").eval()) } }); decl!(f "feature-exists", |args, _| { - let feature: &Value = arg!(args, 0, "feature"); - match feature.clone().unquote().to_string().as_str() { + match arg!(args, 0, "feature").eval().unquote().to_string().as_str() { // A local variable will shadow a global variable unless // `!global` is used. "global-variable-shadowing" => Ok(Value::False), @@ -38,20 +34,18 @@ pub(crate) fn register(f: &mut BTreeMap) { } }); decl!(f "unit", |args, _| { - let number = arg!(args, 0, "number"); - let unit = match number { + let unit = match arg!(args, 0, "number") { Value::Dimension(_, u) => u.to_string(), _ => String::new() }; Ok(Value::Ident(unit, QuoteKind::Double)) }); decl!(f "type-of", |args, _| { - let value = arg!(args, 0, "value"); + let value = arg!(args, 0, "value").eval(); Ok(Value::Ident(value.kind().to_owned(), QuoteKind::None)) }); decl!(f "unitless", |args, _| { - let number = arg!(args, 0, "number"); - match number { + match arg!(args, 0, "number") { Value::Dimension(_, Unit::None) => Ok(Value::True), Value::Dimension(_, _) => Ok(Value::False), _ => Ok(Value::True)