Mercurial > vim
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; }