mirror of
https://github.com/vim/vim.git
synced 2025-09-28 04:24:06 -04:00
patch 8.2.2687: Vim9: cannot use "const" for global variable in :def function
Problem: Vim9: cannot use "const" for global variable in :def function. Solution: Do allow using :const for a global variable. (closes #8030)
This commit is contained in:
@@ -1277,6 +1277,13 @@ def Test_var_declaration()
|
|||||||
g:FLIST[0] = 22
|
g:FLIST[0] = 22
|
||||||
assert_equal([22], g:FLIST)
|
assert_equal([22], g:FLIST)
|
||||||
|
|
||||||
|
def SetGlobalConst()
|
||||||
|
const g:globConst = 123
|
||||||
|
enddef
|
||||||
|
SetGlobalConst()
|
||||||
|
assert_equal(123, g:globConst)
|
||||||
|
assert_true(islocked('g:globConst'))
|
||||||
|
|
||||||
const w:FOO: number = 46
|
const w:FOO: number = 46
|
||||||
assert_equal(46, w:FOO)
|
assert_equal(46, w:FOO)
|
||||||
const w:FOOS = 'wfoos'
|
const w:FOOS = 'wfoos'
|
||||||
@@ -1339,6 +1346,17 @@ def Test_var_declaration_fails()
|
|||||||
CheckScriptFailure(lines, 'E741:')
|
CheckScriptFailure(lines, 'E741:')
|
||||||
unlet g:constvar
|
unlet g:constvar
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
def SetGlobalConst()
|
||||||
|
const g:globConst = 123
|
||||||
|
enddef
|
||||||
|
SetGlobalConst()
|
||||||
|
g:globConst = 234
|
||||||
|
END
|
||||||
|
CheckScriptFailure(lines, 'E741: Value is locked: globConst')
|
||||||
|
unlet g:globConst
|
||||||
|
|
||||||
lines =<< trim END
|
lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
const cdict: dict<string> = {}
|
const cdict: dict<string> = {}
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2687,
|
||||||
/**/
|
/**/
|
||||||
2686,
|
2686,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -5752,7 +5752,8 @@ compile_lhs(
|
|||||||
&lhs->lhs_opt_flags, &lhs->lhs_vimvaridx,
|
&lhs->lhs_opt_flags, &lhs->lhs_vimvaridx,
|
||||||
&lhs->lhs_type, cctx) == FAIL)
|
&lhs->lhs_type, cctx) == FAIL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
if (lhs->lhs_dest != dest_local)
|
if (lhs->lhs_dest != dest_local
|
||||||
|
&& cmdidx != CMD_const && cmdidx != CMD_final)
|
||||||
{
|
{
|
||||||
// Specific kind of variable recognized.
|
// Specific kind of variable recognized.
|
||||||
declare_error = is_decl;
|
declare_error = is_decl;
|
||||||
@@ -6519,6 +6520,7 @@ compile_assignment(char_u *arg, exarg_T *eap, cmdidx_T cmdidx, cctx_T *cctx)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (is_decl && cmdidx == CMD_const && (lhs.lhs_dest == dest_script
|
if (is_decl && cmdidx == CMD_const && (lhs.lhs_dest == dest_script
|
||||||
|
|| lhs.lhs_dest == dest_global
|
||||||
|| lhs.lhs_dest == dest_local))
|
|| lhs.lhs_dest == dest_local))
|
||||||
// ":const var": lock the value, but not referenced variables
|
// ":const var": lock the value, but not referenced variables
|
||||||
generate_LOCKCONST(cctx);
|
generate_LOCKCONST(cctx);
|
||||||
|
@@ -963,9 +963,12 @@ check_for_number(typval_T *tv)
|
|||||||
store_var(char_u *name, typval_T *tv)
|
store_var(char_u *name, typval_T *tv)
|
||||||
{
|
{
|
||||||
funccal_entry_T entry;
|
funccal_entry_T entry;
|
||||||
|
int flags = ASSIGN_DECL;
|
||||||
|
|
||||||
|
if (tv->v_lock)
|
||||||
|
flags |= ASSIGN_CONST;
|
||||||
save_funccal(&entry);
|
save_funccal(&entry);
|
||||||
set_var_const(name, NULL, tv, FALSE, ASSIGN_DECL, 0);
|
set_var_const(name, NULL, tv, FALSE, flags, 0);
|
||||||
restore_funccal();
|
restore_funccal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user