From 8f97cd5c0f83a679d7d431f0af250d529abd99af Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sun, 26 Apr 2026 19:28:08 +0000 Subject: [PATCH] chore: move entry ids to oop object --- --- a/crates/jrsonnet-evaluator/src/obj/mod.rs +++ b/crates/jrsonnet-evaluator/src/obj/mod.rs @@ -136,7 +136,6 @@ #[derive(Debug, Trace)] pub struct ObjMember { flags: ObjFieldFlags, - original_index: FieldIndex, pub invoke: MaybeUnbound, pub location: Option, } @@ -1048,13 +1047,13 @@ self.location = Some(location); self } - fn build_member(self, binding: MaybeUnbound) -> (Kind, IStr, ObjMember) { + fn build_member(self, binding: MaybeUnbound) -> (Kind, IStr, FieldIndex, ObjMember) { ( self.kind, self.name, + self.original_index, ObjMember { flags: ObjFieldFlags::new(self.add, self.visibility), - original_index: self.original_index, invoke: binding, location: self.location, }, @@ -1071,7 +1070,7 @@ self.binding(MaybeUnbound::Unbound(CcUnbound::new(bindable))); } pub fn binding(self, binding: MaybeUnbound) { - let (receiver, name, member) = self.build_member(binding); + let (receiver, name, _, member) = self.build_member(binding); let new = receiver.0.clone(); *receiver.0 = new.extend_with_raw_member(name, member); } --- a/crates/jrsonnet-evaluator/src/obj/oop.rs +++ b/crates/jrsonnet-evaluator/src/obj/oop.rs @@ -27,7 +27,7 @@ #[trace(tracking(force))] pub struct OopObject { assertion: Option, - this_entries: FxHashMap, + this_entries: FxHashMap, } impl fmt::Debug for OopObject { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { @@ -43,7 +43,7 @@ } impl OopObject { pub fn new( - this_entries: FxHashMap, + this_entries: FxHashMap, assertion: Option, ) -> Self { Self { @@ -59,11 +59,11 @@ super_depth: &mut SuperDepth, handler: &mut EnumFieldsHandler<'_>, ) -> bool { - for (name, member) in &self.this_entries { + for (name, (member, idx)) in &self.this_entries { if matches!( handler( *super_depth, - member.original_index, + *idx, name.clone(), EnumFields::Normal(member.flags.visibility()), ), @@ -88,7 +88,7 @@ return Ok(GetFor::NotFound); } match self.this_entries.get(&key) { - Some(k) => { + Some((k, _)) => { let v = k.invoke.evaluate(sup_this)?; Ok(if k.flags.add() { GetFor::SuperPlus(v) @@ -102,7 +102,7 @@ fn field_visibility_core(&self, name: IStr) -> FieldVisibility { self.this_entries .get(&name) - .map_or(FieldVisibility::NotFound, |f| { + .map_or(FieldVisibility::NotFound, |(f, _)| { FieldVisibility::Found(f.flags.visibility()) }) } @@ -219,16 +219,16 @@ impl ObjMemberBuilder> { /// Inserts value, replacing if it is already defined pub fn value(self, value: impl Into) { - let (receiver, name, member) = + let (receiver, name, idx, member) = self.build_member(MaybeUnbound::Bound(Thunk::evaluated(value.into()))); let entry = receiver.0.new.this_entries.entry(name); - entry.insert_entry(member); + entry.insert_entry((member, idx)); } /// Inserts thunk, replacing if it is already defined pub fn thunk(self, value: impl Into>) { - let (receiver, name, member) = self.build_member(MaybeUnbound::Bound(value.into())); + let (receiver, name, idx, member) = self.build_member(MaybeUnbound::Bound(value.into())); let entry = receiver.0.new.this_entries.entry(name); - entry.insert_entry(member); + entry.insert_entry((member, idx)); } /// Tries to insert value, returns an error if it was already defined @@ -242,9 +242,13 @@ self.binding(MaybeUnbound::Unbound(CcUnbound::new(bindable))) } pub fn binding(self, binding: MaybeUnbound) -> Result<()> { - let (receiver, name, member) = self.build_member(binding); + let (receiver, name, idx, member) = self.build_member(binding); let location = member.location.clone(); - let old = receiver.0.new.this_entries.insert(name.clone(), member); + let old = receiver + .0 + .new + .this_entries + .insert(name.clone(), (member, idx)); if old.is_some() { in_frame( CallLocation(location.as_ref()), -- gitstuff