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"));
|
||||
EXTERN char e_cannot_json_encode_str[]
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
rettv->v_type = VAR_STRING;
|
||||
@ -7368,6 +7379,11 @@ f_getreginfo(typval_T *argvars, typval_T *rettv)
|
||||
strregname = tv_get_string_chk(&argvars[0]);
|
||||
if (strregname == NULL)
|
||||
return;
|
||||
if (in_vim9script() && STRLEN(strregname) > 1)
|
||||
{
|
||||
semsg(_(e_register_name_must_be_one_char_str), strregname);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
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.vval.v_number = regname == buf[0]
|
||||
? VVAL_TRUE : VVAL_FALSE;
|
||||
? VVAL_TRUE : VVAL_FALSE;
|
||||
(void)dict_add(dict, item);
|
||||
}
|
||||
}
|
||||
@ -8472,6 +8488,11 @@ f_setreg(typval_T *argvars, typval_T *rettv)
|
||||
|
||||
if (strregname == NULL)
|
||||
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;
|
||||
if (regname == 0 || regname == '@')
|
||||
regname = '"';
|
||||
|
@ -531,6 +531,7 @@ def Test_getreg()
|
||||
var lines = ['aaa', 'bbb', 'ccc']
|
||||
setreg('a', lines)
|
||||
getreg('a', true, true)->assert_equal(lines)
|
||||
assert_fails('getreg("ab")', 'E1162:')
|
||||
enddef
|
||||
|
||||
def Test_getreg_return_type()
|
||||
@ -539,6 +540,20 @@ def Test_getreg_return_type()
|
||||
var s3: list<string> = getreg('"', 1, 1)
|
||||
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()
|
||||
glob('runtest.vim', true, true, true)->assert_equal(['runtest.vim'])
|
||||
enddef
|
||||
@ -878,6 +893,7 @@ def Test_setreg()
|
||||
var reginfo = getreginfo('a')
|
||||
setreg('a', reginfo)
|
||||
getreginfo('a')->assert_equal(reginfo)
|
||||
assert_fails('setreg("ab", 0)', 'E1162:')
|
||||
enddef
|
||||
|
||||
def Test_slice()
|
||||
|
@ -1069,7 +1069,9 @@ tv_equal(
|
||||
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;
|
||||
|
||||
switch (tv1->v_type)
|
||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2497,
|
||||
/**/
|
||||
2496,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user