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
144 0, obj: ty!(object) => Val::Obj;144 0, obj: ty!(object) => Val::Obj;
145 1, inc_hidden: ty!(boolean) => Val::Bool;145 1, inc_hidden: ty!(boolean) => Val::Bool;
146 ], {146 ], {
147 let mut out = obj.fields_visibility()147 let out = obj.fields_ex(inc_hidden);
148 .into_iter()
149 .filter(|(_k, v)| *v || inc_hidden)
150 .map(|(k, _v)|k)
151 .collect::<Vec<_>>();
152 out.sort();
153 Ok(Val::Arr(out.into_iter().map(Val::Str).collect::<Vec<_>>().into()))148 Ok(Val::Arr(out.into_iter().map(Val::Str).collect::<Vec<_>>().into()))
154 })149 })
155}150}
164 1, f: ty!(string) => Val::Str;159 1, f: ty!(string) => Val::Str;
165 2, inc_hidden: ty!(boolean) => Val::Bool;160 2, inc_hidden: ty!(boolean) => Val::Bool;
166 ], {161 ], {
167 Ok(Val::Bool(162 Ok(Val::Bool(obj.has_field_ex(f, inc_hidden)))
168 obj.fields_visibility()
169 .into_iter()
170 .filter(|(_k, v)| *v || inc_hidden)
171 .any(|(k, _v)| *k == *f),
172 ))
173 })163 })
174}164}
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
3 throw, LazyBinding, LazyVal, ObjMember, ObjValue, Val,3 throw, LazyBinding, LazyVal, ObjMember, ObjValue, Val,
4};4};
5use jrsonnet_parser::Visibility;5use jrsonnet_parser::Visibility;
6use rustc_hash::FxHasher;
6use serde_json::{Map, Number, Value};7use serde_json::{Map, Number, Value};
7use std::{8use std::{
8 collections::HashMap,9 collections::HashMap,
9 convert::{TryFrom, TryInto},10 convert::{TryFrom, TryInto},
11 hash::BuildHasherDefault,
10 rc::Rc,12 rc::Rc,
11};13};
1214
31 }33 }
32 Val::Obj(o) => {34 Val::Obj(o) => {
33 let mut out = Map::new();35 let mut out = Map::new();
34 for key in o.visible_fields() {36 for key in o.fields() {
35 out.insert(37 out.insert(
36 (&key as &str).into(),38 (&key as &str).into(),
37 (&o.get(key)?.expect("field exists")).try_into()?,39 (&o.get(key)?.expect("field exists")).try_into()?,
59 Self::Arr(out.into())61 Self::Arr(out.into())
60 }62 }
61 Value::Object(o) => {63 Value::Object(o) => {
62 let mut entries = HashMap::with_capacity(o.len());64 let mut entries = HashMap::with_capacity_and_hasher(
65 o.len(),
66 BuildHasherDefault::<FxHasher>::default(),
67 );
63 for (k, v) in o {68 for (k, v) in o {
64 entries.insert(69 entries.insert(
modifiedcrates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth
395 Self::Obj(obj) => obj,395 Self::Obj(obj) => obj,
396 _ => throw!(MultiManifestOutputIsNotAObject),396 _ => throw!(MultiManifestOutputIsNotAObject),
397 };397 };
398 let keys = obj.visible_fields();398 let keys = obj.fields();
399 let mut out = Vec::with_capacity(keys.len());399 let mut out = Vec::with_capacity(keys.len());
400 for key in keys {400 for key in keys {
401 let value = obj401 let value = obj
588 if ObjValue::ptr_eq(a, b) {588 if ObjValue::ptr_eq(a, b) {
589 return Ok(true);589 return Ok(true);
590 }590 }
591 let fields = a.visible_fields();591 let fields = a.fields();
592 if fields != b.visible_fields() {592 if fields != b.fields() {
593 return Ok(false);593 return Ok(false);
594 }594 }
595 for field in fields {595 for field in fields {