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