git.delta.rocks / jrsonnet / refs/commits / 7b5cb9f1353f

difftreelog

refactor use new object methods

Yaroslav Bolyukin2021-02-20parent: #9d2a45f.patch.diff
in: master

4 files changed

modifiedcrates/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)))
 	})
 }
 
modifiedcrates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
245 new_bindings.fill(bindings);245 new_bindings.fill(bindings);
246 }246 }
247247
248 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| {
modifiedcrates/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(),
modifiedcrates/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 {