summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/testdir/test_vim9_disassemble.vim32
-rw-r--r--src/version.c2
-rw-r--r--src/vim9compile.c10
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);