Mercurial > vim
changeset 29497:9908c07ccb56 v9.0.0090
patch 9.0.0090: no error when assigning bool to a string option
Commit: https://github.com/vim/vim/commit/28f84e17b068daca2635692d279930dcb7a150d0
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jul 27 12:30:13 2022 +0100
patch 9.0.0090: no error when assigning bool to a string option
Problem: No error when assigning bool to a string option with setwinvar().
Solution: Give an error (closes https://github.com/vim/vim/issues/10766)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 27 Jul 2022 13:45:05 +0200 |
parents | 38d79c3d66f0 |
children | 13d9f3a9061d |
files | src/evalvars.c src/option.c src/proto/option.pro src/testdir/test_vim9_builtin.vim src/version.c |
diffstat | 5 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/evalvars.c +++ b/src/evalvars.c @@ -4223,6 +4223,11 @@ set_option_from_tv(char_u *varname, typv if (varp->v_type == VAR_BOOL) { + if (is_string_option(varname)) + { + emsg(_(e_string_required)); + return; + } numval = (long)varp->vval.v_number; strval = (char_u *)"0"; // avoid using "false" }
--- a/src/option.c +++ b/src/option.c @@ -4478,6 +4478,20 @@ is_option_allocated(char *name) } #endif +#if defined(FEAT_EVAL) || defined(PROTO) +/* + * Return TRUE if "name" is a string option. + * Returns FALSE if option "name" does not exist. + */ + int +is_string_option(char_u *name) +{ + int idx = findoption(name); + + return idx >= 0 && (options[idx].flags & P_STRING); +} +#endif + /* * Translate a string like "t_xx", "<t_xx>" or "<S-Tab>" to a key number. * When "has_lt" is true there is a '<' before "*arg_arg".
--- a/src/proto/option.pro +++ b/src/proto/option.pro @@ -43,6 +43,7 @@ char_u *get_term_code(char_u *tname); char_u *get_highlight_default(void); char_u *get_encoding_default(void); int is_option_allocated(char *name); +int is_string_option(char_u *name); int makeset(FILE *fd, int opt_flags, int local_only); int makefoldset(FILE *fd); void clear_termoptions(void);
--- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -3719,6 +3719,7 @@ def Test_setwinvar() v9.CheckDefAndScriptFailure(['setwinvar("a", "b", 1)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1']) v9.CheckDefAndScriptFailure(['setwinvar(1, 2, "c")'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2']) assert_fails('setwinvar(1, "", 10)', 'E461: Illegal variable name') + assert_fails('setwinvar(0, "&rulerformat", true)', 'E928:') enddef def Test_sha256()