mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-13 13:04:30 -08:00
fix deferred call bug
This commit is contained in:
@@ -545,6 +545,8 @@ const __save_ct_node_for_path = (cxt, __calltree_node_by_loc, index, __call_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let ct_expansion_id_gen = 0
|
||||||
|
|
||||||
export const with_version_number = (rt_cxt, version_number, action) => {
|
export const with_version_number = (rt_cxt, version_number, action) => {
|
||||||
if(rt_cxt.logs == null) {
|
if(rt_cxt.logs == null) {
|
||||||
// check that argument is rt_cxt
|
// check that argument is rt_cxt
|
||||||
@@ -559,12 +561,12 @@ export const with_version_number = (rt_cxt, version_number, action) => {
|
|||||||
rt_cxt.is_expanding_calltree_node = true
|
rt_cxt.is_expanding_calltree_node = true
|
||||||
const version_counter_copy = rt_cxt.version_counter
|
const version_counter_copy = rt_cxt.version_counter
|
||||||
rt_cxt.version_counter = version_number
|
rt_cxt.version_counter = version_number
|
||||||
rt_cxt.ct_expansion_id = rt_cxt.ct_expansion_id == null
|
const ct_expansion_id = rt_cxt.ct_expansion_id
|
||||||
? 0
|
rt_cxt.ct_expansion_id = ct_expansion_id_gen++
|
||||||
: rt_cxt.ct_expansion_id + 1
|
|
||||||
try {
|
try {
|
||||||
return action()
|
return action()
|
||||||
} finally {
|
} finally {
|
||||||
|
rt_cxt.ct_expansion_id = ct_expansion_id
|
||||||
rt_cxt.is_expanding_calltree_node = false
|
rt_cxt.is_expanding_calltree_node = false
|
||||||
rt_cxt.version_counter = version_counter_copy
|
rt_cxt.version_counter = version_counter_copy
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4776,7 +4776,9 @@ const y = x()`
|
|||||||
inc()
|
inc()
|
||||||
`
|
`
|
||||||
|
|
||||||
const {state: i, on_deferred_call} = test_deferred_calls_state(code)
|
const {state: i, on_deferred_call} = test_deferred_calls_state(code, code.indexOf('let x'))
|
||||||
|
|
||||||
|
assert_value_explorer(i, 0)
|
||||||
|
|
||||||
// Make deferred call
|
// Make deferred call
|
||||||
i.modules[''].inc()
|
i.modules[''].inc()
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ export const input_async = async (s, code, index, options) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const test_deferred_calls_state = code => {
|
export const test_deferred_calls_state = (code, index) => {
|
||||||
const {get_deferred_call, on_deferred_call} = (new Function(`
|
const {get_deferred_call, on_deferred_call} = (new Function(`
|
||||||
let args
|
let args
|
||||||
return {
|
return {
|
||||||
@@ -179,7 +179,7 @@ export const test_deferred_calls_state = code => {
|
|||||||
}
|
}
|
||||||
`))()
|
`))()
|
||||||
|
|
||||||
const state = test_initial_state(code, null, { on_deferred_call })
|
const state = test_initial_state(code, index, { on_deferred_call })
|
||||||
|
|
||||||
return {
|
return {
|
||||||
state,
|
state,
|
||||||
|
|||||||
Reference in New Issue
Block a user