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
--- 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| {
modifiedcrates/jrsonnet-evaluator/src/integrations/serde.rsdiffbeforeafterboth
before · crates/jrsonnet-evaluator/src/integrations/serde.rs
1use crate::{2	error::{Error::*, LocError, Result},3	throw, LazyBinding, LazyVal, ObjMember, ObjValue, Val,4};5use jrsonnet_parser::Visibility;6use serde_json::{Map, Number, Value};7use std::{8	collections::HashMap,9	convert::{TryFrom, TryInto},10	rc::Rc,11};1213impl TryFrom<&Val> for Value {14	type Error = LocError;15	fn try_from(v: &Val) -> Result<Self> {16		Ok(match v {17			Val::Bool(b) => Self::Bool(*b),18			Val::Null => Self::Null,19			Val::Str(s) => Self::String((s as &str).into()),20			Val::Num(n) => Self::Number(if n.fract() <= f64::EPSILON {21				(*n as i64).into()22			} else {23				Number::from_f64(*n).expect("to json number")24			}),25			Val::Arr(a) => {26				let mut out = Vec::with_capacity(a.len());27				for item in a.iter() {28					out.push((&item?).try_into()?);29				}30				Self::Array(out)31			}32			Val::Obj(o) => {33				let mut out = Map::new();34				for key in o.visible_fields() {35					out.insert(36						(&key as &str).into(),37						(&o.get(key)?.expect("field exists")).try_into()?,38					);39				}40				Self::Object(out)41			}42			Val::Func(_) => throw!(RuntimeError("tried to manifest function".into())),43		})44	}45}4647impl From<&Value> for Val {48	fn from(v: &Value) -> Self {49		match v {50			Value::Null => Self::Null,51			Value::Bool(v) => Self::Bool(*v),52			Value::Number(n) => Self::Num(n.as_f64().expect("as f64")),53			Value::String(s) => Self::Str((s as &str).into()),54			Value::Array(a) => {55				let mut out = Vec::with_capacity(a.len());56				for v in a {57					out.push(LazyVal::new_resolved(v.into()));58				}59				Self::Arr(out.into())60			}61			Value::Object(o) => {62				let mut entries = HashMap::with_capacity(o.len());63				for (k, v) in o {64					entries.insert(65						(k as &str).into(),66						ObjMember {67							add: false,68							visibility: Visibility::Normal,69							invoke: LazyBinding::Bound(LazyVal::new_resolved(v.into())),70							location: None,71						},72					);73				}74				Self::Obj(ObjValue::new(None, Rc::new(entries)))75			}76		}77	}78}
after · crates/jrsonnet-evaluator/src/integrations/serde.rs
1use crate::{2	error::{Error::*, LocError, Result},3	throw, LazyBinding, LazyVal, ObjMember, ObjValue, Val,4};5use jrsonnet_parser::Visibility;6use rustc_hash::FxHasher;7use serde_json::{Map, Number, Value};8use std::{9	collections::HashMap,10	convert::{TryFrom, TryInto},11	hash::BuildHasherDefault,12	rc::Rc,13};1415impl TryFrom<&Val> for Value {16	type Error = LocError;17	fn try_from(v: &Val) -> Result<Self> {18		Ok(match v {19			Val::Bool(b) => Self::Bool(*b),20			Val::Null => Self::Null,21			Val::Str(s) => Self::String((s as &str).into()),22			Val::Num(n) => Self::Number(if n.fract() <= f64::EPSILON {23				(*n as i64).into()24			} else {25				Number::from_f64(*n).expect("to json number")26			}),27			Val::Arr(a) => {28				let mut out = Vec::with_capacity(a.len());29				for item in a.iter() {30					out.push((&item?).try_into()?);31				}32				Self::Array(out)33			}34			Val::Obj(o) => {35				let mut out = Map::new();36				for key in o.fields() {37					out.insert(38						(&key as &str).into(),39						(&o.get(key)?.expect("field exists")).try_into()?,40					);41				}42				Self::Object(out)43			}44			Val::Func(_) => throw!(RuntimeError("tried to manifest function".into())),45		})46	}47}4849impl From<&Value> for Val {50	fn from(v: &Value) -> Self {51		match v {52			Value::Null => Self::Null,53			Value::Bool(v) => Self::Bool(*v),54			Value::Number(n) => Self::Num(n.as_f64().expect("as f64")),55			Value::String(s) => Self::Str((s as &str).into()),56			Value::Array(a) => {57				let mut out = Vec::with_capacity(a.len());58				for v in a {59					out.push(LazyVal::new_resolved(v.into()));60				}61				Self::Arr(out.into())62			}63			Value::Object(o) => {64				let mut entries = HashMap::with_capacity_and_hasher(65					o.len(),66					BuildHasherDefault::<FxHasher>::default(),67				);68				for (k, v) in o {69					entries.insert(70						(k as &str).into(),71						ObjMember {72							add: false,73							visibility: Visibility::Normal,74							invoke: LazyBinding::Bound(LazyVal::new_resolved(v.into())),75							location: None,76						},77					);78				}79				Self::Obj(ObjValue::new(None, Rc::new(entries)))80			}81		}82	}83}
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 {