mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-13 21:14:28 -08:00
refactor async_calls WIP: tests work
This commit is contained in:
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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')
|
||||||
}),
|
}),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user