]> granicus.if.org Git - vim/commitdiff
patch 8.2.2628: Vim9: #{ can still be used at the script level v8.2.2628
authorBram Moolenaar <Bram@vim.org>
Sat, 20 Mar 2021 12:29:38 +0000 (13:29 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 20 Mar 2021 12:29:38 +0000 (13:29 +0100)
Problem:    Vim9: #{ can still be used at the script level.
Solution:   Give an error for #{ like in a :def function.

src/eval.c
src/ex_docmd.c
src/testdir/test_vim9_expr.vim
src/version.c

index 8e964de700b95a9612ba391170e1481aa5a3854b..aa5f5b8243ea62aea9104b1ea4c7d4c59f296aba 100644 (file)
@@ -2228,7 +2228,8 @@ eval0(
        if (!aborting()
                && did_emsg == did_emsg_before
                && called_emsg == called_emsg_before
-               && (flags & EVAL_CONSTANT) == 0)
+               && (flags & EVAL_CONSTANT) == 0
+               && (!in_vim9script() || !vim9_bad_comment(p)))
            semsg(_(e_invexpr2), arg);
 
        // Some of the expression may not have been consumed.  Do not check for
@@ -3362,7 +3363,11 @@ eval7(
     /*
      * Dictionary: #{key: val, key: val}
      */
-    case '#':  if (!in_vim9script() && (*arg)[1] == '{')
+    case '#':  if (in_vim9script())
+               {
+                   ret = vim9_bad_comment(*arg) ? FAIL : NOTDONE;
+               }
+               else if ((*arg)[1] == '{')
                {
                    ++*arg;
                    ret = eval_dict(arg, rettv, evalarg, TRUE);
index 477d140bde79909be0295ceb7362eee4c31cd5bb..67bcc7370e57011260494b6bc32fd01f3275490e 100644 (file)
@@ -5234,7 +5234,8 @@ ends_excmd2(char_u *cmd_start UNUSED, char_u *cmd)
        return TRUE;
 #ifdef FEAT_EVAL
     if (in_vim9script())
-       return c == '#' && (cmd == cmd_start || VIM_ISWHITE(cmd[-1]));
+       return c == '#' && cmd[1] != '{'
+                                && (cmd == cmd_start || VIM_ISWHITE(cmd[-1]));
 #endif
     return c == '"';
 }
index 10468410feaf57059c0b5c84fcaec85b1594d4b3..de6eabd1efd3f15bc7ab7083b1aaecfc00c64fd7 100644 (file)
@@ -2159,10 +2159,10 @@ def Test_expr7_dict()
   CheckDefAndScriptSuccess(lines)
  
   # legacy syntax doesn't work
-  CheckDefFailure(["var x = #{key: 8}"], 'E1170:', 1)
-  CheckDefFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1)
-  CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1170:', 1)
-  CheckDefFailure(["var x = true ? #{a: 1}"], 'E1170:', 1)
+  CheckDefAndScriptFailure(["var x = #{key: 8}"], 'E1170:', 1)
+  CheckDefAndScriptFailure(["var x = 'a' #{a: 1}"], 'E1170:', 1)
+  CheckDefAndScriptFailure(["var x = 'a' .. #{a: 1}"], 'E1170:', 1)
+  CheckDefAndScriptFailure(["var x = true ? #{a: 1}"], 'E1170:', 1)
 
   CheckDefFailure(["var x = {a:8}"], 'E1069:', 1)
   CheckDefFailure(["var x = {a : 8}"], 'E1068:', 1)
index 7c4db55a6b21069df9e373e632687bb40a0675aa..bcf8b6d2b47634f960f161d2ce17483a6d5882ee 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2628,
 /**/
     2627,
 /**/