difftreelog
chore move entry ids to oop object
in: master
2 files changed
crates/jrsonnet-evaluator/src/obj/mod.rsdiffbeforeafterboth136#[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 self1050 }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 }crates/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()),