Patch 8.2.1024
Problem:    Vim9: no error for using "let g:var = val".
Solution:   Add an error.
Files:      src/evalvars.c, src/globals.h, src/structs.h, src/vim9compile.c,
            src/scriptfile.c, src/userfunc.c, src/testdir/test_vim9_script.vim,
            src/testdir/test_vim9_disassemble.vim,
            src/testdir/test_vim9_func.vim


*** ../vim-8.2.1023/src/evalvars.c      2020-06-20 18:19:05.920877872 +0200
--- src/evalvars.c      2020-06-20 20:25:39.608163563 +0200
***************
*** 2864,2869 ****
--- 2864,2877 ----
        semsg(_(e_illvar), name);
        return;
      }
+     if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
+           && ht == &globvarht
+           && (flags & LET_NO_COMMAND) == 0)
+     {
+       semsg(_(e_declare_global), name);
+       return;
+     }
+ 
      is_script_local = ht == get_script_local_ht();
  
      di = find_var_in_ht(ht, 0, varname, TRUE);
*** ../vim-8.2.1023/src/globals.h       2020-06-16 22:27:35.827988257 +0200
--- src/globals.h       2020-06-20 20:24:52.752475481 +0200
***************
*** 1788,1793 ****
--- 1788,1794 ----
  EXTERN char e_lock_unlock[]   INIT(= N_("E940: Cannot lock or unlock variable 
%s"));
  EXTERN char e_const_req_value[] INIT(= N_("E1021: const requires a value"));
  EXTERN char e_type_req[]      INIT(= N_("E1022: type or initialization 
required"));
+ EXTERN char e_declare_global[]        INIT(= N_("E1016: Cannot declare a 
global variable: %s"));
  #endif
  #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS)
  EXTERN char e_alloc_color[]   INIT(= N_("E254: Cannot allocate color %s"));
*** ../vim-8.2.1023/src/structs.h       2020-06-20 18:19:05.920877872 +0200
--- src/structs.h       2020-06-20 22:32:21.934805144 +0200
***************
*** 67,72 ****
--- 67,74 ----
  typedef struct VimMenu vimmenu_T;
  #endif
  
+ // maximum value for sc_version
+ #define SCRIPT_VERSION_MAX 4
  // value for sc_version in a Vim9 script file
  #define SCRIPT_VERSION_VIM9 999999
  
*** ../vim-8.2.1023/src/vim9compile.c   2020-06-20 18:19:05.916877882 +0200
--- src/vim9compile.c   2020-06-20 20:24:02.376827247 +0200
***************
*** 4871,4878 ****
                dest = dest_global;
                if (is_decl)
                {
!                   semsg(_("E1016: Cannot declare a global variable: %s"),
!                                                                        name);
                    goto theend;
                }
            }
--- 4871,4877 ----
                dest = dest_global;
                if (is_decl)
                {
!                   semsg(_(e_declare_global), name);
                    goto theend;
                }
            }
*** ../vim-8.2.1023/src/scriptfile.c    2020-06-19 19:01:39.038497746 +0200
--- src/scriptfile.c    2020-06-20 22:32:00.314870204 +0200
***************
*** 1873,1879 ****
      nr = getdigits(&eap->arg);
      if (nr == 0 || *eap->arg != NUL)
        emsg(_(e_invarg));
!     else if (nr > 4)
        semsg(_("E999: scriptversion not supported: %d"), nr);
      else
      {
--- 1873,1879 ----
      nr = getdigits(&eap->arg);
      if (nr == 0 || *eap->arg != NUL)
        emsg(_(e_invarg));
!     else if (nr > SCRIPT_VERSION_MAX)
        semsg(_("E999: scriptversion not supported: %d"), nr);
      else
      {
*** ../vim-8.2.1023/src/userfunc.c      2020-06-20 18:19:05.920877872 +0200
--- src/userfunc.c      2020-06-20 22:33:45.182554129 +0200
***************
*** 3325,3330 ****
--- 3325,3333 ----
  
      if (eap->cmdidx == CMD_def)
        set_function_type(fp);
+     else if (fp->uf_script_ctx.sc_version == SCRIPT_VERSION_VIM9)
+       // :func does not use Vim9 script syntax, even in a Vim9 script file
+       fp->uf_script_ctx.sc_version = SCRIPT_VERSION_MAX;
  
      goto ret_free;
  
*** ../vim-8.2.1023/src/testdir/test_vim9_script.vim    2020-06-19 
19:01:39.038497746 +0200
--- src/testdir/test_vim9_script.vim    2020-06-20 22:38:05.097766109 +0200
***************
*** 1099,1109 ****
  
    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)
  
--- 1099,1109 ----
  
    g:glob = 2
    if false
!     execute('g:glob = 3')
    endif
    assert_equal(2, g:glob)
    if true
!     execute('g:glob = 3')
    endif
    assert_equal(3, g:glob)
  
***************
*** 1790,1797 ****
  enddef
  
  def Test_vim9_comment_not_compiled()
!   au TabEnter *.vim let g:entered = 1
!   au TabEnter *.x let g:entered = 2
  
    edit test.vim
    doautocmd TabEnter #comment
--- 1790,1797 ----
  enddef
  
  def Test_vim9_comment_not_compiled()
!   au TabEnter *.vim g:entered = 1
!   au TabEnter *.x g:entered = 2
  
    edit test.vim
    doautocmd TabEnter #comment
***************
*** 1811,1817 ****
  
    CheckScriptSuccess([
        'vim9script',
!       'let g:var = 123',
        'let w:var = 777',
        'unlet g:var w:var # something',
        ])
--- 1811,1817 ----
  
    CheckScriptSuccess([
        'vim9script',
!       'g:var = 123',
        'let w:var = 777',
        'unlet g:var w:var # something',
        ])
***************
*** 1819,1824 ****
--- 1819,1829 ----
    CheckScriptFailure([
        'vim9script',
        'let g:var = 123',
+       ], 'E1016:')
+ 
+   CheckScriptFailure([
+       'vim9script',
+       'g:var = 123',
        'unlet g:var# comment1',
        ], 'E108:')
  
***************
*** 1889,1899 ****
  def Test_finish()
    let lines =<< trim END
      vim9script
!     let g:res = 'one'
      if v:false | finish | endif
!     let g:res = 'two'
      finish
!     let g:res = 'three'
    END
    writefile(lines, 'Xfinished')
    source Xfinished
--- 1894,1904 ----
  def Test_finish()
    let lines =<< trim END
      vim9script
!     g:res = 'one'
      if v:false | finish | endif
!     g:res = 'two'
      finish
!     g:res = 'three'
    END
    writefile(lines, 'Xfinished')
    source Xfinished
*** ../vim-8.2.1023/src/testdir/test_vim9_disassemble.vim       2020-06-18 
22:18:07.396246807 +0200
--- src/testdir/test_vim9_disassemble.vim       2020-06-20 22:43:28.008869384 
+0200
***************
*** 1190,1196 ****
      def FuncTwo(): string
        return 'two'
      enddef
!     let g:res_FuncOne: string = execute('disass FuncOne')
    END
    writefile(lines, 'Xdisassemble')
    source Xdisassemble
--- 1190,1196 ----
      def FuncTwo(): string
        return 'two'
      enddef
!     g:res_FuncOne = execute('disass FuncOne')
    END
    writefile(lines, 'Xdisassemble')
    source Xdisassemble
*** ../vim-8.2.1023/src/testdir/test_vim9_func.vim      2020-06-18 
20:50:06.349864243 +0200
--- src/testdir/test_vim9_func.vim      2020-06-20 22:47:50.408116145 +0200
***************
*** 323,329 ****
      str->MyFunc()
      assert_equal('barfoo', var)
  
!     let g:value = 'value'
      g:value->MyFunc()
      assert_equal('value', var)
  
--- 323,329 ----
      str->MyFunc()
      assert_equal('barfoo', var)
  
!     g:value = 'value'
      g:value->MyFunc()
      assert_equal('value', var)
  
*** ../vim-8.2.1023/src/version.c       2020-06-20 18:19:05.920877872 +0200
--- src/version.c       2020-06-20 22:49:39.043799255 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     1024,
  /**/

-- 
An indication you must be a manager:
You give constructive feedback to your dog.

 /// 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/202006202051.05KKpKUD999673%40masaka.moolenaar.net.

Raspunde prin e-mail lui