refactor multiversion

This commit is contained in:
Dmitry Vasilev
2023-11-27 18:22:40 +08:00
parent 2889d9ed45
commit 32f7851081
3 changed files with 39 additions and 27 deletions

View File

@@ -194,7 +194,9 @@ export const set_record_call = cxt => {
export const do_eval_expand_calltree_node = (cxt, node) => {
cxt.is_recording_deferred_calls = false
cxt.is_expanding_calltree_node = true
cxt.touched_multiversions = new Set()
cxt.expand_calltree_node_number = cxt.expand_calltree_node_number == null
? 0
: cxt.expand_calltree_node_number + 1
// Save call counter and set it to the value it had when executed 'fn' for
// the first time
@@ -227,16 +229,6 @@ export const do_eval_expand_calltree_node = (cxt, node) => {
// Restore version_counter
cxt.version_counter = version_counter
// Recover multiversions affected by expand_calltree_node
for(let m of cxt.touched_multiversions) {
if(m.is_expanding_calltree_node) {
delete m.is_expanding_calltree_node
}
if(m.latest_copy != null) {
m.latest = m.latest_copy.value
}
}
delete cxt.touched_multiversions
cxt.is_expanding_calltree_node = false
cxt.is_recording_deferred_calls = true