add a simulator #3

Merged
programmerjake merged 58 commits from adding-simulator into master 2024-12-16 04:06:48 +00:00
Showing only changes of commit 5087f16099 - Show all commits

View file

@ -458,6 +458,9 @@ impl Assignments {
slot_readers
.keys_for_assignment(assignment_index)
.extend([&assignment.inputs]);
slot_readers
.keys_for_assignment(assignment_index)
.extend(&assignment.conditions);
let SlotSet(TypeParts {
small_slots,
big_slots,
@ -1400,6 +1403,30 @@ impl<'a> Extend<&'a SlotSet> for SlotToAssignmentIndexFullMapKeysForAssignment<'
}
}
impl<'a> Extend<&'a Cond> for SlotToAssignmentIndexFullMapKeysForAssignment<'_> {
fn extend<T: IntoIterator<Item = &'a Cond>>(&mut self, iter: T) {
iter.into_iter().for_each(|cond| match cond.body {
CondBody::IfTrue { cond } | CondBody::IfFalse { cond } => {
let CompiledValue {
range:
TypeIndexRange {
small_slots,
big_slots,
},
layout: _,
write: _,
} = cond;
self.extend(small_slots.iter());
self.extend(big_slots.iter());
}
CondBody::MatchArm {
discriminant,
variant_index: _,
} => self.extend([discriminant]),
});
}
}
impl Assignment {
fn new(
conditions: Interned<[Cond]>,