From 2eef3e9f6abae0e7494296adc8bac68e1d300f52 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Thu, 30 Apr 2020 15:00:57 -0400 Subject: [PATCH] store &'static str rather than String for builtin fn names --- src/builtin/color/hsl.rs | 30 +++++++++++++++--------------- src/builtin/color/mod.rs | 4 ++-- src/builtin/color/opacity.rs | 16 ++++++++-------- src/builtin/color/other.rs | 12 ++++++------ src/builtin/color/rgb.rs | 16 ++++++++-------- src/builtin/list.rs | 22 +++++++++++----------- src/builtin/map.rs | 16 ++++++++-------- src/builtin/math.rs | 18 +++++++++--------- src/builtin/meta.rs | 32 ++++++++++++++++---------------- src/builtin/mod.rs | 4 +++- src/builtin/string.rs | 22 +++++++++++----------- src/value/parse.rs | 2 +- 12 files changed, 98 insertions(+), 96 deletions(-) diff --git a/src/builtin/color/hsl.rs b/src/builtin/color/hsl.rs index 218cdf5..1f8cdfc 100644 --- a/src/builtin/color/hsl.rs +++ b/src/builtin/color/hsl.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; use num_traits::One; @@ -8,9 +8,9 @@ use crate::common::QuoteKind; use crate::unit::Unit; use crate::value::{Number, Value}; -pub(crate) fn register(f: &mut HashMap) { +pub(crate) fn register(f: &mut GlobalFunctionMap) { f.insert( - "hsl".to_owned(), + "hsl", Builtin::new(|mut args, scope, super_selector| { if args.is_empty() { return Err(("Missing argument $channels.", args.span()).into()); @@ -218,7 +218,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "hsla".to_owned(), + "hsla", Builtin::new(|mut args, scope, super_selector| { if args.is_empty() { return Err(("Missing argument $channels.", args.span()).into()); @@ -426,7 +426,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "hue".to_owned(), + "hue", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "color") { @@ -440,7 +440,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "saturation".to_owned(), + "saturation", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "color") { @@ -454,7 +454,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "lightness".to_owned(), + "lightness", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "color") { @@ -468,7 +468,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "adjust-hue".to_owned(), + "adjust-hue", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let color = match arg!(args, scope, super_selector, 0, "color") { @@ -498,7 +498,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "lighten".to_owned(), + "lighten", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let color = match arg!(args, scope, super_selector, 0, "color") { @@ -528,7 +528,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "darken".to_owned(), + "darken", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let color = match arg!(args, scope, super_selector, 0, "color") { @@ -558,7 +558,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "saturate".to_owned(), + "saturate", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; if args.len() == 1 { @@ -605,7 +605,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "desaturate".to_owned(), + "desaturate", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let color = match arg!(args, scope, super_selector, 0, "color") { @@ -635,7 +635,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "grayscale".to_owned(), + "grayscale", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; let color = match arg!(args, scope, super_selector, 0, "color") { @@ -658,7 +658,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "complement".to_owned(), + "complement", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; let color = match arg!(args, scope, super_selector, 0, "color") { @@ -675,7 +675,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "invert".to_owned(), + "invert", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let weight = match arg!( diff --git a/src/builtin/color/mod.rs b/src/builtin/color/mod.rs index 5822839..6becac9 100644 --- a/src/builtin/color/mod.rs +++ b/src/builtin/color/mod.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; use super::Builtin; @@ -7,7 +7,7 @@ mod opacity; mod other; mod rgb; -pub(crate) fn register(f: &mut HashMap) { +pub(crate) fn register(f: &mut GlobalFunctionMap) { hsl::register(f); opacity::register(f); other::register(f); diff --git a/src/builtin/color/opacity.rs b/src/builtin/color/opacity.rs index f1f88c9..15596cb 100644 --- a/src/builtin/color/opacity.rs +++ b/src/builtin/color/opacity.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; use super::Builtin; use crate::common::QuoteKind; @@ -6,9 +6,9 @@ use crate::unit::Unit; use crate::value::Number; use crate::value::Value; -pub(crate) fn register(f: &mut HashMap) { +pub(crate) fn register(f: &mut GlobalFunctionMap) { f.insert( - "alpha".to_owned(), + "alpha", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "color") { @@ -22,7 +22,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "opacity".to_owned(), + "opacity", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "color") { @@ -40,7 +40,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "opacify".to_owned(), + "opacify", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let color = match arg!(args, scope, super_selector, 0, "color") { @@ -70,7 +70,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "fade-in".to_owned(), + "fade-in", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let color = match arg!(args, scope, super_selector, 0, "color") { @@ -100,7 +100,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "transparentize".to_owned(), + "transparentize", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let color = match arg!(args, scope, super_selector, 0, "color") { @@ -130,7 +130,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "fade-out".to_owned(), + "fade-out", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let color = match arg!(args, scope, super_selector, 0, "color") { diff --git a/src/builtin/color/other.rs b/src/builtin/color/other.rs index d194d77..cac8ae2 100644 --- a/src/builtin/color/other.rs +++ b/src/builtin/color/other.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; use num_traits::{One, Signed, Zero}; @@ -50,8 +50,8 @@ macro_rules! opt_hsl { }; } -pub(crate) fn register(f: &mut HashMap) { - f.insert("change-color".to_owned(), Builtin::new(|mut args, scope, super_selector| { +pub(crate) fn register(f: &mut GlobalFunctionMap) { + f.insert("change-color", Builtin::new(|mut args, scope, super_selector| { if args.get_positional(1, scope, super_selector).is_some() { return Err( ("Only one positional argument is allowed. All other arguments must be passed by name.", args.span() @@ -98,7 +98,7 @@ pub(crate) fn register(f: &mut HashMap) { })) })); f.insert( - "adjust-color".to_owned(), + "adjust-color", Builtin::new(|mut args, scope, super_selector| { let color = match arg!(args, scope, super_selector, 0, "color") { Value::Color(c) => c, @@ -176,7 +176,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "scale-color".to_owned(), + "scale-color", Builtin::new(|mut args, scope, super_selector| { let span = args.span(); let color = match arg!(args, scope, super_selector, 0, "color") { @@ -266,7 +266,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "ie-hex-str".to_owned(), + "ie-hex-str", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; let color = match arg!(args, scope, super_selector, 0, "color") { diff --git a/src/builtin/color/rgb.rs b/src/builtin/color/rgb.rs index 5025c78..3efc9dc 100644 --- a/src/builtin/color/rgb.rs +++ b/src/builtin/color/rgb.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; use num_traits::One; @@ -8,9 +8,9 @@ use crate::common::QuoteKind; use crate::unit::Unit; use crate::value::{Number, Value}; -pub(crate) fn register(f: &mut HashMap) { +pub(crate) fn register(f: &mut GlobalFunctionMap) { f.insert( - "rgb".to_owned(), + "rgb", Builtin::new(|mut args, scope, super_selector| { if args.is_empty() { return Err(("Missing argument $channels.", args.span()).into()); @@ -337,7 +337,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "rgba".to_owned(), + "rgba", Builtin::new(|mut args, scope, super_selector| { if args.is_empty() { return Err(("Missing argument $channels.", args.span()).into()); @@ -664,7 +664,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "red".to_owned(), + "red", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "color") { @@ -678,7 +678,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "green".to_owned(), + "green", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "color") { @@ -692,7 +692,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "blue".to_owned(), + "blue", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "color") { @@ -706,7 +706,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "mix".to_owned(), + "mix", Builtin::new(|mut args, scope, super_selector| { args.max_args(3)?; let color1 = match arg!(args, scope, super_selector, 0, "color1") { diff --git a/src/builtin/list.rs b/src/builtin/list.rs index 30d21d7..5ccbf08 100644 --- a/src/builtin/list.rs +++ b/src/builtin/list.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; use num_traits::{One, Signed, ToPrimitive, Zero}; @@ -11,7 +11,7 @@ use crate::selector::Selector; use crate::unit::Unit; use crate::value::{Number, Value}; -pub(crate) fn register(f: &mut HashMap) { +pub(crate) fn register(f: &mut GlobalFunctionMap) { fn length(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult { args.max_args(1)?; let len = match arg!(args, scope, super_selector, 0, "list") { @@ -321,13 +321,13 @@ pub(crate) fn register(f: &mut HashMap) { Ok(Value::List(result, ListSeparator::Comma, Brackets::None)) } - f.insert("length".to_owned(), Builtin::new(length)); - f.insert("nth".to_owned(), Builtin::new(nth)); - f.insert("list-separator".to_owned(), Builtin::new(list_separator)); - f.insert("set-nth".to_owned(), Builtin::new(set_nth)); - f.insert("append".to_owned(), Builtin::new(append)); - f.insert("join".to_owned(), Builtin::new(join)); - f.insert("is-bracketed".to_owned(), Builtin::new(is_bracketed)); - f.insert("index".to_owned(), Builtin::new(index)); - f.insert("zip".to_owned(), Builtin::new(zip)); + f.insert("length", Builtin::new(length)); + f.insert("nth", Builtin::new(nth)); + f.insert("list-separator", Builtin::new(list_separator)); + f.insert("set-nth", Builtin::new(set_nth)); + f.insert("append", Builtin::new(append)); + f.insert("join", Builtin::new(join)); + f.insert("is-bracketed", Builtin::new(is_bracketed)); + f.insert("index", Builtin::new(index)); + f.insert("zip", Builtin::new(zip)); } diff --git a/src/builtin/map.rs b/src/builtin/map.rs index 38d6a4a..c1f2d81 100644 --- a/src/builtin/map.rs +++ b/src/builtin/map.rs @@ -1,12 +1,12 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; use super::Builtin; use crate::common::{Brackets, ListSeparator}; use crate::value::{SassMap, Value}; -pub(crate) fn register(f: &mut HashMap) { +pub(crate) fn register(f: &mut GlobalFunctionMap) { f.insert( - "map-get".to_owned(), + "map-get", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let key = arg!(args, scope, super_selector, 1, "key"); @@ -25,7 +25,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "map-has-key".to_owned(), + "map-has-key", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let key = arg!(args, scope, super_selector, 1, "key"); @@ -44,7 +44,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "map-keys".to_owned(), + "map-keys", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; let map = match arg!(args, scope, super_selector, 0, "map") { @@ -66,7 +66,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "map-values".to_owned(), + "map-values", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; let map = match arg!(args, scope, super_selector, 0, "map") { @@ -88,7 +88,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "map-merge".to_owned(), + "map-merge", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let mut map1 = match arg!(args, scope, super_selector, 0, "map1") { @@ -118,7 +118,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "map-remove".to_owned(), + "map-remove", Builtin::new(|mut args, scope, super_selector| { let mut map = match arg!(args, scope, super_selector, 0, "map") { Value::Map(m) => m, diff --git a/src/builtin/math.rs b/src/builtin/math.rs index afaf45d..8b4d925 100644 --- a/src/builtin/math.rs +++ b/src/builtin/math.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; #[cfg(feature = "random")] use num_traits::{One, Signed, ToPrimitive, Zero}; @@ -9,9 +9,9 @@ use super::Builtin; use crate::unit::Unit; use crate::value::{Number, Value}; -pub(crate) fn register(f: &mut HashMap) { +pub(crate) fn register(f: &mut GlobalFunctionMap) { f.insert( - "percentage".to_owned(), + "percentage", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; let num = match arg!(args, scope, super_selector, 0, "number") { @@ -41,7 +41,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "round".to_owned(), + "round", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "number") { @@ -58,7 +58,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "ceil".to_owned(), + "ceil", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "number") { @@ -75,7 +75,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "floor".to_owned(), + "floor", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "number") { @@ -92,7 +92,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "abs".to_owned(), + "abs", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "number") { @@ -109,7 +109,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "comparable".to_owned(), + "comparable", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let unit1 = match arg!(args, scope, super_selector, 0, "number1") { @@ -145,7 +145,7 @@ pub(crate) fn register(f: &mut HashMap) { // TODO: write tests for this. how? #[cfg(feature = "random")] f.insert( - "random".to_owned(), + "random", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; let limit = match arg!(args, scope, super_selector, 0, "limit" = Value::Null) { diff --git a/src/builtin/meta.rs b/src/builtin/meta.rs index 65aa424..ec4be15 100644 --- a/src/builtin/meta.rs +++ b/src/builtin/meta.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; use codemap::Spanned; @@ -8,9 +8,9 @@ use crate::scope::global_var_exists; use crate::unit::Unit; use crate::value::{SassFunction, Value}; -pub(crate) fn register(f: &mut HashMap) { +pub(crate) fn register(f: &mut GlobalFunctionMap) { f.insert( - "if".to_owned(), + "if", Builtin::new(|mut args, scope, super_selector| { args.max_args(3)?; if arg!(args, scope, super_selector, 0, "condition").is_true(args.span())? { @@ -21,7 +21,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "feature-exists".to_owned(), + "feature-exists", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "feature") { @@ -55,7 +55,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "unit".to_owned(), + "unit", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; let unit = match arg!(args, scope, super_selector, 0, "number") { @@ -75,7 +75,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "type-of".to_owned(), + "type-of", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; let value = arg!(args, scope, super_selector, 0, "value"); @@ -86,7 +86,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "unitless".to_owned(), + "unitless", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "number") { @@ -97,7 +97,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "inspect".to_owned(), + "inspect", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; Ok(Value::Ident( @@ -107,7 +107,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "variable-exists".to_owned(), + "variable-exists", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "name") { @@ -121,7 +121,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "global-variable-exists".to_owned(), + "global-variable-exists", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "name") { @@ -135,7 +135,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "mixin-exists".to_owned(), + "mixin-exists", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; match arg!(args, scope, super_selector, 0, "name") { @@ -149,12 +149,12 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "function-exists".to_owned(), + "function-exists", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; match arg!(args, scope, super_selector, 0, "name") { Value::Ident(s, _) => Ok(Value::bool( - scope.fn_exists(&s) || GLOBAL_FUNCTIONS.contains_key(&s), + scope.fn_exists(&s) || GLOBAL_FUNCTIONS.contains_key(s.as_str()), )), v => Err(( format!("$name: {} is not a string.", v.to_css_string(args.span())?), @@ -165,7 +165,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "get-function".to_owned(), + "get-function", Builtin::new(|mut args, scope, super_selector| { args.max_args(3)?; let name = match arg!(args, scope, super_selector, 0, "name") { @@ -208,7 +208,7 @@ pub(crate) fn register(f: &mut HashMap) { span: args.span(), }) { Ok(f) => SassFunction::UserDefined(Box::new(f), name), - Err(..) => match GLOBAL_FUNCTIONS.get(&name) { + Err(..) => match GLOBAL_FUNCTIONS.get(name.as_str()) { Some(f) => SassFunction::Builtin(f.clone(), name), None => { return Err((format!("Function not found: {}", name), args.span()).into()) @@ -220,7 +220,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "call".to_owned(), + "call", Builtin::new(|mut args, scope, super_selector| { let func = match arg!(args, scope, super_selector, 0, "function") { Value::Function(f) => f, diff --git a/src/builtin/mod.rs b/src/builtin/mod.rs index 083399f..a3a2653 100644 --- a/src/builtin/mod.rs +++ b/src/builtin/mod.rs @@ -19,6 +19,8 @@ mod meta; mod selector; mod string; +pub(crate) type GlobalFunctionMap = HashMap<&'static str, Builtin>; + static FUNCTION_COUNT: AtomicUsize = AtomicUsize::new(0); // TODO: impl Fn @@ -40,7 +42,7 @@ impl PartialEq for Builtin { } } -pub(crate) static GLOBAL_FUNCTIONS: Lazy> = Lazy::new(|| { +pub(crate) static GLOBAL_FUNCTIONS: Lazy = Lazy::new(|| { let mut m = HashMap::new(); color::register(&mut m); list::register(&mut m); diff --git a/src/builtin/string.rs b/src/builtin/string.rs index 59bf248..c594621 100644 --- a/src/builtin/string.rs +++ b/src/builtin/string.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use super::GlobalFunctionMap; use num_bigint::BigInt; use num_traits::{Signed, ToPrimitive, Zero}; @@ -11,9 +11,9 @@ use crate::common::QuoteKind; use crate::unit::Unit; use crate::value::{Number, Value}; -pub(crate) fn register(f: &mut HashMap) { +pub(crate) fn register(f: &mut GlobalFunctionMap) { f.insert( - "to-upper-case".to_owned(), + "to-upper-case", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "string") { @@ -30,7 +30,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "to-lower-case".to_owned(), + "to-lower-case", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "string") { @@ -47,7 +47,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "str-length".to_owned(), + "str-length", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "string") { @@ -67,7 +67,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "quote".to_owned(), + "quote", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "string") { @@ -84,7 +84,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "unquote".to_owned(), + "unquote", Builtin::new(|mut args, scope, super_selector| { args.max_args(1)?; match arg!(args, scope, super_selector, 0, "string") { @@ -101,7 +101,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "str-slice".to_owned(), + "str-slice", Builtin::new(|mut args, scope, super_selector| { args.max_args(3)?; let (string, quotes) = match arg!(args, scope, super_selector, 0, "string") { @@ -205,7 +205,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "str-index".to_owned(), + "str-index", Builtin::new(|mut args, scope, super_selector| { args.max_args(2)?; let s1 = match arg!(args, scope, super_selector, 0, "string") { @@ -243,7 +243,7 @@ pub(crate) fn register(f: &mut HashMap) { }), ); f.insert( - "str-insert".to_owned(), + "str-insert", Builtin::new(|mut args, scope, super_selector| { args.max_args(3)?; let (s1, quotes) = match arg!(args, scope, super_selector, 0, "string") { @@ -347,7 +347,7 @@ pub(crate) fn register(f: &mut HashMap) { ); #[cfg(feature = "random")] f.insert( - "unique-id".to_owned(), + "unique-id", Builtin::new(|args, _, _| { args.max_args(0)?; let mut rng = thread_rng(); diff --git a/src/value/parse.rs b/src/value/parse.rs index cbe46cf..adfc312 100644 --- a/src/value/parse.rs +++ b/src/value/parse.rs @@ -519,7 +519,7 @@ impl Value { span, }) { Ok(f) => f, - Err(_) => match GLOBAL_FUNCTIONS.get(&s.replace('_', "-")) { + Err(_) => match GLOBAL_FUNCTIONS.get(s.replace('_', "-").as_str()) { Some(f) => { return Ok(IntermediateValue::Value(Spanned { node: f.0(eat_call_args(toks)?, scope, super_selector)?,