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;