refactor(options): make os_oldval and os_newval use OptValData

This commit is contained in:
Famiu Haque 2023-10-14 20:02:42 +06:00
parent af010e23f3
commit f1a58a8dcc
3 changed files with 31 additions and 47 deletions

View File

@ -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,
optset_T did_set_cb_args = {
.os_varp = varp,
.os_flags = opt_flags,
.os_oldval.number = old_value.data.number,
.os_newval.number = value.data.number,
.os_oldval = old_value.data,
.os_newval = value.data,
.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 };
.os_win = curwin
};
errmsg = did_set_cb(&did_set_cb_args);
doskip = did_set_cb_args.os_doskip;

View File

@ -17,16 +17,17 @@ typedef enum {
kOptValTypeString,
} OptValType;
/// Option value
typedef struct {
OptValType type;
union {
typedef union {
// boolean options are actually tri-states because they have a third "None" value.
TriState boolean;
OptInt number;
String string;
} data;
} OptValData;
/// Option value
typedef struct {
OptValType type;
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.

View File

@ -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,