changeset 33268:e231b9af0f44 v9.0.1902

patch 9.0.1902: Vim9: Coverity complains about dead code Commit: https://github.com/vim/vim/commit/e2deb7e598687e6359009c509d14f8b85be5a13b Author: Yegappan Lakshmanan <yegappan@yahoo.com> 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 <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
author Christian Brabandt <cb@256bit.org>
date Sat, 16 Sep 2023 18:15:06 +0200
parents fdd5caecb909
children 248c81343a3e
files src/version.c src/vim9class.c
diffstat 2 files changed, 16 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- 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,
--- 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)
 	{