patch 9.0.1184: interface of an object is not recognized when checking type

Problem:    Interface of an object is not recognized when checking type.
Solution:   Use the interface implemented by an object.
diff --git a/src/vim9class.c b/src/vim9class.c
index 0970619..a60e70d 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -582,9 +582,13 @@
     }
     VIM_CLEAR(extends);
 
+    class_T **intf_classes = NULL;
+
     // Check all "implements" entries are valid.
     if (success && ga_impl.ga_len > 0)
     {
+	intf_classes = ALLOC_CLEAR_MULT(class_T *, ga_impl.ga_len);
+
 	for (int i = 0; i < ga_impl.ga_len && success; ++i)
 	{
 	    char_u *impl = ((char_u **)ga_impl.ga_data)[i];
@@ -605,8 +609,11 @@
 		success = FALSE;
 	    }
 
-	    // check the members of the interface match the members of the class
 	    class_T *ifcl = tv.vval.v_class;
+	    intf_classes[i] = ifcl;
+	    ++ifcl->class_refcount;
+
+	    // check the members of the interface match the members of the class
 	    for (int loop = 1; loop <= 2 && success; ++loop)
 	    {
 		// loop == 1: check class members
@@ -717,6 +724,9 @@
 		cl->class_interfaces[i] = ((char_u **)ga_impl.ga_data)[i];
 	    VIM_CLEAR(ga_impl.ga_data);
 	    ga_impl.ga_len = 0;
+
+	    cl->class_interfaces_cl = intf_classes;
+	    intf_classes = NULL;
 	}
 
 	// Add class and object members to "cl".
@@ -930,6 +940,18 @@
     {
 	vim_free(cl->class_name);
 	vim_free(cl->class_class_functions);
+	if (cl->class_interfaces != NULL)
+	{
+	    for (int i = 0; i < cl->class_interface_count; ++i)
+		vim_free(cl->class_interfaces[i]);
+	    vim_free(cl->class_interfaces);
+	}
+	if (cl->class_interfaces_cl != NULL)
+	{
+	    for (int i = 0; i < cl->class_interface_count; ++i)
+		class_unref(cl->class_interfaces_cl[i]);
+	    vim_free(cl->class_interfaces_cl);
+	}
 	vim_free(cl->class_obj_members);
 	vim_free(cl->class_obj_methods);
 	vim_free(cl);
@@ -937,6 +959,13 @@
 
     vim_free(extends);
     class_unref(extends_cl);
+
+    if (intf_classes != NULL)
+    {
+	for (int i = 0; i < ga_impl.ga_len; ++i)
+	    class_unref(intf_classes[i]);
+	vim_free(intf_classes);
+    }
     ga_clear_strings(&ga_impl);
 
     for (int round = 1; round <= 2; ++round)
@@ -1321,8 +1350,13 @@
 	class_unref(cl->class_extends);
 
 	for (int i = 0; i < cl->class_interface_count; ++i)
+	{
 	    vim_free(((char_u **)cl->class_interfaces)[i]);
+	    if (cl->class_interfaces_cl[i] != NULL)
+		class_unref(cl->class_interfaces_cl[i]);
+	}
 	vim_free(cl->class_interfaces);
+	vim_free(cl->class_interfaces_cl);
 
 	for (int i = 0; i < cl->class_class_member_count; ++i)
 	{