git.delta.rocks / jrsonnet / refs/commits / 8f97cd5c0f83

difftreelog

chore move entry ids to oop object

xukuusknYaroslav Bolyukin2026-05-05parent: #ff546d6.patch.diff
in: master

2 files changed

modifiedcrates/jrsonnet-evaluator/src/obj/mod.rsdiffbeforeafterboth
136#[derive(Debug, Trace)]136#[derive(Debug, Trace)]
137pub struct ObjMember {137pub struct ObjMember {
138 flags: ObjFieldFlags,138 flags: ObjFieldFlags,
139 original_index: FieldIndex,
140 pub invoke: MaybeUnbound,139 pub invoke: MaybeUnbound,
141 pub location: Option<Span>,140 pub location: Option<Span>,
142}141}
1048 self.location = Some(location);1047 self.location = Some(location);
1049 self1048 self
1050 }1049 }
1051 fn build_member(self, binding: MaybeUnbound) -> (Kind, IStr, ObjMember) {1050 fn build_member(self, binding: MaybeUnbound) -> (Kind, IStr, FieldIndex, ObjMember) {
1052 (1051 (
1053 self.kind,1052 self.kind,
1054 self.name,1053 self.name,
1054 self.original_index,
1055 ObjMember {1055 ObjMember {
1056 flags: ObjFieldFlags::new(self.add, self.visibility),1056 flags: ObjFieldFlags::new(self.add, self.visibility),
1057 original_index: self.original_index,
1058 invoke: binding,1057 invoke: binding,
1059 location: self.location,1058 location: self.location,
1060 },1059 },
1071 self.binding(MaybeUnbound::Unbound(CcUnbound::new(bindable)));1070 self.binding(MaybeUnbound::Unbound(CcUnbound::new(bindable)));
1072 }1071 }
1073 pub fn binding(self, binding: MaybeUnbound) {1072 pub fn binding(self, binding: MaybeUnbound) {
1074 let (receiver, name, member) = self.build_member(binding);1073 let (receiver, name, _, member) = self.build_member(binding);
1075 let new = receiver.0.clone();1074 let new = receiver.0.clone();
1076 *receiver.0 = new.extend_with_raw_member(name, member);1075 *receiver.0 = new.extend_with_raw_member(name, member);
1077 }1076 }
modifiedcrates/jrsonnet-evaluator/src/obj/oop.rsdiffbeforeafterboth
--- 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<CcObjectAssertion>,
-	this_entries: FxHashMap<IStr, ObjMember>,
+	this_entries: FxHashMap<IStr, (ObjMember, FieldIndex)>,
 }
 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<IStr, ObjMember>,
+		this_entries: FxHashMap<IStr, (ObjMember, FieldIndex)>,
 		assertion: Option<CcObjectAssertion>,
 	) -> 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<ValueBuilder<'_>> {
 	/// Inserts value, replacing if it is already defined
 	pub fn value(self, value: impl Into<Val>) {
-		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<Thunk<Val>>) {
-		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()),