mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-13 21:14:28 -08:00
guard againt simultaneous execution
This commit is contained in:
@@ -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
|
||||
|
||||
7
src/effects.js
vendored
7
src/effects.js
vendored
@@ -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
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
@@ -2875,6 +2875,7 @@ const y = x()`
|
||||
const {state: after_edit} = COMMANDS.input(i, code2, code2.indexOf('1'))
|
||||
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,
|
||||
|
||||
@@ -70,6 +70,7 @@ export const test_initial_state_async = async code => {
|
||||
assert_equal(s.eval_modules_state != null, true)
|
||||
const result = await s.eval_modules_state.promise
|
||||
return COMMANDS.eval_modules_finished(
|
||||
s,
|
||||
s,
|
||||
result,
|
||||
s.eval_modules_state.node,
|
||||
|
||||
Reference in New Issue
Block a user