]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1190: Vim9: checking for Vim9 syntax is spread out v8.2.1190
authorBram Moolenaar <Bram@vim.org>
Sun, 12 Jul 2020 15:07:05 +0000 (17:07 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 12 Jul 2020 15:07:05 +0000 (17:07 +0200)
Problem:    Vim9: checking for Vim9 syntax is spread out.
Solution:   Use in_vim9script().

src/dict.c
src/eval.c
src/evalvars.c
src/ex_docmd.c
src/list.c
src/scriptfile.c
src/userfunc.c
src/version.c
src/vim9script.c

index a549ed71b130ef8a924c72564a707385c8d798c9..eedaf42686ff2215477c26e18f4c249bb516c86c 100644 (file)
@@ -803,7 +803,7 @@ eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal)
     dictitem_T *item;
     char_u     *start = skipwhite(*arg + 1);
     char_u     buf[NUMBUFLEN];
-    int                vim9script = current_sctx.sc_version == SCRIPT_VERSION_VIM9;
+    int                vim9script = in_vim9script();
     int                had_comma;
 
     /*
index 9f2c503d3b4d3ea88b687fd81b8ae0bbcfa6fdbe..065f7853f718992288a18fdc03ab37d9f64f9fb9 100644 (file)
@@ -393,7 +393,7 @@ skip_expr_concatenate(
 {
     typval_T   rettv;
     int                res;
-    int                vim9script = current_sctx.sc_version == SCRIPT_VERSION_VIM9;
+    int                vim9script = in_vim9script();
     garray_T    *gap = &evalarg->eval_ga;
     int                save_flags = evalarg == NULL ? 0 : evalarg->eval_flags;
 
@@ -820,7 +820,7 @@ get_lval(
     {
        lp->ll_name = name;
 
-       if (current_sctx.sc_version == SCRIPT_VERSION_VIM9 && *p == ':')
+       if (in_vim9script() && *p == ':')
        {
            scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
            char_u       *tp = skipwhite(p + 1);
@@ -1643,8 +1643,7 @@ next_for_item(void *fi_void, char_u *arg)
 {
     forinfo_T  *fi = (forinfo_T *)fi_void;
     int                result;
-    int                flag = current_sctx.sc_version == SCRIPT_VERSION_VIM9 ?
-                                                       LET_NO_COMMAND : 0;
+    int                flag = in_vim9script() ?  LET_NO_COMMAND : 0;
     listitem_T *item;
 
     if (fi->fi_blob != NULL)
@@ -1910,7 +1909,7 @@ eval_func(
 eval_next_non_blank(char_u *arg, evalarg_T *evalarg, int *getnext)
 {
     *getnext = FALSE;
-    if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
+    if (in_vim9script()
            && evalarg != NULL
            && (evalarg->eval_cookie != NULL || evalarg->eval_cctx != NULL)
            && (*arg == NUL || (VIM_ISWHITE(arg[-1])
@@ -4918,7 +4917,7 @@ find_name_end(
     int                br_nest = 0;
     char_u     *p;
     int                len;
-    int                vim9script = current_sctx.sc_version == SCRIPT_VERSION_VIM9;
+    int                vim9script = in_vim9script();
 
     if (expr_start != NULL)
     {
index 6e67206dc70c65984391b2d4c90e288587d2359c..197a19dd1d99f50119d6351a6519294cda2efb39 100644 (file)
@@ -729,7 +729,7 @@ ex_let(exarg_T *eap)
            emsg(_("E985: .= is not supported with script version 2"));
        else if (!ends_excmd2(eap->cmd, arg))
        {
-           if (current_sctx.sc_version == SCRIPT_VERSION_VIM9)
+           if (in_vim9script())
            {
                // Vim9 declaration ":let var: type"
                arg = vim9_declare_scriptvar(eap, arg);
@@ -993,7 +993,7 @@ skip_var_one(char_u *arg, int include_type)
        return arg + 2;
     end = find_name_end(*arg == '$' || *arg == '&' ? arg + 1 : arg,
                                   NULL, NULL, FNE_INCL_BR | FNE_CHECK_START);
-    if (include_type && current_sctx.sc_version == SCRIPT_VERSION_VIM9)
+    if (include_type && in_vim9script())
     {
        // "a: type" is declaring variable "a" with a type, not "a:".
        if (end == arg + 2 && end[-1] == ':')
@@ -1212,8 +1212,7 @@ ex_let_one(
            emsg(_("E996: Cannot lock an environment variable"));
            return NULL;
        }
-       if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
-               && (flags & LET_NO_COMMAND) == 0)
+       if (in_vim9script() && (flags & LET_NO_COMMAND) == 0)
        {
            vim9_declare_error(arg);
            return NULL;
@@ -1576,8 +1575,7 @@ do_unlet(char_u *name, int forceit)
     dict_T     *d;
     dictitem_T *di;
 
-    if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
-           && check_vim9_unlet(name) == FAIL)
+    if (in_vim9script() && check_vim9_unlet(name) == FAIL)
        return FAIL;
 
     ht = find_var_ht(name, &varname);
@@ -2392,8 +2390,7 @@ eval_variable(
            *dip = v;
     }
 
-    if (tv == NULL && (current_sctx.sc_version == SCRIPT_VERSION_VIM9
-                                              || STRNCMP(name, "s:", 2) == 0))
+    if (tv == NULL && (in_vim9script() || STRNCMP(name, "s:", 2) == 0))
     {
        imported_T  *import;
        char_u      *p = STRNCMP(name, "s:", 2) == 0 ? name + 2 : name;
@@ -2634,7 +2631,7 @@ find_var_ht(char_u *name, char_u **varname)
            return ht;                          // local variable
 
        // in Vim9 script items at the script level are script-local
-       if (current_sctx.sc_version == SCRIPT_VERSION_VIM9)
+       if (in_vim9script())
        {
            ht = get_script_local_ht();
            if (ht != NULL)
@@ -2897,7 +2894,7 @@ set_var_const(
     }
     is_script_local = ht == get_script_local_ht();
 
-    if (current_sctx.sc_version == SCRIPT_VERSION_VIM9
+    if (in_vim9script()
            && !is_script_local
            && (flags & LET_NO_COMMAND) == 0
            && name[1] == ':')
@@ -2926,8 +2923,7 @@ set_var_const(
                return;
            }
 
-           if (is_script_local
-                            && current_sctx.sc_version == SCRIPT_VERSION_VIM9)
+           if (is_script_local && in_vim9script())
            {
                if ((flags & LET_NO_COMMAND) == 0)
                {
@@ -3023,7 +3019,7 @@ set_var_const(
        if (flags & LET_IS_CONST)
            di->di_flags |= DI_FLAGS_LOCK;
 
-       if (is_script_local && current_sctx.sc_version == SCRIPT_VERSION_VIM9)
+       if (is_script_local && in_vim9script())
        {
            scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
 
index 5436373e53ebc1e719f72e79c2150b939a8b0414..64b143be53062b0d4a6d9d8196c9a89d6f3c8093 100644 (file)
@@ -1765,7 +1765,7 @@ do_one_cmd(
        ea.cmd = skipwhite(ea.cmd + 1);
 
 #ifdef FEAT_EVAL
-    if (current_sctx.sc_version == SCRIPT_VERSION_VIM9 && !starts_with_colon)
+    if (in_vim9script() && !starts_with_colon)
     {
        if (ea.cmd > cmd)
        {
index e8d5f5f546f9b5e15694bc1c7eb0156c5cd13500..9a334ae45bce726a34f0e6789e3ad5f39cc96051 100644 (file)
@@ -1167,7 +1167,7 @@ eval_list(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int do_error)
     list_T     *l = NULL;
     typval_T   tv;
     listitem_T *item;
-    int                vim9script = current_sctx.sc_version == SCRIPT_VERSION_VIM9;
+    int                vim9script = in_vim9script();
     int                had_comma;
 
     if (evaluate)
index ce4bafadaf95649a3f4f606af85f506bd75f9bc2..4e7df4d0d3218f7d99c2b0e68453d40e4219e071 100644 (file)
@@ -1876,7 +1876,7 @@ ex_scriptversion(exarg_T *eap UNUSED)
        emsg(_("E984: :scriptversion used outside of a sourced file"));
        return;
     }
-    if (current_sctx.sc_version == SCRIPT_VERSION_VIM9)
+    if (in_vim9script())
     {
        emsg(_("E1040: Cannot use :scriptversion after :vim9script"));
        return;
index b5b57ec8804735ca950a92bf70135c075fbc048a..467a04601af3e46b5307aebeab9bc2c1d35a13d1 100644 (file)
@@ -2388,8 +2388,7 @@ trans_function_name(
     }
 
     // In Vim9 script a user function is script-local by default.
-    vim9script = ASCII_ISUPPER(*start)
-                            && current_sctx.sc_version == SCRIPT_VERSION_VIM9;
+    vim9script = ASCII_ISUPPER(*start) && in_vim9script();
 
     /*
      * Copy the function name to allocated memory.
@@ -2469,7 +2468,7 @@ untrans_function_name(char_u *name)
 {
     char_u *p;
 
-    if (*name == K_SPECIAL && current_sctx.sc_version == SCRIPT_VERSION_VIM9)
+    if (*name == K_SPECIAL && in_vim9script())
     {
        p = vim_strchr(name, '_');
        if (p != NULL)
index 449d402a83c95385563b9c18e86c0db134630ea0..8ae2f29d58d664ed3d03b2ef26bcbc6ba4165008 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1190,
 /**/
     1189,
 /**/
index c191113c84a05b40f7d36916dd9d4c1fa5fbb2df..3c57d341bcdb15efb6765c6df7b549ed3a8131b4 100644 (file)
@@ -22,7 +22,9 @@ static char e_needs_vim9[] = N_("E1042: export can only be used in vim9script");
     int
 in_vim9script(void)
 {
-    // TODO: go up the stack?
+    // Do not go up the stack, a ":function" inside vim9script uses legacy
+    // syntax.  "sc_version" is also set when compiling a ":def" function in
+    // legacy script.
     return current_sctx.sc_version == SCRIPT_VERSION_VIM9;
 }
 
@@ -67,7 +69,7 @@ ex_vim9script(exarg_T *eap)
     void
 ex_export(exarg_T *eap)
 {
-    if (current_sctx.sc_version != SCRIPT_VERSION_VIM9)
+    if (!in_vim9script())
     {
        emsg(_(e_needs_vim9));
        return;