aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 3f73074333..370565c441 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -3446,12 +3446,10 @@ static int eval7(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool wan
// Register contents: @r.
case '@':
(*arg)++;
+ int regname = mb_cptr2char_adv((const char**) arg);
if (evaluate) {
rettv->v_type = VAR_STRING;
- rettv->vval.v_string = get_reg_contents(**arg, kGRegExprSrc);
- }
- if (**arg != NUL) {
- (*arg)++;
+ rettv->vval.v_string = get_reg_contents(regname, kGRegExprSrc);
}
break;
@@ -7073,16 +7071,17 @@ void set_argv_var(char **argv, int argc)
/// Set v:register if needed.
void set_reg_var(int c)
{
- char regname;
+ int regname;
if (c == 0 || c == ' ') {
regname = '"';
} else {
- regname = (char)c;
+ regname = c;
}
+
// Avoid free/alloc when the value is already right.
if (vimvars[VV_REG].vv_str == NULL || vimvars[VV_REG].vv_str[0] != c) {
- set_vim_var_string(VV_REG, &regname, 1);
+ set_vim_var_string(VV_REG, reg_to_mb(regname), -1);
}
}