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 <yegap...@yahoo.com> 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 <yegap...@yahoo.com> Signed-off-by: Christian Brabandt <c...@256bit.org> 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 vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1u14IY-0025i6-QH%40256bit.org.