summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2023-09-16 18:05:07 +0200
committerChristian Brabandt <cb@256bit.org>2023-09-16 18:05:07 +0200
commite2deb7e598687e6359009c509d14f8b85be5a13b (patch)
treedb4c83a3c5fd461165a719990f9d8f1630541c0c
parentad29f6af0a2edcd1c9e78d8defe86b2155937f7c (diff)
patch 9.0.1902: Vim9: Coverity complains about dead codev9.0.1902
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>
-rw-r--r--src/version.c2
-rw-r--r--src/vim9class.c39
2 files changed, 17 insertions, 24 deletions
diff --git a/src/version.c b/src/version.c
index a0e61566ad..677c35cb05 100644
--- 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
index bf7d632957..a36c482d16 100644
--- 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)
- {
- // 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)
{