0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

patch 9.0.1724: vim9class constructor argument type checking bug

Problem: vim9class constructor argument type checking bug
Solution: fix it

closes: #12816

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: h-east <h.east.727@gmail.com>
This commit is contained in:
h-east
2023-08-16 21:49:54 +09:00
committed by Christian Brabandt
parent 5a0dd71ed9
commit 2261c89a49
5 changed files with 108 additions and 7 deletions

View File

@@ -358,8 +358,8 @@ compile_class_object_index(cctx_T *cctx, char_u **arg, type_T *type)
if (type->tt_type == VAR_OBJECT
&& (cl->class_flags & (CLASS_INTERFACE | CLASS_EXTENDED)))
return generate_CALL(cctx, ufunc, cl, fi, argcount);
return generate_CALL(cctx, ufunc, NULL, 0, argcount);
return generate_CALL(cctx, ufunc, cl, fi, type, argcount);
return generate_CALL(cctx, ufunc, NULL, 0, type, argcount);
}
if (type->tt_type == VAR_OBJECT)
@@ -932,6 +932,7 @@ compile_call(
int has_g_namespace;
ca_special_T special_fn;
imported_T *import;
type_T *type;
if (varlen >= sizeof(namebuf))
{
@@ -1015,6 +1016,7 @@ compile_call(
if (compile_arguments(arg, cctx, &argcount, special_fn) == FAIL)
goto theend;
type = get_decl_type_on_stack(cctx, 1);
is_autoload = vim_strchr(name, AUTOLOAD_CHAR) != NULL;
if (ASCII_ISLOWER(*name) && name[1] != ':' && !is_autoload)
{
@@ -1032,8 +1034,6 @@ compile_call(
if (STRCMP(name, "add") == 0 && argcount == 2)
{
type_T *type = get_decl_type_on_stack(cctx, 1);
// add() can be compiled to instructions if we know the type
if (type->tt_type == VAR_LIST)
{
@@ -1080,7 +1080,7 @@ compile_call(
{
if (!func_is_global(ufunc))
{
res = generate_CALL(cctx, ufunc, NULL, 0, argcount);
res = generate_CALL(cctx, ufunc, NULL, 0, type, argcount);
goto theend;
}
if (!has_g_namespace
@@ -1109,7 +1109,7 @@ compile_call(
// If we can find a global function by name generate the right call.
if (ufunc != NULL)
{
res = generate_CALL(cctx, ufunc, NULL, 0, argcount);
res = generate_CALL(cctx, ufunc, NULL, 0, type, argcount);
goto theend;
}