]> granicus.if.org Git - vim/commitdiff
patch 8.2.3948: Vim9: failure with partial with unknown argument count v8.2.3948
authorBram Moolenaar <Bram@vim.org>
Thu, 30 Dec 2021 13:59:20 +0000 (13:59 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 30 Dec 2021 13:59:20 +0000 (13:59 +0000)
Problem:    Vim9: failure with partial with unknown argument count.
Solution:   Do not copy argument types if there aren't any.

src/version.c
src/vim9type.c

index 56825f547b5653a980fb483da68a0cb6b6be9c77..a362dca9a7d3c16effdb822c21b62da6fe4e7983 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3948,
 /**/
     3947,
 /**/
index a9fb5b0e7875c407b2cadc4ea519cacc662ef1dd..c6e80e6777c92d604d1965b910d59075709c3090 100644 (file)
@@ -369,19 +369,22 @@ typval2type_int(typval_T *tv, int copyID, garray_T *type_gap, int do_member)
                    if (type == NULL)
                        return NULL;
                    *type = *ufunc->uf_func_type;
-                   type->tt_argcount -= tv->vval.v_partial->pt_argc;
-                   type->tt_min_argcount -= tv->vval.v_partial->pt_argc;
-                   if (type->tt_argcount == 0)
-                       type->tt_args = NULL;
-                   else
+                   if (type->tt_argcount >= 0)
                    {
-                       int i;
+                       type->tt_argcount -= tv->vval.v_partial->pt_argc;
+                       type->tt_min_argcount -= tv->vval.v_partial->pt_argc;
+                       if (type->tt_argcount == 0)
+                           type->tt_args = NULL;
+                       else
+                       {
+                           int i;
 
-                       func_type_add_arg_types(type, type->tt_argcount,
+                           func_type_add_arg_types(type, type->tt_argcount,
                                                                     type_gap);
-                       for (i = 0; i < type->tt_argcount; ++i)
-                           type->tt_args[i] = ufunc->uf_func_type->tt_args[
+                           for (i = 0; i < type->tt_argcount; ++i)
+                               type->tt_args[i] = ufunc->uf_func_type->tt_args[
                                              i + tv->vval.v_partial->pt_argc];
+                       }
                    }
                    return type;
                }