# HG changeset patch # User Christian Brabandt # Date 1694880906 -7200 # Node ID e231b9af0f442b75c5dc4f96cfea67f3d8020aba # Parent fdd5caecb90933701435f9d61dd4921269b89df5 patch 9.0.1902: Vim9: Coverity complains about dead code Commit: https://github.com/vim/vim/commit/e2deb7e598687e6359009c509d14f8b85be5a13b Author: Yegappan Lakshmanan Date: Sat Sep 16 18:05:07 2023 +0200 patch 9.0.1902: Vim9: Coverity complains about dead code Problem: Vim9: Coverity complains about dead code Solution: Copy only object methods from the super class to a subclass when extending a class. Fix Coverity warning. closes: #13103 Signed-off-by: Christian Brabandt Co-authored-by: Yegappan Lakshmanan diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1902, +/**/ 1901, /**/ 1900, diff --git a/src/vim9class.c b/src/vim9class.c --- a/src/vim9class.c +++ b/src/vim9class.c @@ -1049,9 +1049,9 @@ add_default_constructor( } /* - * Add the class functions and object methods to the new class "cl". - * When extending a class, add the functions and methods from the parent class - * also. + * Add the class methods and object methods to the new class "cl". + * When extending a class "extends_cl", add the instance methods from the + * parent class also. */ static int add_classfuncs_objmethods( @@ -1095,26 +1095,19 @@ add_classfuncs_objmethods( else cl->class_obj_method_count_child = gap->ga_len; - int skipped = 0; - for (int i = 0; i < parent_count; ++i) + if (loop == 2) { - // Copy functions from the parent. Can't use the same - // function, because "uf_class" is different and compilation - // will have a different result. - // Put them after the functions in the current class, object - // methods may be overruled, then "super.Method()" is used to - // find a method from the parent. - // Skip "new" functions. TODO: not all of them. - if (loop == 1 && STRNCMP( - extends_cl->class_class_functions[i]->uf_name, - "new", 3) == 0) - ++skipped; - else + // Copy instance methods from the parent. + + for (int i = 0; i < parent_count; ++i) { - ufunc_T *pf = (loop == 1 - ? extends_cl->class_class_functions - : extends_cl->class_obj_methods)[i]; - (*fup)[gap->ga_len + i - skipped] = copy_function(pf); + // Can't use the same parent function, because "uf_class" is + // different and compilation will have a different result. + // Put them after the functions in the current class, object + // methods may be overruled, then "super.Method()" is used to + // find a method from the parent. + ufunc_T *pf = (extends_cl->class_obj_methods)[i]; + (*fup)[gap->ga_len + i] = copy_function(pf); // If the child class overrides a function from the parent // the signature must be equal. @@ -1135,8 +1128,6 @@ add_classfuncs_objmethods( } } - *fcount -= skipped; - // Set the class pointer on all the functions and object methods. for (int i = 0; i < *fcount; ++i) {