Mercurial > vim
diff src/vim9type.c @ 33933:aceaf677dd92 v9.0.2163
patch 9.0.2163: Vim9: type can be assigned to list/dict
Commit: https://github.com/vim/vim/commit/fa831102c38c9192edf3aaf0cbcaff9ee5e006ac
Author: Ernie Rael <errael@raelity.com>
Date: Thu Dec 14 20:06:39 2023 +0100
patch 9.0.2163: Vim9: type can be assigned to list/dict
Problem: Vim9: type can be assigned to list/dict
Solution: Prevent assigning a `type` to a `list` or `dict`
closes: #13683
Signed-off-by: Ernie Rael <errael@raelity.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 14 Dec 2023 20:15:08 +0100 |
parents | a49ae967e9ed |
children | 84b93d95a952 |
line wrap: on
line diff
--- a/src/vim9type.c +++ b/src/vim9type.c @@ -1660,17 +1660,16 @@ get_member_type_from_stack( // Use "unknown" for an empty list or dict. if (count == 0) return &t_unknown; - - // Use the first value type for the list member type, then find the common - // type from following items. + // Find the common type from following items. typep = ((type2_T *)stack->ga_data) + stack->ga_len; - result = (typep -(count * skip) + skip - 1)->type_curr; - for (i = 1; i < count; ++i) + result = &t_unknown; + for (i = 0; i < count; ++i) { - if (result == &t_any) - break; // won't get more common type = (typep -((count - i) * skip) + skip - 1)->type_curr; - common_type(type, result, &result, type_gap); + if (check_type_is_value(type) == FAIL) + return NULL; + if (result != &t_any) + common_type(type, result, &result, type_gap); } return result;