]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1902: Vim9: Coverity complains about dead code v9.0.1902
authorYegappan Lakshmanan <yegappan@yahoo.com>
Sat, 16 Sep 2023 16:05:07 +0000 (18:05 +0200)
committerChristian Brabandt <cb@256bit.org>
Sat, 16 Sep 2023 16:05:07 +0000 (18:05 +0200)
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 <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
src/version.c
src/vim9class.c

index a0e61566ad76caf6f88bf4751f21f13ee6218f8d..677c35cb05c3aa3652f41da9d96be14cc723eec4 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1902,
 /**/
     1901,
 /**/
index bf7d63295777b0d8c78a76ec13161ac1a30e3fab..a36c482d16c2c44edc59dfae2fe0c2296297ac4c 100644 (file)
@@ -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)
-       {
-           // 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
+       if (loop == 2)
+       {
+           // 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)
        {