diff options
author | Famiu Haque <famiuhaque@proton.me> | 2023-10-14 20:02:42 +0600 |
---|---|---|
committer | Famiu Haque <famiuhaque@proton.me> | 2023-10-17 00:08:47 +0600 |
commit | f1a58a8dcc241e18305e7c103fb97cec64a3e46d (patch) | |
tree | e5b526d35a3d0000b68b634f716ac05a0fa28b4a | |
parent | af010e23f38a23bb74ea5b61e1b1a05e76410b5f (diff) | |
download | rneovim-f1a58a8dcc241e18305e7c103fb97cec64a3e46d.tar.gz rneovim-f1a58a8dcc241e18305e7c103fb97cec64a3e46d.tar.bz2 rneovim-f1a58a8dcc241e18305e7c103fb97cec64a3e46d.zip |
refactor(options): make `os_oldval` and `os_newval` use `OptValData`
-rw-r--r-- | src/nvim/option.c | 30 | ||||
-rw-r--r-- | src/nvim/option_defs.h | 32 | ||||
-rw-r--r-- | src/nvim/optionstr.c | 16 |
3 files changed, 31 insertions, 47 deletions
diff --git a/src/nvim/option.c b/src/nvim/option.c index 4d6bba18d6..0c8230d7c9 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -3683,25 +3683,17 @@ static const char *set_option(const int opt_idx, void *varp, OptVal value, int o } if (did_set_cb != NULL) { // TODO(famiu): make os_oldval and os_newval use OptVal. - optset_T did_set_cb_args = (value.type == kOptValTypeNumber) - ? (optset_T){ .os_varp = varp, - .os_flags = opt_flags, - .os_oldval.number = old_value.data.number, - .os_newval.number = value.data.number, - .os_doskip = false, - .os_errbuf = NULL, - .os_errbuflen = 0, - .os_buf = curbuf, - .os_win = curwin } - : (optset_T){ .os_varp = varp, - .os_flags = opt_flags, - .os_oldval.boolean = old_value.data.boolean, - .os_newval.boolean = value.data.boolean, - .os_doskip = false, - .os_errbuf = NULL, - .os_errbuflen = 0, - .os_buf = curbuf, - .os_win = curwin }; + optset_T did_set_cb_args = { + .os_varp = varp, + .os_flags = opt_flags, + .os_oldval = old_value.data, + .os_newval = value.data, + .os_doskip = false, + .os_errbuf = NULL, + .os_errbuflen = 0, + .os_buf = curbuf, + .os_win = curwin + }; errmsg = did_set_cb(&did_set_cb_args); doskip = did_set_cb_args.os_doskip; diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index 7d5cf3aabe..970615535e 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -17,16 +17,17 @@ typedef enum { kOptValTypeString, } OptValType; +typedef union { + // boolean options are actually tri-states because they have a third "None" value. + TriState boolean; + OptInt number; + String string; +} OptValData; + /// Option value typedef struct { OptValType type; - - union { - // boolean options are actually tri-states because they have a third "None" value. - TriState boolean; - OptInt number; - String string; - } data; + OptValData data; } OptVal; /// :set operator types @@ -46,19 +47,10 @@ typedef struct { int os_idx; int os_flags; - /// old value of the option (can be a string, number or a boolean) - union { - const OptInt number; - const bool boolean; - const char *string; - } os_oldval; - - /// new value of the option (can be a string, number or a boolean) - union { - const OptInt number; - const bool boolean; - const char *string; - } os_newval; + /// Old value of the option. + OptValData os_oldval; + /// New value of the option. + OptValData os_newval; /// When set by the called function: Stop processing the option further. /// Currently only used for boolean options. diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c index f8d70981b3..936062b806 100644 --- a/src/nvim/optionstr.c +++ b/src/nvim/optionstr.c @@ -860,7 +860,7 @@ int expand_set_backspace(optexpand_T *args, int *numMatches, char ***matches) const char *did_set_backupcopy(optset_T *args) { buf_T *buf = (buf_T *)args->os_buf; - const char *oldval = args->os_oldval.string; + const char *oldval = args->os_oldval.string.data; int opt_flags = args->os_flags; char *bkc = p_bkc; unsigned *flags = &bkc_flags; @@ -1459,7 +1459,7 @@ const char *did_set_fileformat(optset_T *args) { buf_T *buf = (buf_T *)args->os_buf; char **varp = (char **)args->os_varp; - const char *oldval = args->os_oldval.string; + const char *oldval = args->os_oldval.string.data; int opt_flags = args->os_flags; if (!MODIFIABLE(buf) && !(opt_flags & OPT_GLOBAL)) { return e_modifiable; @@ -1512,7 +1512,7 @@ const char *did_set_filetype_or_syntax(optset_T *args) return e_invarg; } - args->os_value_changed = strcmp(args->os_oldval.string, *varp) != 0; + args->os_value_changed = strcmp(args->os_oldval.string.data, *varp) != 0; // Since we check the value, there is no need to set P_INSECURE, // even when the value comes from a modeline. @@ -2103,7 +2103,7 @@ const char *did_set_sessionoptions(optset_T *args) } if ((ssop_flags & SSOP_CURDIR) && (ssop_flags & SSOP_SESDIR)) { // Don't allow both "sesdir" and "curdir". - const char *oldval = args->os_oldval.string; + const char *oldval = args->os_oldval.string.data; (void)opt_strings_flags(oldval, p_ssop_values, &ssop_flags, true); return e_invarg; } @@ -2224,7 +2224,7 @@ const char *did_set_signcolumn(optset_T *args) { win_T *win = (win_T *)args->os_win; char **varp = (char **)args->os_varp; - const char *oldval = args->os_oldval.string; + const char *oldval = args->os_oldval.string.data; if (check_signcolumn(*varp) != OK) { return e_invarg; } @@ -2578,7 +2578,7 @@ const char *did_set_virtualedit(optset_T *args) } else { if (opt_strings_flags(ve, p_ve_values, flags, true) != OK) { return e_invarg; - } else if (strcmp(ve, args->os_oldval.string) != 0) { + } else if (strcmp(ve, args->os_oldval.string.data) != 0) { // Recompute cursor position in case the new 've' setting // changes something. validate_virtcol_win(win); @@ -2753,8 +2753,8 @@ const char *did_set_string_option(buf_T *buf, win_T *win, int opt_idx, char **va .os_varp = varp, .os_idx = opt_idx, .os_flags = opt_flags, - .os_oldval.string = oldval, - .os_newval.string = *varp, + .os_oldval.string = cstr_as_string(oldval), + .os_newval.string = cstr_as_string(*varp), .os_value_checked = false, .os_value_changed = false, .os_restore_chartab = false, |