From 7b5cb9f1353f91ec6accee00175ccb46d9fccba6 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sat, 20 Feb 2021 19:06:00 +0000 Subject: [PATCH] refactor: use new object methods --- --- a/crates/jrsonnet-evaluator/src/builtin/mod.rs +++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs @@ -144,12 +144,7 @@ 0, obj: ty!(object) => Val::Obj; 1, inc_hidden: ty!(boolean) => Val::Bool; ], { - let mut out = obj.fields_visibility() - .into_iter() - .filter(|(_k, v)| *v || inc_hidden) - .map(|(k, _v)|k) - .collect::>(); - out.sort(); + let out = obj.fields_ex(inc_hidden); Ok(Val::Arr(out.into_iter().map(Val::Str).collect::>().into())) }) } @@ -164,12 +159,7 @@ 1, f: ty!(string) => Val::Str; 2, inc_hidden: ty!(boolean) => Val::Bool; ], { - Ok(Val::Bool( - obj.fields_visibility() - .into_iter() - .filter(|(_k, v)| *v || inc_hidden) - .any(|(k, _v)| *k == *f), - )) + Ok(Val::Bool(obj.has_field_ex(f, inc_hidden))) }) } --- a/crates/jrsonnet-evaluator/src/evaluate.rs +++ b/crates/jrsonnet-evaluator/src/evaluate.rs @@ -245,7 +245,7 @@ new_bindings.fill(bindings); } - let mut new_members = HashMap::new(); + let mut new_members = FxHashMap::default(); for member in members.iter() { match member { Member::Field(FieldMember { @@ -320,7 +320,7 @@ ObjBody::MemberList(members) => evaluate_member_list_object(context, members)?, ObjBody::ObjComp(obj) => { let future_this = FutureObjValue::new(); - let mut new_members = HashMap::new(); + let mut new_members = FxHashMap::default(); for (k, v) in evaluate_comp( context.clone(), &|ctx| { --- a/crates/jrsonnet-evaluator/src/integrations/serde.rs +++ b/crates/jrsonnet-evaluator/src/integrations/serde.rs @@ -3,10 +3,12 @@ throw, LazyBinding, LazyVal, ObjMember, ObjValue, Val, }; use jrsonnet_parser::Visibility; +use rustc_hash::FxHasher; use serde_json::{Map, Number, Value}; use std::{ collections::HashMap, convert::{TryFrom, TryInto}, + hash::BuildHasherDefault, rc::Rc, }; @@ -31,7 +33,7 @@ } Val::Obj(o) => { let mut out = Map::new(); - for key in o.visible_fields() { + for key in o.fields() { out.insert( (&key as &str).into(), (&o.get(key)?.expect("field exists")).try_into()?, @@ -59,7 +61,10 @@ Self::Arr(out.into()) } Value::Object(o) => { - let mut entries = HashMap::with_capacity(o.len()); + let mut entries = HashMap::with_capacity_and_hasher( + o.len(), + BuildHasherDefault::::default(), + ); for (k, v) in o { entries.insert( (k as &str).into(), --- a/crates/jrsonnet-evaluator/src/val.rs +++ b/crates/jrsonnet-evaluator/src/val.rs @@ -395,7 +395,7 @@ Self::Obj(obj) => obj, _ => throw!(MultiManifestOutputIsNotAObject), }; - let keys = obj.visible_fields(); + let keys = obj.fields(); let mut out = Vec::with_capacity(keys.len()); for key in keys { let value = obj @@ -588,8 +588,8 @@ if ObjValue::ptr_eq(a, b) { return Ok(true); } - let fields = a.visible_fields(); - if fields != b.visible_fields() { + let fields = a.fields(); + if fields != b.fields() { return Ok(false); } for field in fields { -- gitstuff