diff --git a/src/calltree.js b/src/calltree.js index d1c1a57..5b4a6a2 100644 --- a/src/calltree.js +++ b/src/calltree.js @@ -1,3 +1,4 @@ +import {update_children} from './parse_js.js' import {map_accum, map_find, map_object, stringify, findLast} from './utils.js' import {is_eq, find_error_origin_node} from './ast_utils.js' import {find_node, find_leaf, ancestry_inc} from './ast_utils.js' @@ -147,7 +148,7 @@ export const add_frame = ( let frame frame = state.frames?.[active_calltree_node.id] if(frame == null) { - frame = eval_frame(active_calltree_node, state.modules) + frame = update_children(eval_frame(active_calltree_node, state.modules)) const execution_paths = active_calltree_node.toplevel ? null : get_execution_paths(frame) diff --git a/src/eval.js b/src/eval.js index 2cb624e..9e8792b 100644 --- a/src/eval.js +++ b/src/eval.js @@ -1029,9 +1029,12 @@ const eval_decl_pair = (s, eval_cxt, frame_cxt) => { } }) ), - n => n.result == null - ? {...n, result: {ok}} - : n + n => + // TODO this should set result for default values in destructuring + // Currently not implemented + n.result == null + ? {...n, result: {ok}} + : n ) const s_evaled = {...s_expr_evaled, children: [ diff --git a/src/parse_js.js b/src/parse_js.js index 4af05ce..a9e5345 100644 --- a/src/parse_js.js +++ b/src/parse_js.js @@ -1561,7 +1561,7 @@ const update_children_not_rec = (node, children = node.children) => { } } -const update_children = node => { +export const update_children = node => { if(Array.isArray(node)) { return node.map(update_children) } else { diff --git a/test/test.js b/test/test.js index d855aa4..2a31b57 100644 --- a/test/test.js +++ b/test/test.js @@ -873,9 +873,15 @@ export const tests = [ const frame = active_frame(i) assert_equal( // value for z in return statement - frame.children[1].children[0].children[0].result.value, + find_node(frame.children[1], n => n.value == 'z').result.value, 1 ) + // TODO not implemented + //assert_equal( + // // value for x in arguments + // find_node(frame.children[0], n => n.value == 'x').result.value, + // 1 + //) }), test('array spread not iterable', () => { @@ -2653,6 +2659,12 @@ const y = x()` }) }), + test('move_cursor destructuring default', () => { + const code = `const [x = 1, y] = [undefined, 2]` + const s = test_initial_state(code) + assert_equal(s.value_explorer.result.value, {x: 1, y: 2}) + }), + test('move_cursor after type toplevel', () => { const code = `1` const s1 = test_initial_state(code)