From 3281bbdee988aa4de0d1c920ba5844a004cc440d Mon Sep 17 00:00:00 2001 From: Dmitry Vasilev Date: Fri, 16 Jun 2023 07:47:27 +0300 Subject: [PATCH] fix deferred calls bug --- src/runtime.js | 4 +++- test/test.js | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/runtime.js b/src/runtime.js index 4d8d6cf..752c51e 100644 --- a/src/runtime.js +++ b/src/runtime.js @@ -185,7 +185,9 @@ export const do_eval_expand_calltree_node = (cxt, node) => { // do nothing. Exception was caught and recorded inside '__trace' } cxt.is_recording_deferred_calls = true - return do_expand_calltree_node(cxt, node) + const result = do_expand_calltree_node(cxt, node) + cxt.children = null + return result } diff --git a/test/test.js b/test/test.js index 62bf1cc..9998fa7 100644 --- a/test/test.js +++ b/test/test.js @@ -2756,6 +2756,23 @@ const y = x()` assert_equal(get_deferred_calls(result), null) }), + test('deferred_calls several calls bug', () => { + const code = ` + export const fn = i => i == 0 ? 0 : fn(i - 1) + ` + + const {state: i, on_deferred_call} = test_deferred_calls_state(code) + + // Make deferred call + i.modules[''].fn(10) + + const state = on_deferred_call(i) + const call = get_deferred_calls(state)[0] + const expanded = COMMANDS.calltree.click(state, call.id) + // Make deferred call again. There was a runtime error + expanded.modules[''].fn(10) + }), + test('async/await await non promise', async () => { await assert_code_evals_to_async( `