difftreelog
refactor use new object methods
in: master
4 files changed
crates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth--- 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::<Vec<_>>();
- out.sort();
+ let out = obj.fields_ex(inc_hidden);
Ok(Val::Arr(out.into_iter().map(Val::Str).collect::<Vec<_>>().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)))
})
}
crates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth245 new_bindings.fill(bindings);245 new_bindings.fill(bindings);246 }246 }247247248 let mut new_members = HashMap::new();248 let mut new_members = FxHashMap::default();249 for member in members.iter() {249 for member in members.iter() {250 match member {250 match member {251 Member::Field(FieldMember {251 Member::Field(FieldMember {320 ObjBody::MemberList(members) => evaluate_member_list_object(context, members)?,320 ObjBody::MemberList(members) => evaluate_member_list_object(context, members)?,321 ObjBody::ObjComp(obj) => {321 ObjBody::ObjComp(obj) => {322 let future_this = FutureObjValue::new();322 let future_this = FutureObjValue::new();323 let mut new_members = HashMap::new();323 let mut new_members = FxHashMap::default();324 for (k, v) in evaluate_comp(324 for (k, v) in evaluate_comp(325 context.clone(),325 context.clone(),326 &|ctx| {326 &|ctx| {crates/jrsonnet-evaluator/src/integrations/serde.rsdiffbeforeafterboth--- 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::<FxHasher>::default(),
+ );
for (k, v) in o {
entries.insert(
(k as &str).into(),
crates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth--- 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 {