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 {
|
} 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)
|
const next = apply_eval_result(state, result)
|
||||||
|
|
||||||
let active_calltree_node
|
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
|
const s = next.eval_modules_state
|
||||||
s.promise.then(result => {
|
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)
|
assert_equal(loaded.eval_modules_state != null, true)
|
||||||
const s = loaded.eval_modules_state
|
const s = loaded.eval_modules_state
|
||||||
const result = await s.promise
|
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 root = root_calltree_node(state)
|
||||||
const run = root.children[0]
|
const run = root.children[0]
|
||||||
|
|
||||||
|
|||||||
@@ -2875,6 +2875,7 @@ const y = x()`
|
|||||||
const {state: after_edit} = COMMANDS.input(i, code2, code2.indexOf('1'))
|
const {state: after_edit} = COMMANDS.input(i, code2, code2.indexOf('1'))
|
||||||
const result = await after_edit.eval_modules_state.promise
|
const result = await after_edit.eval_modules_state.promise
|
||||||
const after_edit_finished = COMMANDS.eval_modules_finished(
|
const after_edit_finished = COMMANDS.eval_modules_finished(
|
||||||
|
after_edit,
|
||||||
after_edit,
|
after_edit,
|
||||||
result,
|
result,
|
||||||
after_edit.eval_modules_state.node,
|
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)
|
assert_equal(s.eval_modules_state != null, true)
|
||||||
const result = await s.eval_modules_state.promise
|
const result = await s.eval_modules_state.promise
|
||||||
return COMMANDS.eval_modules_finished(
|
return COMMANDS.eval_modules_finished(
|
||||||
|
s,
|
||||||
s,
|
s,
|
||||||
result,
|
result,
|
||||||
s.eval_modules_state.node,
|
s.eval_modules_state.node,
|
||||||
|
|||||||
Reference in New Issue
Block a user