Use alloc, core instead of std (#225)

- Replace std with alloc, core in most places in src
  Tests, bindings aren't changed.
- Introduce BuiltinsMap type alias inplace of HashMap.
  In no_std case, this could be aliases to BTreeMap
- Fix clippy warnings

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
This commit is contained in:
Anand Krishnamoorthi
2024-05-07 21:41:09 -04:00
committed by GitHub
parent 0a39e434db
commit 69d6426663
38 changed files with 137 additions and 165 deletions

View File

@@ -8,11 +8,9 @@ use crate::lexer::Span;
use crate::number::Number;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("count", (count, 1));
m.insert("max", (max, 1));
m.insert("min", (min, 1));

View File

@@ -8,11 +8,9 @@ use crate::lexer::Span;
use crate::Rc;
use crate::Value;
use std::collections::HashMap;
use anyhow::Result;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("array.concat", (concat, 2));
m.insert("array.reverse", (reverse, 1));
m.insert("array.slice", (slice, 3));

View File

@@ -8,11 +8,9 @@ use crate::builtins::utils::{ensure_args_count, ensure_numeric};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::Result;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("bits.and", (and, 2));
m.insert("bits.lsh", (lsh, 2));
m.insert("bits.negate", (negate, 1));

View File

@@ -7,11 +7,9 @@ use crate::builtins::utils::ensure_args_count;
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("to_number", (to_number, 1));
}

View File

@@ -7,8 +7,6 @@ use crate::builtins::utils::{ensure_args_count, ensure_string};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
use constant_time_eq::constant_time_eq;
use hmac::{Hmac, Mac};
@@ -16,7 +14,7 @@ use md5::{Digest, Md5};
use sha1::Sha1;
use sha2::{Sha256, Sha512};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("crypto.hmac.equal", (hmac_equal_fixed_time, 2));
m.insert("crypto.hmac.md5", (hmac_md5, 2));
m.insert("crypto.hmac.sha1", (hmac_sha1, 2));

View File

@@ -6,14 +6,12 @@ use crate::builtins;
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
// TODO: Should we avoid this limit?
const MAX_ARGS: u8 = std::u8::MAX;
const MAX_ARGS: u8 = core::u8::MAX;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("print", (print, MAX_ARGS));
}

View File

@@ -2,13 +2,12 @@
// Licensed under the MIT License.
use crate::ast::{Expr, Ref};
use crate::builtins;
use crate::builtins::utils::{ensure_args_count, ensure_set};
use crate::builtins::BuiltinFcn;
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
use lazy_static::lazy_static;
@@ -17,8 +16,8 @@ use crate::builtins::regex::regex_match;
#[rustfmt::skip]
lazy_static! {
pub static ref DEPRECATED: HashMap<&'static str, BuiltinFcn> = {
let mut m : HashMap<&'static str, BuiltinFcn> = HashMap::new();
pub static ref DEPRECATED: builtins::BuiltinsMap<&'static str, BuiltinFcn> = {
let mut m : builtins::BuiltinsMap<&'static str, BuiltinFcn> = builtins::BuiltinsMap::new();
m.insert("all", (all, 1));
m.insert("any", (any, 1));

View File

@@ -10,12 +10,10 @@ use crate::builtins::utils::{
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
#[allow(unused)]
use anyhow::{anyhow, bail, Context, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
#[cfg(feature = "base64")]
{
m.insert("base64.decode", (base64_decode, 1));
@@ -238,7 +236,7 @@ fn urlquery_decode_object(
Err(_) => bail!(params[0].span().error("not a valid url query")),
};
let mut map = std::collections::BTreeMap::new();
let mut map = alloc::collections::BTreeMap::new();
for (k, v) in url.query_pairs() {
let key = Value::String(k.clone().into());
let value = Value::String(v.clone().into());

View File

@@ -7,13 +7,11 @@ use crate::builtins::utils::{ensure_args_count, ensure_string, ensure_string_col
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
//use glob::{Pattern, MatchOptions};
use wax::{Glob, Pattern};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("glob.match", (glob_match, 3));
m.insert("glob.quote_meta", (quote_meta, 1));
}

View File

@@ -7,11 +7,11 @@ use crate::builtins::utils::{ensure_args_count, ensure_object};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::{BTreeMap, BTreeSet, HashMap};
use alloc::collections::{BTreeMap, BTreeSet};
use anyhow::{bail, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("graph.reachable", (reachable, 2));
m.insert("graph.reachable_paths", (reachable_paths, 2));
m.insert("walk", (walk, 1));

View File

@@ -8,11 +8,9 @@ use crate::builtins::utils::ensure_args_count;
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::Result;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("http.send", (send, 1));
}

View File

@@ -9,11 +9,10 @@ use crate::lexer::Span;
use crate::value::Value;
use itertools::Itertools;
use std::collections::HashMap;
use anyhow::{bail, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("io.jwt.decode", (jwt_decode, 1));
m.insert("io.jwt.decode_verify", (jwt_decode_verify, 2));
}

View File

@@ -47,7 +47,7 @@ use crate::ast::{Expr, Ref};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use std::collections::HashMap as BuiltinsMap;
use anyhow::Result;
use lazy_static::lazy_static;
@@ -61,8 +61,8 @@ pub use deprecated::DEPRECATED;
#[rustfmt::skip]
lazy_static! {
pub static ref BUILTINS: HashMap<&'static str, BuiltinFcn> = {
let mut m : HashMap<&'static str, BuiltinFcn> = HashMap::new();
pub static ref BUILTINS: BuiltinsMap<&'static str, BuiltinFcn> = {
let mut m : BuiltinsMap<&'static str, BuiltinFcn> = BuiltinsMap::new();
// comparison functions are directly called.
numbers::register(&mut m);

View File

@@ -8,12 +8,10 @@ use crate::lexer::Span;
use crate::number::Number;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
use rand::{thread_rng, Rng};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("abs", (abs, 1));
m.insert("ceil", (ceil, 1));
m.insert("floor", (floor, 1));

View File

@@ -8,12 +8,12 @@ use crate::lexer::Span;
use crate::Rc;
use crate::Value;
use std::collections::{BTreeMap, BTreeSet, HashMap};
use std::iter::Iterator;
use alloc::collections::{BTreeMap, BTreeSet};
use core::iter::Iterator;
use anyhow::{bail, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("json.filter", (json_filter, 2));
m.insert("json.remove", (json_remove, 2));
m.insert("object.filter", (filter, 2));

View File

@@ -8,11 +8,11 @@ use crate::builtins::utils::ensure_args_count;
use crate::lexer::Span;
use crate::value::Value;
use std::collections::{BTreeMap, HashMap};
use alloc::collections::BTreeMap;
use anyhow::Result;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("opa.runtime", (opa_runtime, 0));
}

View File

@@ -7,12 +7,10 @@ use crate::builtins::utils::{ensure_args_count, ensure_numeric, ensure_string};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
use regex::Regex;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert(
"regex.find_all_string_submatch_n",
(find_all_string_submatch_n, 3),

View File

@@ -9,12 +9,11 @@ use crate::value::Value;
use semver::Version;
use std::cmp::Ordering;
use std::collections::HashMap;
use core::cmp::Ordering;
use anyhow::Result;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("semver.compare", (compare, 2));
m.insert("semver.is_valid", (is_valid, 1));
}

View File

@@ -7,11 +7,11 @@ use crate::builtins::utils::{ensure_args_count, ensure_set};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::{BTreeSet, HashMap};
use alloc::collections::BTreeSet;
use anyhow::{bail, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("intersection", (intersection_of_set_of_sets, 1));
m.insert("union", (union_of_set_of_sets, 1));
}
@@ -56,7 +56,7 @@ fn intersection_of_set_of_sets(
};
if first {
res = (**s).clone();
res.clone_from(s);
first = false;
} else {
res = res.intersection(s).cloned().collect();

View File

@@ -11,11 +11,9 @@ use crate::lexer::Span;
use crate::number::Number;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("concat", (concat, 2));
m.insert("contains", (contains, 2));
m.insert("endswith", (endswith, 2));

View File

@@ -8,12 +8,11 @@ use crate::builtins::utils::{ensure_args_count, ensure_string};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use std::thread;
use anyhow::{Ok, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("test.sleep", (sleep, 1));
}

View File

@@ -7,8 +7,6 @@ use crate::builtins::utils::{ensure_args_count, ensure_numeric, ensure_string};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Result};
use chrono::{
@@ -20,7 +18,7 @@ use chrono_tz::Tz;
pub(in crate::builtins) mod compat;
mod diff;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("time.add_date", (add_date, 4));
m.insert("time.clock", (clock, 1));
m.insert("time.date", (date, 1));

View File

@@ -31,9 +31,9 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
use core::fmt;
use core::iter;
use std::error::Error;
use std::fmt;
use std::iter;
use chrono::TimeZone;
use chrono::{

View File

@@ -7,11 +7,9 @@ use crate::builtins::utils::{ensure_args_count, ensure_string};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::Result;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("trace", (trace, 1));
}

View File

@@ -7,11 +7,9 @@ use crate::builtins::utils::ensure_args_count;
use crate::lexer::Span;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::Result;
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("is_array", (is_array, 1));
m.insert("is_boolean", (is_boolean, 1));
m.insert("is_null", (is_null, 1));

View File

@@ -8,11 +8,9 @@ use crate::lexer::Span;
use crate::number::Number;
use crate::value::Value;
use std::collections::HashMap;
use anyhow::{bail, Context, Result};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("units.parse", (parse, 1));
m.insert("units.parse_bytes", (parse_bytes, 1));
}

View File

@@ -7,7 +7,7 @@ use crate::number::Number;
use crate::Rc;
use crate::Value;
use std::collections::{BTreeMap, BTreeSet};
use alloc::collections::{BTreeMap, BTreeSet};
use anyhow::{bail, Result};

View File

@@ -7,12 +7,12 @@ use crate::builtins::utils::{ensure_args_count, ensure_string};
use crate::lexer::Span;
use crate::value::Value;
use std::collections::{BTreeMap, HashMap};
use alloc::collections::BTreeMap;
use anyhow::Result;
use uuid::{Timestamp, Uuid};
pub fn register(m: &mut HashMap<&'static str, builtins::BuiltinFcn>) {
pub fn register(m: &mut builtins::BuiltinsMap<&'static str, builtins::BuiltinFcn>) {
m.insert("uuid.parse", (parse, 1));
m.insert("uuid.rfc4122", (rfc4122, 1));
}