To: vim_dev@googlegroups.com Subject: Patch 9.0.1605 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.1605 Problem: Crash when calling method on super in child constructor. (Israel Chauca Fuentes) Solution: Clear the type list. (Ernie Rael, closes #12489, closes #12471) Files: src/userfunc.c, src/vim9class.c, src/testdir/test_vim9_class.vim *** ../vim-9.0.1604/src/userfunc.c 2023-05-24 21:02:20.489162125 +0100 --- src/userfunc.c 2023-06-04 18:06:41.187146212 +0100 *************** *** 5651,5658 **** // type_T **uf_arg_types; // type_T *uf_ret_type; ! ufunc->uf_type_list.ga_len = 0; ! ufunc->uf_type_list.ga_data = NULL; // TODO: partial_T *uf_partial; --- 5651,5658 ---- // type_T **uf_arg_types; // type_T *uf_ret_type; ! // make uf_type_list empty ! ga_init(&ufunc->uf_type_list); // TODO: partial_T *uf_partial; *** ../vim-9.0.1604/src/vim9class.c 2023-04-18 19:07:21.194891892 +0100 --- src/vim9class.c 2023-06-04 18:07:57.411053618 +0100 *************** *** 1025,1031 **** if (*fup == NULL) goto cleanup; ! mch_memmove(*fup, gap->ga_data, sizeof(ufunc_T *) * gap->ga_len); vim_free(gap->ga_data); if (loop == 1) cl->class_class_function_count_child = gap->ga_len; --- 1025,1033 ---- if (*fup == NULL) goto cleanup; ! if (gap->ga_len != 0) ! mch_memmove(*fup, gap->ga_data, ! sizeof(ufunc_T *) * gap->ga_len); vim_free(gap->ga_data); if (loop == 1) cl->class_class_function_count_child = gap->ga_len; *** ../vim-9.0.1604/src/testdir/test_vim9_class.vim 2023-05-19 19:01:13.292413300 +0100 --- src/testdir/test_vim9_class.vim 2023-06-04 17:58:25.647933367 +0100 *************** *** 1636,1641 **** --- 1636,1663 ---- END v9.CheckScriptSuccess(lines) unlet g:result + + # Using super, Child invokes Base method which has optional arg. #12471 + lines =<< trim END + vim9script + + class Base + this.success: bool = false + def Method(arg = 0) + this.success = true + enddef + endclass + + class Child extends Base + def new() + super.Method() + enddef + endclass + + var obj = Child.new() + assert_equal(true, obj.success) + END + v9.CheckScriptSuccess(lines) enddef *** ../vim-9.0.1604/src/version.c 2023-06-04 16:55:23.342362151 +0100 --- src/version.c 2023-06-04 18:00:50.823659423 +0100 *************** *** 697,698 **** --- 697,700 ---- { /* Add new patch number below this line */ + /**/ + 1605, /**/ -- hundred-and-one symptoms of being an internet addict: 114. You are counting items, you go "0,1,2,3,4,5,6,7,8,9,A,B,C,D...". /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///