From 810e6178f8c4ad68006ddc1f45207d0f1e111ec2 Mon Sep 17 00:00:00 2001 From: Dmitry Vasilev Date: Sat, 2 Mar 2024 12:45:56 +0800 Subject: [PATCH] fix deferred call bug --- src/runtime/runtime.js | 8 +++++--- test/test.js | 4 +++- test/utils.js | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/runtime/runtime.js b/src/runtime/runtime.js index a14508f..af11a1d 100644 --- a/src/runtime/runtime.js +++ b/src/runtime/runtime.js @@ -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) => { if(rt_cxt.logs == null) { // 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 const version_counter_copy = rt_cxt.version_counter rt_cxt.version_counter = version_number - rt_cxt.ct_expansion_id = rt_cxt.ct_expansion_id == null - ? 0 - : rt_cxt.ct_expansion_id + 1 + const ct_expansion_id = rt_cxt.ct_expansion_id + rt_cxt.ct_expansion_id = ct_expansion_id_gen++ try { return action() } finally { + rt_cxt.ct_expansion_id = ct_expansion_id rt_cxt.is_expanding_calltree_node = false rt_cxt.version_counter = version_counter_copy } diff --git a/test/test.js b/test/test.js index e125b1e..e9f6692 100644 --- a/test/test.js +++ b/test/test.js @@ -4776,7 +4776,9 @@ const y = x()` 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 i.modules[''].inc() diff --git a/test/utils.js b/test/utils.js index 6e399f7..0421eb9 100644 --- a/test/utils.js +++ b/test/utils.js @@ -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(` let args 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 { state,