aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFamiu Haque <famiuhaque@proton.me>2023-10-14 20:02:42 +0600
committerFamiu Haque <famiuhaque@proton.me>2023-10-17 00:08:47 +0600
commitf1a58a8dcc241e18305e7c103fb97cec64a3e46d (patch)
treee5b526d35a3d0000b68b634f716ac05a0fa28b4a
parentaf010e23f38a23bb74ea5b61e1b1a05e76410b5f (diff)
downloadrneovim-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.c30
-rw-r--r--src/nvim/option_defs.h32
-rw-r--r--src/nvim/optionstr.c16
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,