diff src/vim9type.c @ 31704:69ee530cac28 v9.0.1184

patch 9.0.1184: interface of an object is not recognized when checking type Commit: https://github.com/vim/vim/commit/a94bd9d9396183eb7781f8d6a5a0e6e97442e9ed Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jan 12 15:01:32 2023 +0000 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.
author Bram Moolenaar <Bram@vim.org>
date Thu, 12 Jan 2023 16:15:04 +0100
parents 9fba3e8bbadc
children 824fc05d9571
line wrap: on
line diff
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -876,11 +876,21 @@ check_type_maybe(
 	}
 	else if (expected->tt_type == VAR_OBJECT)
 	{
+	    // check the class, base class or an implemented interface matches
 	    class_T *cl;
 	    for (cl = (class_T *)actual->tt_member; cl != NULL;
 							cl = cl->class_extends)
+	    {
 		if ((class_T *)expected->tt_member == cl)
 		    break;
+		int i;
+		for (i = cl->class_interface_count - 1; i >= 0; --i)
+		    if ((class_T *)expected->tt_member
+						 == cl->class_interfaces_cl[i])
+			break;
+		if (i >= 0)
+		    break;
+	    }
 	    if (cl == NULL)
 		ret = FAIL;
 	}