diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-04-20 22:16:39 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-04-20 22:16:39 +0200 |
commit | 9ce47ec0b65f81358febacbd9b808ac8ef7af85c (patch) | |
tree | 8fa0092fcaf1c7c287f3d0aec2aaa8102fdfde44 | |
parent | 5c787fb7928c4cc1e7d6eec0be1bbd63d903cc8d (diff) | |
download | vim-git-9ce47ec0b65f81358febacbd9b808ac8ef7af85c.tar.gz |
patch 8.2.2792: Vim9: :disas shows instructions for default args but no textv8.2.2792
Problem: Vim9: :disas shows instructions for default args but no text.
Solution: Show the expression test above the default argument instructions.
(closes #8129)
-rw-r--r-- | src/testdir/test_vim9_disassemble.vim | 6 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9execute.c | 19 |
3 files changed, 25 insertions, 2 deletions
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim index bf88d9396..b1c1c1832 100644 --- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -724,20 +724,22 @@ def Test_disassemble_update_instr() enddef -def FuncWithDefault(arg: string = 'default', nr = 77): string +def FuncWithDefault(l: number, arg: string = "default", nr = 77): string return arg .. nr enddef def Test_disassemble_call_default() var res = execute('disass FuncWithDefault') assert_match('FuncWithDefault\_s*' .. + ' arg = "default"\_s*' .. '\d JUMP_IF_ARG_SET arg\[-2\] -> 3\_s*' .. '\d PUSHS "default"\_s*' .. '\d STORE arg\[-2]\_s*' .. + ' nr = 77\_s*' .. '3 JUMP_IF_ARG_SET arg\[-1\] -> 6\_s*' .. '\d PUSHNR 77\_s*' .. '\d STORE arg\[-1]\_s*' .. - 'return arg .. nr\_s*' .. + ' return arg .. nr\_s*' .. '6 LOAD arg\[-2]\_s*' .. '\d LOAD arg\[-1]\_s*' .. '\d 2STRING stack\[-1]\_s*' .. diff --git a/src/version.c b/src/version.c index fa2dfae84..01ec9a1bf 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2792, +/**/ 2791, /**/ 2790, diff --git a/src/vim9execute.c b/src/vim9execute.c index f471454f8..c90fb65b6 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -4338,6 +4338,7 @@ list_instructions(char *pfx, isn_T *instr, int instr_count, ufunc_T *ufunc) int line_idx = 0; int prev_current = 0; int current; + int def_arg_idx = 0; for (current = 0; current < instr_count; ++current) { @@ -4345,6 +4346,7 @@ list_instructions(char *pfx, isn_T *instr, int instr_count, ufunc_T *ufunc) char *line; if (ufunc != NULL) + { while (line_idx < iptr->isn_lnum && line_idx < ufunc->uf_lines.ga_len) { @@ -4357,6 +4359,23 @@ list_instructions(char *pfx, isn_T *instr, int instr_count, ufunc_T *ufunc) if (line != NULL) msg(line); } + if (iptr->isn_type == ISN_JUMP_IF_ARG_SET) + { + int first_def_arg = ufunc->uf_args.ga_len + - ufunc->uf_def_args.ga_len; + + if (def_arg_idx > 0) + msg_puts("\n\n"); + msg_start(); + msg_puts(" "); + msg_puts(((char **)(ufunc->uf_args.ga_data))[ + first_def_arg + def_arg_idx]); + msg_puts(" = "); + msg_puts(((char **)(ufunc->uf_def_args.ga_data))[def_arg_idx++]); + msg_clr_eos(); + msg_end(); + } + } switch (iptr->isn_type) { |