mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.2497: no error when using more than one character for a register
Problem: No error when using more than one character for a register name. Solution: In Vim9 script check for a single character string. (closes #7814) Fix that VAR_BOOL and VAR_SPECIAL are not considered equal.
This commit is contained in:
parent
5202929dab
commit
418a29f0ff
@ -359,3 +359,5 @@ EXTERN char e_cannot_use_default_for_variable_arguments[]
|
|||||||
INIT(= N_("E1160: Cannot use a default for variable arguments"));
|
INIT(= N_("E1160: Cannot use a default for variable arguments"));
|
||||||
EXTERN char e_cannot_json_encode_str[]
|
EXTERN char e_cannot_json_encode_str[]
|
||||||
INIT(= N_("E1161: Cannot json encode a %s"));
|
INIT(= N_("E1161: Cannot json encode a %s"));
|
||||||
|
EXTERN char e_register_name_must_be_one_char_str[]
|
||||||
|
INIT(= N_("E1162: Register name must be one character: %s"));
|
||||||
|
@ -4285,7 +4285,13 @@ f_getreg(typval_T *argvars, typval_T *rettv)
|
|||||||
if (argvars[0].v_type != VAR_UNKNOWN)
|
if (argvars[0].v_type != VAR_UNKNOWN)
|
||||||
{
|
{
|
||||||
strregname = tv_get_string_chk(&argvars[0]);
|
strregname = tv_get_string_chk(&argvars[0]);
|
||||||
error = strregname == NULL;
|
if (strregname == NULL)
|
||||||
|
error = TRUE;
|
||||||
|
else if (in_vim9script() && STRLEN(strregname) > 1)
|
||||||
|
{
|
||||||
|
semsg(_(e_register_name_must_be_one_char_str), strregname);
|
||||||
|
error = TRUE;
|
||||||
|
}
|
||||||
if (argvars[1].v_type != VAR_UNKNOWN)
|
if (argvars[1].v_type != VAR_UNKNOWN)
|
||||||
{
|
{
|
||||||
arg2 = (int)tv_get_bool_chk(&argvars[1], &error);
|
arg2 = (int)tv_get_bool_chk(&argvars[1], &error);
|
||||||
@ -4335,6 +4341,11 @@ f_getregtype(typval_T *argvars, typval_T *rettv)
|
|||||||
if (argvars[0].v_type != VAR_UNKNOWN)
|
if (argvars[0].v_type != VAR_UNKNOWN)
|
||||||
{
|
{
|
||||||
strregname = tv_get_string_chk(&argvars[0]);
|
strregname = tv_get_string_chk(&argvars[0]);
|
||||||
|
if (strregname != NULL && in_vim9script() && STRLEN(strregname) > 1)
|
||||||
|
{
|
||||||
|
semsg(_(e_register_name_must_be_one_char_str), strregname);
|
||||||
|
strregname = NULL;
|
||||||
|
}
|
||||||
if (strregname == NULL) // type error; errmsg already given
|
if (strregname == NULL) // type error; errmsg already given
|
||||||
{
|
{
|
||||||
rettv->v_type = VAR_STRING;
|
rettv->v_type = VAR_STRING;
|
||||||
@ -7368,6 +7379,11 @@ f_getreginfo(typval_T *argvars, typval_T *rettv)
|
|||||||
strregname = tv_get_string_chk(&argvars[0]);
|
strregname = tv_get_string_chk(&argvars[0]);
|
||||||
if (strregname == NULL)
|
if (strregname == NULL)
|
||||||
return;
|
return;
|
||||||
|
if (in_vim9script() && STRLEN(strregname) > 1)
|
||||||
|
{
|
||||||
|
semsg(_(e_register_name_must_be_one_char_str), strregname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
strregname = get_vim_var_str(VV_REG);
|
strregname = get_vim_var_str(VV_REG);
|
||||||
@ -7410,7 +7426,7 @@ f_getreginfo(typval_T *argvars, typval_T *rettv)
|
|||||||
{
|
{
|
||||||
item->di_tv.v_type = VAR_SPECIAL;
|
item->di_tv.v_type = VAR_SPECIAL;
|
||||||
item->di_tv.vval.v_number = regname == buf[0]
|
item->di_tv.vval.v_number = regname == buf[0]
|
||||||
? VVAL_TRUE : VVAL_FALSE;
|
? VVAL_TRUE : VVAL_FALSE;
|
||||||
(void)dict_add(dict, item);
|
(void)dict_add(dict, item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -8472,6 +8488,11 @@ f_setreg(typval_T *argvars, typval_T *rettv)
|
|||||||
|
|
||||||
if (strregname == NULL)
|
if (strregname == NULL)
|
||||||
return; // type error; errmsg already given
|
return; // type error; errmsg already given
|
||||||
|
if (in_vim9script() && STRLEN(strregname) > 1)
|
||||||
|
{
|
||||||
|
semsg(_(e_register_name_must_be_one_char_str), strregname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
regname = *strregname;
|
regname = *strregname;
|
||||||
if (regname == 0 || regname == '@')
|
if (regname == 0 || regname == '@')
|
||||||
regname = '"';
|
regname = '"';
|
||||||
|
@ -531,6 +531,7 @@ def Test_getreg()
|
|||||||
var lines = ['aaa', 'bbb', 'ccc']
|
var lines = ['aaa', 'bbb', 'ccc']
|
||||||
setreg('a', lines)
|
setreg('a', lines)
|
||||||
getreg('a', true, true)->assert_equal(lines)
|
getreg('a', true, true)->assert_equal(lines)
|
||||||
|
assert_fails('getreg("ab")', 'E1162:')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_getreg_return_type()
|
def Test_getreg_return_type()
|
||||||
@ -539,6 +540,20 @@ def Test_getreg_return_type()
|
|||||||
var s3: list<string> = getreg('"', 1, 1)
|
var s3: list<string> = getreg('"', 1, 1)
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
def Test_getreginfo()
|
||||||
|
var text = 'abc'
|
||||||
|
setreg('a', text)
|
||||||
|
getreginfo('a')->assert_equal({regcontents: [text], regtype: 'v', isunnamed: false})
|
||||||
|
assert_fails('getreginfo("ab")', 'E1162:')
|
||||||
|
enddef
|
||||||
|
|
||||||
|
def Test_getregtype()
|
||||||
|
var lines = ['aaa', 'bbb', 'ccc']
|
||||||
|
setreg('a', lines)
|
||||||
|
getregtype('a')->assert_equal('V')
|
||||||
|
assert_fails('getregtype("ab")', 'E1162:')
|
||||||
|
enddef
|
||||||
|
|
||||||
def Test_glob()
|
def Test_glob()
|
||||||
glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim'])
|
glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim'])
|
||||||
enddef
|
enddef
|
||||||
@ -878,6 +893,7 @@ def Test_setreg()
|
|||||||
var reginfo = getreginfo('a')
|
var reginfo = getreginfo('a')
|
||||||
setreg('a', reginfo)
|
setreg('a', reginfo)
|
||||||
getreginfo('a')->assert_equal(reginfo)
|
getreginfo('a')->assert_equal(reginfo)
|
||||||
|
assert_fails('setreg("ab", 0)', 'E1162:')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_slice()
|
def Test_slice()
|
||||||
|
@ -1069,7 +1069,9 @@ tv_equal(
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tv1->v_type != tv2->v_type)
|
if (tv1->v_type != tv2->v_type
|
||||||
|
&& ((tv1->v_type != VAR_BOOL && tv1->v_type != VAR_SPECIAL)
|
||||||
|
|| (tv2->v_type != VAR_BOOL && tv2->v_type != VAR_SPECIAL)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
switch (tv1->v_type)
|
switch (tv1->v_type)
|
||||||
|
@ -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 */
|
||||||
|
/**/
|
||||||
|
2497,
|
||||||
/**/
|
/**/
|
||||||
2496,
|
2496,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user