Patch 8.2.0348
Problem:    Vim9: not all code tested.
Solution:   Add a few more tests. fix using "b:" in literal dictionary.
Files:      src/testdir/test_vim9_expr.vim, src/vim9compile.c,
            src/proto/vim9compile.pro, src/testdir/test_vim9_script.vim


*** ../vim-8.2.0347/src/testdir/test_vim9_expr.vim      2020-02-29 
23:23:44.484659204 +0100
--- src/testdir/test_vim9_expr.vim      2020-03-02 21:33:36.998399557 +0100
***************
*** 37,45 ****
      assert_equal('one', 0.1 ? 'one' : 'two')
    endif
    assert_equal('one', 'x' ? 'one' : 'two')
! "  assert_equal('one', 0z1234 ? 'one' : 'two')
    assert_equal('one', [0] ? 'one' : 'two')
! "  assert_equal('one', #{x: 0} ? 'one' : 'two')
    let var = 1
    assert_equal('one', var ? 'one' : 'two')
  
--- 37,45 ----
      assert_equal('one', 0.1 ? 'one' : 'two')
    endif
    assert_equal('one', 'x' ? 'one' : 'two')
!   assert_equal('one', 0z1234 ? 'one' : 'two')
    assert_equal('one', [0] ? 'one' : 'two')
!   assert_equal('one', #{x: 0} ? 'one' : 'two')
    let var = 1
    assert_equal('one', var ? 'one' : 'two')
  
***************
*** 49,57 ****
      assert_equal('two', 0.0 ? 'one' : 'two')
    endif
    assert_equal('two', '' ? 'one' : 'two')
! "  assert_equal('one', 0z ? 'one' : 'two')
    assert_equal('two', [] ? 'one' : 'two')
! "  assert_equal('two', {} ? 'one' : 'two')
    var = 0
    assert_equal('two', var ? 'one' : 'two')
  enddef
--- 49,57 ----
      assert_equal('two', 0.0 ? 'one' : 'two')
    endif
    assert_equal('two', '' ? 'one' : 'two')
!   assert_equal('two', 0z ? 'one' : 'two')
    assert_equal('two', [] ? 'one' : 'two')
!   assert_equal('two', {} ? 'one' : 'two')
    var = 0
    assert_equal('two', var ? 'one' : 'two')
  enddef
***************
*** 447,452 ****
--- 447,457 ----
    call CheckDefFailure("let x = [13] <= [88]", 'Cannot compare list with 
list')
    call CheckDefFailure("let x = [13] =~ [88]", 'Cannot compare list with 
list')
    call CheckDefFailure("let x = [13] !~ [88]", 'Cannot compare list with 
list')
+ 
+   call CheckDefFailureMult(['let j: job', 'let chan: channel', 'let r = j == 
chan'], 'Cannot compare job with channel')
+   call CheckDefFailureMult(['let j: job', 'let x: list<any>', 'let r = j == 
x'], 'Cannot compare job with list')
+   call CheckDefFailureMult(['let j: job', 'let x: func', 'let r = j == x'], 
'Cannot compare job with func')
+   call CheckDefFailureMult(['let j: job', 'let x: partial', 'let r = j == 
x'], 'Cannot compare job with partial')
  endfunc
  
  " test addition, subtraction, concatenation
*** ../vim-8.2.0347/src/vim9compile.c   2020-03-01 23:32:22.348059441 +0100
--- src/vim9compile.c   2020-03-02 22:03:45.982074243 +0100
***************
*** 507,513 ****
                    && (type1 == VAR_BLOB || type2 == VAR_BLOB
                        || type1 == VAR_LIST || type2 == VAR_LIST))))
      {
!       semsg(_("E1037: Cannot compare %s with %s"),
                vartype_name(type1), vartype_name(type2));
        return FAIL;
      }
--- 507,513 ----
                    && (type1 == VAR_BLOB || type2 == VAR_BLOB
                        || type1 == VAR_LIST || type2 == VAR_LIST))))
      {
!       semsg(_("E1072: Cannot compare %s with %s"),
                vartype_name(type1), vartype_name(type2));
        return FAIL;
      }
***************
*** 1494,1501 ****
  {
      switch (type)
      {
        case VAR_VOID: return "void";
-       case VAR_UNKNOWN: return "any";
        case VAR_SPECIAL: return "special";
        case VAR_BOOL: return "bool";
        case VAR_NUMBER: return "number";
--- 1494,1501 ----
  {
      switch (type)
      {
+       case VAR_UNKNOWN: break;
        case VAR_VOID: return "void";
        case VAR_SPECIAL: return "special";
        case VAR_BOOL: return "bool";
        case VAR_NUMBER: return "number";
***************
*** 1509,1515 ****
        case VAR_FUNC: return "func";
        case VAR_PARTIAL: return "partial";
      }
!     return "???";
  }
  
  /*
--- 1509,1515 ----
        case VAR_FUNC: return "func";
        case VAR_PARTIAL: return "partial";
      }
!     return "any";
  }
  
  /*
***************
*** 1907,1917 ****
  /*
   * Find the end of a variable or function name.  Unlike find_name_end() this
   * does not recognize magic braces.
   * Return a pointer to just after the name.  Equal to "arg" if there is no
   * valid name.
   */
!     char_u *
! to_name_end(char_u *arg)
  {
      char_u    *p;
  
--- 1907,1918 ----
  /*
   * Find the end of a variable or function name.  Unlike find_name_end() this
   * does not recognize magic braces.
+  * When "namespace" is TRUE recognize "b:", "s:", etc.
   * Return a pointer to just after the name.  Equal to "arg" if there is no
   * valid name.
   */
!     static char_u *
! to_name_end(char_u *arg, int namespace)
  {
      char_u    *p;
  
***************
*** 1923,1928 ****
--- 1924,1930 ----
        // Include a namespace such as "s:var" and "v:var".  But "n:" is not
        // and can be used in slice "[n:]".
        if (*p == ':' && (p != arg + 1
+                            || !namespace
                             || vim_strchr(VIM9_NAMESPACE_CHAR, *arg) == NULL))
            break;
      return p;
***************
*** 1934,1940 ****
      char_u *
  to_name_const_end(char_u *arg)
  {
!     char_u    *p = to_name_end(arg);
      typval_T  rettv;
  
      if (p == arg && *arg == '[')
--- 1936,1942 ----
      char_u *
  to_name_const_end(char_u *arg)
  {
!     char_u    *p = to_name_end(arg, TRUE);
      typval_T  rettv;
  
      if (p == arg && *arg == '[')
***************
*** 2145,2151 ****
  
        if (literal)
        {
!           char_u *p = to_name_end(*arg);
  
            if (p == *arg)
            {
--- 2147,2153 ----
  
        if (literal)
        {
!           char_u *p = to_name_end(*arg, !literal);
  
            if (p == *arg)
            {
***************
*** 2766,2772 ****
        }
  
        // "name" or "name()"
!       p = to_name_end(*arg);
        if (*p == '(')
            r = compile_call(arg, p - *arg, cctx, 0);
        else
--- 2768,2774 ----
        }
  
        // "name" or "name()"
!       p = to_name_end(*arg, TRUE);
        if (*p == '(')
            r = compile_call(arg, p - *arg, cctx, 0);
        else
***************
*** 4980,4986 ****
            // val".
            p = (*ea.cmd == '&' || *ea.cmd == '$' || *ea.cmd == '@')
                                                         ? ea.cmd + 1 : ea.cmd;
!           p = to_name_end(p);
            if ((p > ea.cmd && *p != NUL) || *p == '(')
            {
                int oplen;
--- 4982,4988 ----
            // val".
            p = (*ea.cmd == '&' || *ea.cmd == '$' || *ea.cmd == '@')
                                                         ? ea.cmd + 1 : ea.cmd;
!           p = to_name_end(p, TRUE);
            if ((p > ea.cmd && *p != NUL) || *p == '(')
            {
                int oplen;
***************
*** 4992,4998 ****
                    // Recognize an assignment if we recognize the variable
                    // name:
                    // "g:var = expr"
!                   // "var = expr"  where "var" is a local var name.
                    // "&opt = expr"
                    // "$ENV = expr"
                    // "@r = expr"
--- 4994,5002 ----
                    // Recognize an assignment if we recognize the variable
                    // name:
                    // "g:var = expr"
!                   // "local = expr"  where "local" is a local var.
!                   // "script = expr"  where "script" is a script-local var.
!                   // "import = expr"  where "import" is an imported var
                    // "&opt = expr"
                    // "$ENV = expr"
                    // "@r = expr"
*** ../vim-8.2.0347/src/proto/vim9compile.pro   2020-02-03 20:50:55.672929674 
+0100
--- src/proto/vim9compile.pro   2020-03-02 21:43:32.954859207 +0100
***************
*** 5,11 ****
  char *type_name(type_T *type, char **tofree);
  int get_script_item_idx(int sid, char_u *name, int check_writable);
  imported_T *find_imported(char_u *name, size_t len, cctx_T *cctx);
- char_u *to_name_end(char_u *arg);
  char_u *to_name_const_end(char_u *arg);
  int assignment_len(char_u *p, int *heredoc);
  void compile_def_function(ufunc_T *ufunc, int set_return_type);
--- 5,10 ----
*** ../vim-8.2.0347/src/testdir/test_vim9_script.vim    2020-03-01 
23:32:22.348059441 +0100
--- src/testdir/test_vim9_script.vim    2020-03-02 22:52:06.712807422 +0100
***************
*** 68,73 ****
--- 68,75 ----
  
    " type becomes list<any>
    let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
+   " type becomes dict<any>
+   let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'}
  
    g:newvar = 'new'
    assert_equal('new', g:newvar)
***************
*** 373,378 ****
--- 375,381 ----
      g:imported_name = exp_name
      exp_name ..= ' Doe'
      g:imported_name_appended = exp_name
+     g:imported_later = exported
    END
  
    writefile(import_script_lines, 'Ximport.vim')
***************
*** 384,389 ****
--- 387,393 ----
    assert_equal('bob', g:localname)
    assert_equal(9876, g:imported)
    assert_equal(9879, g:imported_added)
+   assert_equal(9879, g:imported_later)
    assert_equal('Exported', g:imported_func)
    assert_equal('John', g:imported_name)
    assert_equal('John Doe', g:imported_name_appended)
***************
*** 393,402 ****
--- 397,426 ----
    unlet g:localname
    unlet g:imported
    unlet g:imported_added
+   unlet g:imported_later
    unlet g:imported_func
    unlet g:imported_name g:imported_name_appended
    delete('Ximport.vim')
  
+   let import_in_def_lines =<< trim END
+     vim9script
+     def ImportInDef()
+       import exported from './Xexport.vim'
+       g:imported = exported
+       exported += 7
+       g:imported_added = exported
+     enddef
+     ImportInDef()
+   END
+   writefile(import_in_def_lines, 'Ximport2.vim')
+   source Ximport2.vim
+   " TODO: this should be 9879
+   assert_equal(9876, g:imported)
+   assert_equal(9883, g:imported_added)
+   unlet g:imported
+   unlet g:imported_added
+   delete('Ximport2.vim')
+ 
    let import_star_as_lines =<< trim END
      vim9script
      import * as Export from './Xexport.vim'
***************
*** 407,413 ****
    END
    writefile(import_star_as_lines, 'Ximport.vim')
    source Ximport.vim
!   assert_equal(9876, g:imported)
  
    let import_star_lines =<< trim END
      vim9script
--- 431,437 ----
    END
    writefile(import_star_as_lines, 'Ximport.vim')
    source Ximport.vim
!   assert_equal(9883, g:imported)
  
    let import_star_lines =<< trim END
      vim9script
*** ../vim-8.2.0347/src/version.c       2020-03-02 20:54:19.323757498 +0100
--- src/version.c       2020-03-02 21:43:07.594993289 +0100
***************
*** 740,741 ****
--- 740,743 ----
  {   /* Add new patch number below this line */
+ /**/
+     348,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
168. You have your own domain name.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202003022154.022LsB2P032025%40masaka.moolenaar.net.

Raspunde prin e-mail lui