Skip to content

Commit 48a26ec

Browse files
committed
simple execution engine fix, doesn't solve all of the issues
1 parent 1838d2b commit 48a26ec

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

core/compiler/src/compile.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2875,17 +2875,18 @@ impl<'a> ExecPass<'a> {
28752875
}
28762876

28772877
fn eval_partial(&mut self, vid: ValueId) -> Result<bool, ()> {
2878-
let v = self.values.swap_remove(&vid);
2878+
let v = self.values.get(&vid);
28792879
if v.is_none() {
2880+
self.values.swap_remove(&vid);
28802881
return Ok(false);
28812882
}
28822883
let mut v = v.unwrap();
2883-
let vref = v.as_mut();
2884+
let vref = v.as_ref();
28842885
if vref.is_ready() {
2885-
self.values.insert(vid, v);
28862886
return Ok(false);
28872887
}
2888-
let vref = vref.unwrap_deferred();
2888+
let mut vref = vref.unwrap_deferred().clone();
2889+
let cell_id = vref.loc.cell;
28892890
let state = self.cell_states.get_mut(&vref.loc.cell).unwrap();
28902891
let progress = match &mut vref.state {
28912892
PartialEvalState::Call(c) => match c.expr.func.path.last().unwrap().name.as_str() {
@@ -3597,6 +3598,7 @@ impl<'a> ExecPass<'a> {
35973598
);
35983599
if_.state = IfExprState::Else(else_);
35993600
}
3601+
self.values.insert(vid, Defer::Deferred(vref));
36003602
true
36013603
} else {
36023604
false
@@ -3631,6 +3633,7 @@ impl<'a> ExecPass<'a> {
36313633
.unwrap();
36323634
let value = self.visit_expr(vref.loc, &arm.expr);
36333635
match_.state = MatchExprState::Value(value);
3636+
self.values.insert(vid, Defer::Deferred(vref));
36343637
true
36353638
} else {
36363639
false
@@ -3956,8 +3959,6 @@ impl<'a> ExecPass<'a> {
39563959
}
39573960
};
39583961

3959-
let cell_id = vref.loc.cell;
3960-
self.values.entry(vid).or_insert(v);
39613962
if self.values[&vid].is_ready() {
39623963
self.cell_state_mut(cell_id).deferred.swap_remove(&vid);
39633964
}

0 commit comments

Comments
 (0)