forked from aniani/vim
patch 8.2.4460: Vim9: wrong error for defining dict function
Problem: Vim9: wrong error for defining dict function. Solution: Explicitly check for trying to define a dict function. (closes 9827)
This commit is contained in:
@@ -3010,7 +3010,8 @@ EXTERN char e_variable_arguments_type_must_be_list_str[]
|
|||||||
INIT(= N_("E1180: Variable arguments type must be a list: %s"));
|
INIT(= N_("E1180: Variable arguments type must be a list: %s"));
|
||||||
EXTERN char e_cannot_use_underscore_here[]
|
EXTERN char e_cannot_use_underscore_here[]
|
||||||
INIT(= N_("E1181: Cannot use an underscore here"));
|
INIT(= N_("E1181: Cannot use an underscore here"));
|
||||||
// E1182 unused
|
EXTERN char e_cannot_define_dict_func_in_vim9_script_str[]
|
||||||
|
INIT(= N_("E1182: Cannot define a dict function in Vim9 script: %s"));
|
||||||
EXTERN char e_cannot_use_range_with_assignment_operator_str[]
|
EXTERN char e_cannot_use_range_with_assignment_operator_str[]
|
||||||
INIT(= N_("E1183: Cannot use a range with an assignment operator: %s"));
|
INIT(= N_("E1183: Cannot use a range with an assignment operator: %s"));
|
||||||
#endif
|
#endif
|
||||||
|
@@ -106,6 +106,63 @@ def Test_wrong_function_name()
|
|||||||
enddef
|
enddef
|
||||||
END
|
END
|
||||||
v9.CheckScriptFailure(lines, 'E1267:')
|
v9.CheckScriptFailure(lines, 'E1267:')
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
var Object = {}
|
||||||
|
function Object.Method()
|
||||||
|
endfunction
|
||||||
|
END
|
||||||
|
v9.CheckScriptFailure(lines, 'E1182:')
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
var Object = {}
|
||||||
|
def Object.Method()
|
||||||
|
enddef
|
||||||
|
END
|
||||||
|
v9.CheckScriptFailure(lines, 'E1182:')
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
g:Object = {}
|
||||||
|
function g:Object.Method()
|
||||||
|
endfunction
|
||||||
|
END
|
||||||
|
v9.CheckScriptFailure(lines, 'E1182:')
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
let s:Object = {}
|
||||||
|
def Define()
|
||||||
|
function s:Object.Method()
|
||||||
|
endfunction
|
||||||
|
enddef
|
||||||
|
defcompile
|
||||||
|
END
|
||||||
|
v9.CheckScriptFailure(lines, 'E1182:')
|
||||||
|
delfunc g:Define
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
let s:Object = {}
|
||||||
|
def Define()
|
||||||
|
def Object.Method()
|
||||||
|
enddef
|
||||||
|
enddef
|
||||||
|
defcompile
|
||||||
|
END
|
||||||
|
v9.CheckScriptFailure(lines, 'E1182:')
|
||||||
|
delfunc g:Define
|
||||||
|
|
||||||
|
lines =<< trim END
|
||||||
|
let g:Object = {}
|
||||||
|
def Define()
|
||||||
|
function g:Object.Method()
|
||||||
|
endfunction
|
||||||
|
enddef
|
||||||
|
defcompile
|
||||||
|
END
|
||||||
|
v9.CheckScriptFailure(lines, 'E1182:')
|
||||||
|
delfunc g:Define
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_autoload_name_mismatch()
|
def Test_autoload_name_mismatch()
|
||||||
|
@@ -4268,10 +4268,21 @@ define_function(exarg_T *eap, char_u *name_arg, garray_T *lines_to_free)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (vim9script && p[0] == 's' && p[1] == ':')
|
if (vim9script)
|
||||||
{
|
{
|
||||||
semsg(_(e_cannot_use_s_colon_in_vim9_script_str), p);
|
if (p[0] == 's' && p[1] == ':')
|
||||||
return NULL;
|
{
|
||||||
|
semsg(_(e_cannot_use_s_colon_in_vim9_script_str), p);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
p = to_name_end(p, TRUE);
|
||||||
|
if (*skipwhite(p) == '.' && vim_strchr(p, '(') != NULL)
|
||||||
|
{
|
||||||
|
semsg(_(e_cannot_define_dict_func_in_vim9_script_str),
|
||||||
|
eap->arg);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
p = eap->arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = save_function_name(&p, &is_global, eap->skip,
|
name = save_function_name(&p, &is_global, eap->skip,
|
||||||
|
@@ -754,6 +754,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 */
|
||||||
|
/**/
|
||||||
|
4460,
|
||||||
/**/
|
/**/
|
||||||
4459,
|
4459,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -831,7 +831,11 @@ compile_nested_function(exarg_T *eap, cctx_T *cctx, garray_T *lines_to_free)
|
|||||||
{
|
{
|
||||||
if (!ends_excmd2(name_start, name_end))
|
if (!ends_excmd2(name_start, name_end))
|
||||||
{
|
{
|
||||||
semsg(_(e_invalid_command_str), eap->cmd);
|
if (*skipwhite(name_end) == '.')
|
||||||
|
semsg(_(e_cannot_define_dict_func_in_vim9_script_str),
|
||||||
|
eap->cmd);
|
||||||
|
else
|
||||||
|
semsg(_(e_invalid_command_str), eap->cmd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user