diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-07-29 19:18:00 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-07-29 19:18:00 +0200 |
commit | 33afa2447bdb0bdd15253c69a2cf6f9903685815 (patch) | |
tree | ce6c8c150686419faa6fb762f8ae22a2054a6d7b | |
parent | ac7bf8c4bfcbb157a2db6b939927bf11edb6ba7b (diff) | |
download | vim-git-33afa2447bdb0bdd15253c69a2cf6f9903685815.tar.gz |
patch 8.2.1320: Vim9: cannot declare some single letter variablesv8.2.1320
Problem: Vim9: cannot declare some single letter variables.
Solution: Do not recognize a colon for a namespace for single letter
variables. (closes #6547)
-rw-r--r-- | src/testdir/test_vim9_script.vim | 25 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9compile.c | 18 |
3 files changed, 38 insertions, 7 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index b491fa21a..0166072f1 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -109,6 +109,9 @@ def Test_assignment() call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:') &ts = 8 + call CheckDefFailure(['let s:var = 123'], 'E1101:') + call CheckDefFailure(['let s:var: number'], 'E1101:') + g:inc_counter += 1 assert_equal(2, g:inc_counter) @@ -136,6 +139,28 @@ def Test_assignment() assert_equal('noneagain', v:errmsg) call CheckDefFailure(['v:errmsg += "more"'], 'E1013:') call CheckDefFailure(['v:errmsg += 123'], 'E1013:') + + # single letter variables + a = 123 + assert_equal(123, a) + let b: number + b = 123 + assert_equal(123, b) + let g: number + g = 123 + assert_equal(123, g) + let s: number + s = 123 + assert_equal(123, s) + let t: number + t = 123 + assert_equal(123, t) + let v: number + v = 123 + assert_equal(123, v) + let w: number + w = 123 + assert_equal(123, w) enddef def Test_vim9_single_char_vars() diff --git a/src/version.c b/src/version.c index 4b53df32d..b81ac066a 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1320, +/**/ 1319, /**/ 1318, diff --git a/src/vim9compile.c b/src/vim9compile.c index cbb9231d8..f1509048e 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -5237,7 +5237,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx) goto theend; } } - else if (STRNCMP(var_start, "g:", 2) == 0) + else if (varlen > 1 && STRNCMP(var_start, "g:", 2) == 0) { dest = dest_global; if (is_decl) @@ -5246,7 +5246,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx) goto theend; } } - else if (STRNCMP(var_start, "b:", 2) == 0) + else if (varlen > 1 && STRNCMP(var_start, "b:", 2) == 0) { dest = dest_buffer; if (is_decl) @@ -5255,7 +5255,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx) goto theend; } } - else if (STRNCMP(var_start, "w:", 2) == 0) + else if (varlen > 1 && STRNCMP(var_start, "w:", 2) == 0) { dest = dest_window; if (is_decl) @@ -5264,7 +5264,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx) goto theend; } } - else if (STRNCMP(var_start, "t:", 2) == 0) + else if (varlen > 1 && STRNCMP(var_start, "t:", 2) == 0) { dest = dest_tab; if (is_decl) @@ -5273,7 +5273,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx) goto theend; } } - else if (STRNCMP(var_start, "v:", 2) == 0) + else if (varlen > 1 && STRNCMP(var_start, "v:", 2) == 0) { typval_T *vtv; int di_flags; @@ -5337,14 +5337,18 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx) goto theend; } } - else if (STRNCMP(var_start, "s:", 2) == 0 + else if ((varlen > 1 && STRNCMP(var_start, "s:", 2) == 0) || lookup_script(var_start, varlen) == OK || find_imported(var_start, varlen, cctx) != NULL) { dest = dest_script; if (is_decl) { - semsg(_("E1054: Variable already declared in the script: %s"), + if ((varlen > 1 && STRNCMP(var_start, "s:", 2) == 0)) + semsg(_("E1101: Cannot declare a script variable in a function: %s"), + name); + else + semsg(_("E1054: Variable already declared in the script: %s"), name); goto theend; } |