Patch 8.2.2897

4 views
Skip to first unread message

Bram Moolenaar

unread,
May 28, 2021, 3:06:42 PM5/28/21
to vim...@googlegroups.com

Patch 8.2.2897
Problem: Vim9: can use reserved words at the script level.
Solution: Check variable names for reserved words. (closes #8253)
Files: src/vim9compile.c, src/vim9script.c, src/proto/vim9script.pro,
src/eval.c, src/testdir/test_vim9_assign.vim


*** ../vim-8.2.2896/src/vim9compile.c 2021-05-28 17:52:36.908197725 +0200
--- src/vim9compile.c 2021-05-28 20:52:22.859774682 +0200
***************
*** 5594,5607 ****
return 0;
}

- // words that cannot be used as a variable
- static char *reserved[] = {
- "true",
- "false",
- "null",
- NULL
- };
-
/*
* Generate the load instruction for "name".
*/
--- 5594,5599 ----
***************
*** 5995,6010 ****
}
else
{
- int idx;
-
// No specific kind of variable recognized, just a name.
! for (idx = 0; reserved[idx] != NULL; ++idx)
! if (STRCMP(reserved[idx], lhs->lhs_name) == 0)
! {
! semsg(_(e_cannot_use_reserved_name), lhs->lhs_name);
! return FAIL;
! }
!

if (lookup_local(var_start, lhs->lhs_varlen,
&lhs->lhs_local_lvar, cctx) == OK)
--- 5987,5995 ----
}
else
{
// No specific kind of variable recognized, just a name.
! if (check_reserved_name(lhs->lhs_name) == FAIL)
! return FAIL;

if (lookup_local(var_start, lhs->lhs_varlen,
&lhs->lhs_local_lvar, cctx) == OK)
*** ../vim-8.2.2896/src/vim9script.c 2021-04-24 19:08:20.488010321 +0200
--- src/vim9script.c 2021-05-28 21:03:15.021312153 +0200
***************
*** 709,718 ****
}
name = vim_strnsave(arg, p - arg);

! // parse type
p = skipwhite(p + 1);
type = parse_type(&p, &si->sn_type_list, TRUE);
! if (type == NULL)
{
vim_free(name);
return p;
--- 709,718 ----
}
name = vim_strnsave(arg, p - arg);

! // parse type, check for reserved name
p = skipwhite(p + 1);
type = parse_type(&p, &si->sn_type_list, TRUE);
! if (type == NULL || check_reserved_name(name) == FAIL)
{
vim_free(name);
return p;
***************
*** 974,977 ****
--- 974,999 ----
return OK; // not really
}

+ // words that cannot be used as a variable
+ static char *reserved[] = {
+ "true",
+ "false",
+ "null",
+ NULL
+ };
+
+ int
+ check_reserved_name(char_u *name)
+ {
+ int idx;
+
+ for (idx = 0; reserved[idx] != NULL; ++idx)
+ if (STRCMP(reserved[idx], name) == 0)
+ {
+ semsg(_(e_cannot_use_reserved_name), name);
+ return FAIL;
+ }
+ return OK;
+ }
+
#endif // FEAT_EVAL
*** ../vim-8.2.2896/src/proto/vim9script.pro 2021-04-24 19:08:20.488010321 +0200
--- src/proto/vim9script.pro 2021-05-28 20:52:15.455803580 +0200
***************
*** 18,21 ****
--- 18,22 ----
void free_all_script_vars(scriptitem_T *si);
svar_T *find_typval_in_script(typval_T *dest);
int check_script_var_type(typval_T *dest, typval_T *value, char_u *name, where_T where);
+ int check_reserved_name(char_u *name);
/* vim: set ft=c : */
*** ../vim-8.2.2896/src/eval.c 2021-05-28 17:52:36.904197735 +0200
--- src/eval.c 2021-05-28 20:59:53.366060869 +0200
***************
*** 1309,1314 ****
--- 1309,1317 ----
{
cc = *endp;
*endp = NUL;
+ if (in_vim9script() && check_reserved_name(lp->ll_name) == FAIL)
+ return;
+
if (lp->ll_blob != NULL)
{
int error = FALSE, val;
*** ../vim-8.2.2896/src/testdir/test_vim9_assign.vim 2021-04-28 20:40:39.799852470 +0200
--- src/testdir/test_vim9_assign.vim 2021-05-28 21:03:51.045179137 +0200
***************
*** 249,254 ****
--- 249,261 ----
END
enddef

+ def Test_reserved_name()
+ for name in ['true', 'false', 'null']
+ CheckDefExecAndScriptFailure(['var ' .. name .. ' = 0'], 'E1034:')
+ CheckDefExecAndScriptFailure(['var ' .. name .. ': bool'], 'E1034:')
+ endfor
+ enddef
+
def Test_skipped_assignment()
var lines =<< trim END
for x in []
*** ../vim-8.2.2896/src/version.c 2021-05-28 18:32:08.646074589 +0200
--- src/version.c 2021-05-28 21:05:29.272817314 +0200
***************
*** 752,753 ****
--- 752,755 ----
{ /* Add new patch number below this line */
+ /**/
+ 2897,
/**/

--
There are 10 kinds of people: Those who understand binary and those who don't.

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages