introduce modules evaluated

This commit is contained in:
Dmitry Vasilev
2022-12-02 09:08:00 +08:00
parent 747bceda7b
commit f561e9df7d

View File

@@ -174,7 +174,7 @@ const external_imports_loaded = (
const node = find_call_node(state, current_cursor_position(state)) const node = find_call_node(state, current_cursor_position(state))
let active_calltree_node, next let toplevel, result
if( if(
// edit module that is not imported (maybe recursively by state.entrypoint) // edit module that is not imported (maybe recursively by state.entrypoint)
@@ -183,14 +183,33 @@ const external_imports_loaded = (
|| ||
node.type == 'do' /* toplevel AST node */ node.type == 'do' /* toplevel AST node */
) { ) {
const result = eval_modules( result = eval_modules(
state.parse_result, state.parse_result,
external_imports, external_imports,
state.on_deferred_call, state.on_deferred_call,
state.calltree_changed_token, state.calltree_changed_token,
) )
next = apply_eval_result(state, result) toplevel = true
} else {
result = eval_modules(
state.parse_result,
external_imports,
state.on_deferred_call,
state.calltree_changed_token,
{index: node.index, module: state.current_module},
)
toplevel = false
}
return modules_evaluated(state, result, node, toplevel)
}
const modules_evaluated = (state, result, node, toplevel) => {
const next = apply_eval_result(state, result)
let active_calltree_node
if(toplevel) {
if(node == state.parse_result.modules[root_calltree_module(next)]) { if(node == state.parse_result.modules[root_calltree_module(next)]) {
active_calltree_node = root_calltree_node(next) active_calltree_node = root_calltree_node(next)
return add_frame( return add_frame(
@@ -206,16 +225,6 @@ const external_imports_loaded = (
active_calltree_node = null active_calltree_node = null
} }
} else { } else {
const result = eval_modules(
state.parse_result,
external_imports,
state.on_deferred_call,
state.calltree_changed_token,
{index: node.index, module: state.current_module},
)
next = apply_eval_result(state, result)
if(result.call == null) { if(result.call == null) {
// Unreachable call // Unreachable call
active_calltree_node = null active_calltree_node = null