Problem: Vim9: wrong error for defining dict function.
Solution: Explicitly check for trying to define a dict function.
(closes 9827)
INIT(= N_("E1180: Variable arguments type must be a list: %s"));
EXTERN char e_cannot_use_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[]
INIT(= N_("E1183: Cannot use a range with an assignment operator: %s"));
#endif
enddef
END
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
def Test_autoload_name_mismatch()
}
else
{
- if (vim9script && p[0] == 's' && p[1] == ':')
+ if (vim9script)
{
- semsg(_(e_cannot_use_s_colon_in_vim9_script_str), p);
- return NULL;
+ if (p[0] == 's' && p[1] == ':')
+ {
+ 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,
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 4460,
/**/
4459,
/**/
{
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;
}