refactor async_calls WIP: tests work

This commit is contained in:
Dmitry Vasilev
2022-11-16 13:39:29 +08:00
parent 4f1f6c2f7e
commit 9f97a43f42
3 changed files with 14 additions and 47 deletions

View File

@@ -153,31 +153,13 @@ const replace_calltree_node = (root, node, replacement) => {
return result return result
} }
// TODO remove, after refactoring async_calls
const replace_calltree_node_in_state = (state, node, replacement) => {
const replaced = replace_calltree_node(
{
children: [
root_calltree_node(state),
{children: state.async_calls},
]
},
node,
replacement
)
return {...state,
calltree: {children: [replaced.children[0]]},
async_calls: replaced.children[1].children,
}
}
const expand_calltree_node = (state, node) => { const expand_calltree_node = (state, node) => {
if(node.has_more_children) { if(node.has_more_children) {
const next_node = state.calltree_actions.expand_calltree_node(node) const next_node = state.calltree_actions.expand_calltree_node(node)
return { return {
state: replace_calltree_node_in_state(state, node, next_node), state: {...state,
calltree: replace_calltree_node(state.calltree, node, next_node)
},
node: next_node node: next_node
} }
} else { } else {
@@ -204,25 +186,12 @@ const jump_calltree_node = (_state, _current_calltree_node) => {
/* Whether to show fn body (true) or callsite (false) */ /* Whether to show fn body (true) or callsite (false) */
let show_body let show_body
const [_parent] = path_to_root( const [parent] = path_to_root(state.calltree, current_calltree_node)
{
children: [
root_calltree_node(state),
{children: state.async_calls},
]
},
current_calltree_node
)
const parent = _parent.id == null
? current_calltree_node
: _parent
if( if(
current_calltree_node.toplevel current_calltree_node.toplevel
|| ||
/* async call */ parent.id == 'async_calls'
parent == current_calltree_node
) { ) {
show_body = true show_body = true
} else if(is_native_fn(current_calltree_node)) { } else if(is_native_fn(current_calltree_node)) {
@@ -667,15 +636,13 @@ export const find_call = (state, index) => {
) )
} }
const merged = { const merged = make_calltree(
children: [
merge_calltrees(root_calltree_node(state), calltree), merge_calltrees(root_calltree_node(state), calltree),
state.calltree.children[1], get_async_calls(state),
], )
}
const active_calltree_node = find_same_node( const active_calltree_node = find_same_node(
merged.children[0], root_calltree_node({calltree: merged}),
calltree, calltree,
call.id call.id
) )

View File

@@ -39,7 +39,7 @@ const apply_eval_result = (state, eval_result) => {
return { return {
...state, ...state,
calltree: {children: [eval_result.calltree]}, calltree: make_calltree(eval_result.calltree, null),
calltree_actions: eval_result.calltree_actions, calltree_actions: eval_result.calltree_actions,
logs: {logs, log_position: null}, logs: {logs, log_position: null},
modules: eval_result.modules, modules: eval_result.modules,

View File

@@ -2,7 +2,7 @@ import {find_leaf, ancestry, find_node} from '../src/ast_utils.js'
import {parse, print_debug_node} from '../src/parse_js.js' import {parse, print_debug_node} from '../src/parse_js.js'
import {eval_tree, eval_frame, eval_modules} from '../src/eval.js' import {eval_tree, eval_frame, eval_modules} from '../src/eval.js'
import {COMMANDS, get_initial_state} from '../src/cmd.js' import {COMMANDS, get_initial_state} from '../src/cmd.js'
import {root_calltree_node, active_frame, pp_calltree} import {root_calltree_node, active_frame, pp_calltree, get_async_calls}
from '../src/calltree.js' from '../src/calltree.js'
import {color_file} from '../src/color.js' import {color_file} from '../src/color.js'
import { import {
@@ -2344,13 +2344,13 @@ const y = x()`
assert_equal(call.code.index, code.indexOf('() => {')) assert_equal(call.code.index, code.indexOf('() => {'))
assert_equal(call.args, [10]) assert_equal(call.args, [10])
const state = COMMANDS.on_async_call(i, call) const state = COMMANDS.on_async_call(i, call)
assert_equal(state.async_calls, [call]) assert_equal(get_async_calls(state), [call])
assert_equal(state.logs.logs.length, 1) assert_equal(state.logs.logs.length, 1)
// Expand call // Expand call
const {state: expanded} = COMMANDS.calltree.click(state, call.id) const {state: expanded} = COMMANDS.calltree.click(state, call.id)
assert_equal(expanded.async_calls[0].children[0].fn.name, 'fn2') assert_equal(get_async_calls(expanded)[0].children[0].fn.name, 'fn2')
}), }),
] ]