diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-11-30 20:57:38 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-11-30 20:57:38 +0000 |
commit | 90770b746ea2e72954c536d8acf41d241ca2f37e (patch) | |
tree | 29dfeade0969a6c703499e9d4146ffc4ad9b46d3 | |
parent | 42eba04522d6be04393f59a9eab47833e7594650 (diff) | |
download | vim-git-90770b746ea2e72954c536d8acf41d241ca2f37e.tar.gz |
patch 8.2.3707: Vim9: constant expression of elseif not recognizedv8.2.3707
Problem: Vim9: constant expression of elseif not recognized.
Solution: Set instruction count before generating the expression.
-rw-r--r-- | src/testdir/test_vim9_disassemble.vim | 32 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 10 |
3 files changed, 37 insertions, 7 deletions
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim index ba2d0a16e..c90f54c93 100644 --- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -2296,6 +2296,38 @@ def Test_debugged() res) enddef +def s:ElseifConstant() + if g:value + echo "one" + elseif true + echo "true" + elseif false + echo "false" + endif +enddef + +def Test_debug_elseif_constant() + var res = execute('disass s:ElseifConstant') + assert_match('<SNR>\d*_ElseifConstant\_s*' .. + 'if g:value\_s*' .. + '0 LOADG g:value\_s*' .. + '1 COND2BOOL\_s*' .. + '2 JUMP_IF_FALSE -> 6\_s*' .. + 'echo "one"\_s*' .. + '3 PUSHS "one"\_s*' .. + '4 ECHO 1\_s*' .. + 'elseif true\_s*' .. + '5 JUMP -> 8\_s*' .. + 'echo "true"\_s*' .. + '6 PUSHS "true"\_s*' .. + '7 ECHO 1\_s*' .. + 'elseif false\_s*' .. + 'echo "false"\_s*' .. + 'endif\_s*' .. + '\d RETURN void*', + res) +enddef + def s:DebugElseif() var b = false if b diff --git a/src/version.c b/src/version.c index 601055a0e..e29cb3138 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3707, +/**/ 3706, /**/ 3705, diff --git a/src/vim9compile.c b/src/vim9compile.c index 58149ed5c..57bbb2b3c 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -7785,7 +7785,7 @@ compile_elseif(char_u *arg, cctx_T *cctx) { char_u *p = arg; garray_T *instr = &cctx->ctx_instr; - int instr_count = instr->ga_len; + int instr_count; isn_T *isn; scope_T *scope = cctx->ctx_scope; ppconst_T ppconst; @@ -7871,19 +7871,15 @@ compile_elseif(char_u *arg, cctx_T *cctx) cctx->ctx_skip = SKIP_UNKNOWN; #ifdef FEAT_PROFILE if (cctx->ctx_compile_type == CT_PROFILE) - { // the previous block was skipped, need to profile this line generate_instr(cctx, ISN_PROF_START); - instr_count = instr->ga_len; - } #endif if (cctx->ctx_compile_type == CT_DEBUG) - { // the previous block was skipped, may want to debug this line generate_instr_debug(cctx); - instr_count = instr->ga_len; - } } + + instr_count = instr->ga_len; if (compile_expr1(&p, cctx, &ppconst) == FAIL) { clear_ppconst(&ppconst); |