summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2024-03-29 10:08:23 +0100
committerChristian Brabandt <cb@256bit.org>2024-03-29 10:08:23 +0100
commitabedca96efa76db2bba74a5264df632da862203d (patch)
tree1f9a4e131bd8837945296f5d5f3eaee56cb3157d
parent059aeac2be1a0d30ff80751215794457c1ef1589 (diff)
patch 9.1.0226: Not able to assign enum values to an enum static variablev9.1.0226
Problem: Not able to assign enum values to an enum static variable (zzzyxwvut) Solution: Make it work (Yegappan Lakshmanan) related: #14224 closes: #14329 Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r--src/testdir/test_vim9_enum.vim15
-rw-r--r--src/version.c2
-rw-r--r--src/vim9class.c11
3 files changed, 24 insertions, 4 deletions
diff --git a/src/testdir/test_vim9_enum.vim b/src/testdir/test_vim9_enum.vim
index 6e10e0c705..ceea32fe4f 100644
--- a/src/testdir/test_vim9_enum.vim
+++ b/src/testdir/test_vim9_enum.vim
@@ -964,7 +964,7 @@ def Test_enum_refcount()
enum Star
Gemini,
- Orion,
+ Orion
endenum
assert_equal(3, test_refcount(Star))
assert_equal(2, test_refcount(Star.Gemini))
@@ -1473,4 +1473,17 @@ def Test_enum_eval()
v9.CheckSourceSuccess(lines)
enddef
+" Test for using "values" in an enum class variable
+def Test_use_enum_values_in_class_variable()
+ var lines =<< trim END
+ vim9script
+ enum Dir
+ North, South
+ static const dirs: list<Dir> = Dir.values
+ endenum
+ assert_equal([Dir.North, Dir.South], Dir.dirs)
+ END
+ v9.CheckSourceSuccess(lines)
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/version.c b/src/version.c
index e96f17c25a..b56b6d38dc 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 226,
+/**/
225,
/**/
224,
diff --git a/src/vim9class.c b/src/vim9class.c
index 696349190c..2d60ba95a6 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -2056,6 +2056,11 @@ early_ret:
if (enum_parse_values(eap, cl, line, &classmembers,
&num_enum_values, &enum_end) == FAIL)
break;
+
+ if (enum_end)
+ // Add the enum "values" class variable.
+ enum_add_values_member(cl, &classmembers, num_enum_values,
+ &type_list);
continue;
}
@@ -2368,9 +2373,9 @@ early_ret:
vim_free(theline);
- if (success && is_enum)
- // Add the enum "values" class variable.
- enum_add_values_member(cl, &classmembers, num_enum_values, &type_list);
+ if (success && is_enum && num_enum_values == 0)
+ // Empty enum statement. Add an empty "values" class variable
+ enum_add_values_member(cl, &classmembers, 0, &type_list);
/*
* Check a few things