patch 8.2.2403: Vim9: profiling if/elseif/endif not correct
Problem: Vim9: profiling if/elseif/endif not correct.
Solution: Add profile instructions. Fix that "elseif" was wrong.
diff --git a/src/testdir/test_profile.vim b/src/testdir/test_profile.vim
index 9c7cb5c..d037c77 100644
--- a/src/testdir/test_profile.vim
+++ b/src/testdir/test_profile.vim
@@ -100,39 +100,48 @@
endfunc
func Test_profile_func_with_ifelse()
+ call Run_profile_func_with_ifelse('func', 'let', 'let')
+ call Run_profile_func_with_ifelse('def', 'var', '')
+endfunc
+
+func Run_profile_func_with_ifelse(command, declare, assign)
let lines =<< trim [CODE]
- func! Foo1()
+ XXX Foo1()
if 1
- let x = 0
+ DDD x = 0
elseif 1
- let x = 1
+ DDD x = 1
else
- let x = 2
+ DDD x = 2
endif
- endfunc
- func! Foo2()
+ endXXX
+ XXX Foo2()
if 0
- let x = 0
+ DDD x = 0
elseif 1
- let x = 1
+ DDD x = 1
else
- let x = 2
+ DDD x = 2
endif
- endfunc
- func! Foo3()
+ endXXX
+ XXX Foo3()
if 0
- let x = 0
+ DDD x = 0
elseif 0
- let x = 1
+ DDD x = 1
else
- let x = 2
+ DDD x = 2
endif
- endfunc
+ endXXX
call Foo1()
call Foo2()
call Foo3()
[CODE]
+ call map(lines, {k, v -> substitute(v, 'XXX', a:command, '') })
+ call map(lines, {k, v -> substitute(v, 'DDD', a:declare, '') })
+ call map(lines, {k, v -> substitute(v, 'AAA', a:assign, '') })
+
call writefile(lines, 'Xprofile_func.vim')
call system(GetVimCommand()
\ . ' -es -i NONE --noplugin'
@@ -157,11 +166,11 @@
call assert_equal('', lines[5])
call assert_equal('count total (s) self (s)', lines[6])
call assert_match('^\s*1\s\+.*\sif 1$', lines[7])
- call assert_match('^\s*1\s\+.*\s let x = 0$', lines[8])
+ call assert_match('^\s*1\s\+.*\s \(let\|var\) x = 0$', lines[8])
call assert_match( '^\s\+elseif 1$', lines[9])
- call assert_match( '^\s\+let x = 1$', lines[10])
+ call assert_match( '^\s\+\(let\|var\) x = 1$', lines[10])
call assert_match( '^\s\+else$', lines[11])
- call assert_match( '^\s\+let x = 2$', lines[12])
+ call assert_match( '^\s\+\(let\|var\) x = 2$', lines[12])
call assert_match('^\s*1\s\+.*\sendif$', lines[13])
call assert_equal('', lines[14])
call assert_equal('FUNCTION Foo2()', lines[15])
@@ -171,11 +180,11 @@
call assert_equal('', lines[20])
call assert_equal('count total (s) self (s)', lines[21])
call assert_match('^\s*1\s\+.*\sif 0$', lines[22])
- call assert_match( '^\s\+let x = 0$', lines[23])
+ call assert_match( '^\s\+\(let\|var\) x = 0$', lines[23])
call assert_match('^\s*1\s\+.*\selseif 1$', lines[24])
- call assert_match('^\s*1\s\+.*\s let x = 1$', lines[25])
+ call assert_match('^\s*1\s\+.*\s \(let\|var\) x = 1$', lines[25])
call assert_match( '^\s\+else$', lines[26])
- call assert_match( '^\s\+let x = 2$', lines[27])
+ call assert_match( '^\s\+\(let\|var\) x = 2$', lines[27])
call assert_match('^\s*1\s\+.*\sendif$', lines[28])
call assert_equal('', lines[29])
call assert_equal('FUNCTION Foo3()', lines[30])
@@ -185,11 +194,11 @@
call assert_equal('', lines[35])
call assert_equal('count total (s) self (s)', lines[36])
call assert_match('^\s*1\s\+.*\sif 0$', lines[37])
- call assert_match( '^\s\+let x = 0$', lines[38])
+ call assert_match( '^\s\+\(let\|var\) x = 0$', lines[38])
call assert_match('^\s*1\s\+.*\selseif 0$', lines[39])
- call assert_match( '^\s\+let x = 1$', lines[40])
+ call assert_match( '^\s\+\(let\|var\) x = 1$', lines[40])
call assert_match('^\s*1\s\+.*\selse$', lines[41])
- call assert_match('^\s*1\s\+.*\s let x = 2$', lines[42])
+ call assert_match('^\s*1\s\+.*\s \(let\|var\) x = 2$', lines[42])
call assert_match('^\s*1\s\+.*\sendif$', lines[43])
call assert_equal('', lines[44])
call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[45])
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 97846a6..1c57432 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -1857,8 +1857,8 @@
'\d PROFILE START line 1\_s*' ..
'\d PUSHS "profiled"\_s*' ..
'\d ECHO 1\_s*' ..
- '\d PROFILE END\_s*' ..
'return "done"\_s*' ..
+ '\d PROFILE END\_s*' ..
'\d PROFILE START line 2\_s*' ..
'\d PUSHS "done"\_s*' ..
'\d RETURN\_s*' ..
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 9dadf1e..0d9586d 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -1741,7 +1741,7 @@
CheckDefFailure(['elseif true'], 'E582:')
CheckDefFailure(['else'], 'E581:')
CheckDefFailure(['endif'], 'E580:')
- CheckDefFailure(['if true', 'elseif xxx'], 'E1001:')
+ CheckDefFailure(['if g:abool', 'elseif xxx'], 'E1001:')
CheckDefFailure(['if true', 'echo 1'], 'E171:')
enddef