]> granicus.if.org Git - vim/commitdiff
patch 8.2.0503: Vim9: some code is not tested v8.2.0503
authorBram Moolenaar <Bram@vim.org>
Thu, 2 Apr 2020 20:33:21 +0000 (22:33 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 2 Apr 2020 20:33:21 +0000 (22:33 +0200)
Problem:    Vim9: some code is not tested.
Solution:   Add tests.  Fix uncovered problems.

src/testdir/test_vim9_script.vim
src/version.c
src/vim9compile.c

index d93ea6a06c28a79c355982a6066b53db52f05917..518f60c62c7a2223bf72fa40f31b157be8b5f76f 100644 (file)
@@ -112,6 +112,8 @@ def Test_assignment()
   call CheckDefFailure(['&notex += 3'], 'E113:')
   call CheckDefFailure(['&ts ..= "xxx"'], 'E1019:')
   call CheckDefFailure(['&path += 3'], 'E1013:')
+  " test freeing ISN_STOREOPT
+  call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:')
   &ts = 8
 
   g:inc_counter += 1
@@ -171,6 +173,9 @@ def Test_assignment()
     let thechannel: channel
     assert_equal(test_null_channel(), thechannel)
   endif
+
+  let nr = 1234 | nr = 5678
+  assert_equal(5678, nr)
 enddef
 
 func Test_assignment_failure()
@@ -253,8 +258,16 @@ enddef
 
 func Test_block_failure()
   call CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:')
+  call CheckDefFailure(['}'], 'E1025:')
+  call CheckDefFailure(['{', 'echo 1'], 'E1026:')
 endfunc
 
+def Test_cmd_modifier()
+  tab echo '0'
+  call CheckDefFailure(['5tab echo 3'], 'E16:')
+enddef
+
+
 def ReturnString(): string
   return 'string'
 enddef
@@ -326,6 +339,8 @@ def Test_call_default_args()
   assert_equal('string', MyDefaultArgs())
   assert_equal('one', MyDefaultArgs('one'))
   assert_fails('call MyDefaultArgs("one", "two")', 'E118:')
+
+  call CheckScriptFailure(['def Func(arg: number = asdf)', 'enddef'], 'E1001:')
 enddef
 
 func Test_call_default_args_from_func()
@@ -480,6 +495,16 @@ def Test_try_catch_fails()
   call CheckDefFailure(['catch'], 'E603:')
   call CheckDefFailure(['try', 'echo 0', 'catch','catch'], 'E1033:')
   call CheckDefFailure(['try', 'echo 0', 'catch /pat'], 'E1067:')
+  call CheckDefFailure(['finally'], 'E606:')
+  call CheckDefFailure(['try', 'echo 0', 'finally', 'echo 1', 'finally'], 'E607:')
+  call CheckDefFailure(['endtry'], 'E602:')
+  call CheckDefFailure(['while 1', 'endtry'], 'E170:')
+  call CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:')
+  call CheckDefFailure(['if 2', 'endtry'], 'E171:')
+  call CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:')
+
+  call CheckDefFailure(['throw'], 'E471:')
+  call CheckDefFailure(['throw xxx'], 'E1001:')
 enddef
 
 let s:export_script_lines =<< trim END
@@ -939,6 +964,7 @@ def Test_if_elseif_else_fails()
   call CheckDefFailure(['else'], 'E581:')
   call CheckDefFailure(['endif'], 'E580:')
   call CheckDefFailure(['if true', 'elseif xxx'], 'E1001:')
+  call CheckDefFailure(['if true', 'echo 1'], 'E171:')
 enddef
 
 let g:bool_true = v:true
@@ -951,6 +977,16 @@ def Test_if_const_expr()
   endif
   assert_equal(true, res)
 
+  g:glob = 2
+  if false
+    execute('let g:glob = 3')
+  endif
+  assert_equal(2, g:glob)
+  if true
+    execute('let g:glob = 3')
+  endif
+  assert_equal(3, g:glob)
+
   res = false
   if g:bool_true ? true : false
     res = true
@@ -1092,10 +1128,13 @@ def Test_execute_cmd()
   execute cmd_first .. cmd_last
   assert_equal('execute-var-var', getline(1))
   bwipe!
+
+  call CheckDefFailure(['execute xxx'], 'E1001:')
 enddef
 
 def Test_echo_cmd()
-  echo 'something'
+  echo 'some'
+  echon 'thing'
   assert_match('^something$', Screenline(&lines))
 
   let str1 = 'some'
@@ -1141,6 +1180,7 @@ def Test_for_loop_fails()
   call CheckDefFailure(['for i in "text"'], 'E1024:')
   call CheckDefFailure(['for i in xxx'], 'E1001:')
   call CheckDefFailure(['endfor'], 'E588:')
+  call CheckDefFailure(['for i in range(3)', 'echo 3'], 'E170:')
 enddef
 
 def Test_while_loop()
@@ -1166,6 +1206,7 @@ def Test_while_loop_fails()
   call CheckDefFailure(['if true', 'continue'], 'E586:')
   call CheckDefFailure(['break'], 'E587:')
   call CheckDefFailure(['if true', 'break'], 'E587:')
+  call CheckDefFailure(['while 1', 'echo 3'], 'E170:')
 enddef
 
 def Test_interrupt_loop()
@@ -1185,28 +1226,6 @@ def Test_interrupt_loop()
   assert_true(caught, 'should have caught an exception')
 enddef
 
-def Test_substitute_cmd()
-  new
-  setline(1, 'something')
-  :substitute(some(other(
-  assert_equal('otherthing', getline(1))
-  bwipe!
-
-  " also when the context is Vim9 script
-  let lines =<< trim END
-    vim9script
-    new
-    setline(1, 'something')
-    :substitute(some(other(
-    assert_equal('otherthing', getline(1))
-    bwipe!
-  END
-  writefile(lines, 'Xvim9lines')
-  source Xvim9lines
-
-  delete('Xvim9lines')
-enddef
-
 def Test_redef_failure()
   call writefile(['def Func0(): string',  'return "Func0"', 'enddef'], 'Xdef')
   so Xdef
@@ -1285,4 +1304,27 @@ func Test_internalfunc_arg_error()
   call delete('Xinvalidarg')
 endfunc
 
+" Keep this last, it messes up highlighting.
+def Test_substitute_cmd()
+  new
+  setline(1, 'something')
+  :substitute(some(other(
+  assert_equal('otherthing', getline(1))
+  bwipe!
+
+  " also when the context is Vim9 script
+  let lines =<< trim END
+    vim9script
+    new
+    setline(1, 'something')
+    :substitute(some(other(
+    assert_equal('otherthing', getline(1))
+    bwipe!
+  END
+  writefile(lines, 'Xvim9lines')
+  source Xvim9lines
+
+  delete('Xvim9lines')
+enddef
+
 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
index ddc5295c89400112ca5d66965d11bf9a4623fc08..528454b232341dee8edeb3476500947f9e3e409a 100644 (file)
@@ -738,6 +738,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    503,
 /**/
     502,
 /**/
index dec7587a8421141338f06ec7d26c89826b477eb6..83661720542eac77bbc1b96e69690f5c55c60554 100644 (file)
@@ -4972,6 +4972,7 @@ compile_finally(char_u *arg, cctx_T *cctx)
     // Fill in the "end" label in jumps at the end of the blocks.
     compile_fill_jump_to_end(&scope->se_u.se_try.ts_end_label, cctx);
 
+    isn->isn_arg.try.try_finally = instr->ga_len;
     if (scope->se_u.se_try.ts_catch_label != 0)
     {
        // Previous catch without match jumps here
@@ -4979,7 +4980,6 @@ compile_finally(char_u *arg, cctx_T *cctx)
        isn->isn_arg.jump.jump_where = instr->ga_len;
     }
 
-    isn->isn_arg.try.try_finally = instr->ga_len;
     // TODO: set index in ts_finally_label jumps
 
     return arg;
@@ -5350,13 +5350,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type)
                line = p;
                continue;
            }
-           if (ea.cmdidx == CMD_let)
-           {
-               line = compile_assignment(ea.cmd, &ea, CMD_SIZE, &cctx);
-               if (line == NULL)
-                   goto erret;
-               continue;
-           }
+           // CMD_let cannot happen, compile_assignment() above is used
            iemsg("Command from find_ex_command() not handled");
            goto erret;
        }
@@ -5464,6 +5458,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type)
        }
        if (line == NULL)
            goto erret;
+       line = skipwhite(line);
 
        if (cctx.ctx_type_stack.ga_len < 0)
        {