discard async calls from prev code run

This commit is contained in:
Dmitry Vasilev
2022-11-29 04:22:56 +08:00
parent 0332d5a0b8
commit 6ea107d057
4 changed files with 72 additions and 66 deletions

View File

@@ -180,6 +180,7 @@ const do_external_imports_loaded = (
state.parse_result,
external_imports,
state.on_async_call,
state.calltree_changed_token,
)
const next = apply_eval_result(state, result)
@@ -202,6 +203,7 @@ const do_external_imports_loaded = (
state.parse_result,
external_imports,
state.on_async_call,
state.calltree_changed_token,
{index: node.index, module: state.current_module},
)
@@ -744,7 +746,10 @@ const move_cursor = (s, index) => {
return do_move_cursor(state, index)
}
const on_async_call = (state, call) => {
const on_async_call = (state, call, calltree_changed_token) => {
if(state.calltree_changed_token != calltree_changed_token) {
return state
}
return {...state,
calltree: make_calltree(
root_calltree_node(state),

View File

@@ -257,6 +257,7 @@ export const eval_modules = (
parse_result,
external_imports,
on_async_call,
calltree_changed_token,
location
) => {
// TODO gensym __modules, __exports
@@ -429,7 +430,7 @@ export const eval_modules = (
}
const call = children[0]
children = null
on_async_call(call)
on_async_call(call, calltree_changed_token)
}
}
}
@@ -567,6 +568,7 @@ export const eval_modules = (
const actions = make_function(
'external_imports',
'on_async_call',
'calltree_changed_token',
codestring
)(
/* external_imports */
@@ -575,7 +577,15 @@ export const eval_modules = (
: map_object(external_imports, (name, {module}) => module),
/* on_async_call */
call => on_async_call(assign_code(parse_result.modules, call))
(call, calltree_changed_token) => {
return on_async_call(
assign_code(parse_result.modules, call),
calltree_changed_token,
)
},
/* calltree_changed_token */
calltree_changed_token
)
const calltree_actions = {