diff --git a/src/cmd.js b/src/cmd.js index d774fc8..7ea902f 100644 --- a/src/cmd.js +++ b/src/cmd.js @@ -216,11 +216,15 @@ const external_imports_loaded = ( } } } else { - return eval_modules_finished(state, result, node, toplevel) + return eval_modules_finished(state, state, result, node, toplevel) } } -const eval_modules_finished = (state, result, node, toplevel) => { +const eval_modules_finished = (state, prev_state, result, node, toplevel) => { + if(state.calltree_changed_token != prev_state.calltree_changed_token) { + // code was modified after prev vesion of code was executed, discard + return state + } const next = apply_eval_result(state, result) let active_calltree_node diff --git a/src/effects.js b/src/effects.js index cc20e9b..eec0c4d 100644 --- a/src/effects.js +++ b/src/effects.js @@ -182,7 +182,12 @@ export const render_common_side_effects = async (prev, next, command, ui) => { ) { const s = next.eval_modules_state s.promise.then(result => { - exec('eval_modules_finished', result, s.node, s.toplevel) + exec('eval_modules_finished', + next, /* becomes prev_state */ + result, + s.node, + s.toplevel + ) }) } diff --git a/test/self_hosted_test.js b/test/self_hosted_test.js index aa30261..2b38b69 100644 --- a/test/self_hosted_test.js +++ b/test/self_hosted_test.js @@ -85,7 +85,7 @@ const loaded = i assert_equal(loaded.eval_modules_state != null, true) const s = loaded.eval_modules_state const result = await s.promise -const state = COMMANDS.eval_modules_finished(loaded , result, s.node, s.toplevel) +const state = COMMANDS.eval_modules_finished(loaded, loaded, result, s.node, s.toplevel) const root = root_calltree_node(state) const run = root.children[0] diff --git a/test/test.js b/test/test.js index 1134dde..2a637e1 100644 --- a/test/test.js +++ b/test/test.js @@ -2876,6 +2876,7 @@ const y = x()` const result = await after_edit.eval_modules_state.promise const after_edit_finished = COMMANDS.eval_modules_finished( after_edit, + after_edit, result, after_edit.eval_modules_state.node, after_edit.eval_modules_state.toplevel diff --git a/test/utils.js b/test/utils.js index 24db328..0ae8dc2 100644 --- a/test/utils.js +++ b/test/utils.js @@ -71,6 +71,7 @@ export const test_initial_state_async = async code => { const result = await s.eval_modules_state.promise return COMMANDS.eval_modules_finished( s, + s, result, s.eval_modules_state.node, s.eval_modules_state.toplevel