patch 9.1.1279: Vim9: null_object and null_class are no reserved names
Commit:
https://github.com/vim/vim/commit/8daae6fea9080a0825b5d6b3bb38960d5064bf1b
Author: Yegappan Lakshmanan <[email protected]>
Date: Sat Apr 5 16:00:22 2025 +0200
patch 9.1.1279: Vim9: null_object and null_class are no reserved names
Problem: Vim9: null_object and null_class are no reserved names
Solution: Add null_object and null_class as reserved names.
(Yegappan Lakshmanan)
closes: #17054
Signed-off-by: Yegappan Lakshmanan <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/runtime/doc/vim9class.txt b/runtime/doc/vim9class.txt
index 7ba91e7d9..5d6f7fca1 100644
--- a/runtime/doc/vim9class.txt
+++ b/runtime/doc/vim9class.txt
@@ -1,4 +1,4 @@
-*vim9class.txt* For Vim version 9.1. Last change: 2025 Feb 16
+*vim9class.txt* For Vim version 9.1. Last change: 2025 Apr 05
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -641,8 +641,8 @@ class, then the type of the variable is set.
The following reserved keyword names cannot be used as an object or class
variable name: "super", "this", "true", "false", "null", "null_blob",
-"null_dict", "null_function", "null_list", "null_partial", "null_string",
-"null_channel" and "null_job".
+"null_channel", "null_class", "null_dict", "null_function", "null_job",
+"null_list", "null_object", "null_partial" and "null_string".
Extending a class ~
*extends*
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 97c11a740..2294936ec 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -326,6 +326,8 @@ def Test_reserved_name()
'null_list',
'null_partial',
'null_string',
+ 'null_object',
+ 'null_class',
] + more_names
v9.CheckDefExecAndScriptFailure(['var ' .. name .. ' = 0'], 'E1034:')
v9.CheckDefExecAndScriptFailure(['var ' .. name .. ': bool'], 'E1034:')
diff --git a/src/version.c b/src/version.c
index 883367da1..eba6725de 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1279,
/**/
1278,
/**/
diff --git a/src/vim9script.c b/src/vim9script.c
index cdacf0b23..7e33770a0 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -1119,36 +1119,52 @@ check_script_var_type(
}
// words that cannot be used as a variable
+// Keep this array sorted, as bsearch() is used to search this array.
static char *reserved[] = {
- "true",
"false",
"null",
"null_blob",
+ "null_channel",
+ "null_class",
"null_dict",
"null_function",
+ "null_job",
"null_list",
- "null_tuple",
+ "null_object",
"null_partial",
"null_string",
- "null_channel",
- "null_job",
+ "null_tuple",
"super",
"this",
- NULL
+ "true",
};
+/*
+ * String compare function used for bsearch()
+ */
+ static int
+comp_names(const void *s1, const void *s2)
+{
+ return STRCMP(*(char **)s1, *(char **)s2);
+}
+
+/*
+ * Returns OK if "name" is not a reserved keyword. Otherwise returns FAIL.
+ */
int
check_reserved_name(char_u *name, int is_objm_access)
{
- int idx;
+ // "this" can be used in an object method
+ if (is_objm_access && STRCMP("this", name) == 0)
+ return OK;
+
+ if (bsearch(&name, reserved, ARRAY_LENGTH(reserved),
+ sizeof(reserved[0]), comp_names) != NULL)
+ {
+ semsg(_(e_cannot_use_reserved_name_str), name);
+ return FAIL;
+ }
- for (idx = 0; reserved[idx] != NULL; ++idx)
- if (STRCMP(reserved[idx], name) == 0
- && !(STRCMP("this", name) == 0 && is_objm_access))
- {
- semsg(_(e_cannot_use_reserved_name_str), name);
- return FAIL;
- }
return OK;
}
diff --git a/src/vim9type.c b/src/vim9type.c
index a90c0cc1c..ab5e07752 100644
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -333,6 +333,9 @@ tuple_type_add_types(
return OK;
}
+/*
+ * Get a list type, based on the member item type in "member_type".
+ */
type_T *
get_list_type(type_T *member_type, garray_T *type_gap)
{
@@ -367,9 +370,7 @@ get_list_type(type_T *member_type, garray_T *type_gap)
* "tuple_types_ga".
*/
type_T *
-get_tuple_type(
- garray_T *tuple_types_gap,
- garray_T *type_gap)
+get_tuple_type(garray_T *tuple_types_gap, garray_T *type_gap)
{
type_T *type;
type_T **tuple_types = tuple_types_gap->ga_data;
@@ -397,6 +398,9 @@ get_tuple_type(
return type;
}
+/*
+ * Get a dict type, based on the member item type in "member_type".
+ */
type_T *
get_dict_type(type_T *member_type, garray_T *type_gap)
{
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1u14IY-0025i6-QH%40256bit.org.