summaryrefslogtreecommitdiffstats
path: root/src/option.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-12-31 17:41:01 +0100
committerBram Moolenaar <Bram@vim.org>2020-12-31 17:41:01 +0100
commitdd1f426bd617ac6a775f2e7795ff0b159e3fa315 (patch)
tree4ff4b05181d01272e12a482a91dec6a6ef5095bc /src/option.c
parentca2f7e7af32d51c2be378a5298bc85958c877653 (diff)
patch 8.2.2254: Vim9: bool option type is numberv8.2.2254
Problem: Vim9: bool option type is number. Solution: Have get_option_value() return a different value for bool and number options. (closes #7583)
Diffstat (limited to 'src/option.c')
-rw-r--r--src/option.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/src/option.c b/src/option.c
index dd09e0e764..ca6fadb504 100644
--- a/src/option.c
+++ b/src/option.c
@@ -3834,13 +3834,15 @@ findoption(char_u *arg)
* Get the value for an option.
*
* Returns:
- * Number or Toggle option: 1, *numval gets value.
- * String option: 0, *stringval gets allocated string.
- * Hidden Number or Toggle option: -1.
- * hidden String option: -2.
- * unknown option: -3.
+ * Number option: gov_number, *numval gets value.
+ * Tottle option: gov_bool, *numval gets value.
+ * String option: gov_string, *stringval gets allocated string.
+ * Hidden Number option: gov_hidden_number.
+ * Hidden Toggle option: gov_hidden_bool.
+ * Hidden String option: gov_hidden_string.
+ * Unknown option: gov_unknown.
*/
- int
+ getoption_T
get_option_value(
char_u *name,
long *numval,
@@ -3851,16 +3853,17 @@ get_option_value(
char_u *varp;
opt_idx = findoption(name);
- if (opt_idx < 0) // unknown option
+ if (opt_idx < 0) // option not in the table
{
int key;
if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_'
- && (key = find_key_option(name, FALSE)) != 0)
+ && (key = find_key_option(name, FALSE)) != 0)
{
char_u key_name[2];
char_u *p;
+ // check for a terminal option
if (key < 0)
{
key_name[0] = KEY2TERMCAP0(key);
@@ -3876,10 +3879,10 @@ get_option_value(
{
if (stringval != NULL)
*stringval = vim_strsave(p);
- return 0;
+ return gov_string;
}
}
- return -3;
+ return gov_unknown;
}
varp = get_varp_scope(&(options[opt_idx]), opt_flags);
@@ -3887,7 +3890,7 @@ get_option_value(
if (options[opt_idx].flags & P_STRING)
{
if (varp == NULL) // hidden option
- return -2;
+ return gov_hidden_string;
if (stringval != NULL)
{
#ifdef FEAT_CRYPT
@@ -3899,11 +3902,12 @@ get_option_value(
#endif
*stringval = vim_strsave(*(char_u **)(varp));
}
- return 0;
+ return gov_string;
}
if (varp == NULL) // hidden option
- return -1;
+ return (options[opt_idx].flags & P_NUM)
+ ? gov_hidden_number : gov_hidden_bool;
if (options[opt_idx].flags & P_NUM)
*numval = *(long *)varp;
else
@@ -3915,7 +3919,7 @@ get_option_value(
else
*numval = (long) *(int *)varp;
}
- return 1;
+ return (options[opt_idx].flags & P_NUM) ? gov_number : gov_bool;
}
#endif