diff options
Diffstat (limited to 'src/nvim/eval.c')
| -rw-r--r-- | src/nvim/eval.c | 26 | 
1 files changed, 18 insertions, 8 deletions
| diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 52c22b19b9..b591c91147 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -1147,7 +1147,7 @@ int call_vim_function(        len = 0;      } else {        // Recognize a number argument, the others must be strings. -      vim_str2nr(argv[i], NULL, &len, true, true, true, &n, NULL, 0); +      vim_str2nr(argv[i], NULL, &len, STR2NR_ALL, &n, NULL, 0);      }      if (len != 0 && len == (int)STRLEN(argv[i])) {        argvars[i].v_type = VAR_NUMBER; @@ -4138,7 +4138,7 @@ static int eval7(          rettv->vval.v_float = f;        }      } else { -      vim_str2nr(*arg, NULL, &len, true, true, true, &n, NULL, 0); +      vim_str2nr(*arg, NULL, &len, STR2NR_ALL, &n, NULL, 0);        *arg += len;        if (evaluate) {          rettv->v_type = VAR_NUMBER; @@ -16037,6 +16037,7 @@ static void f_str2nr(typval_T *argvars, typval_T *rettv)    int base = 10;    char_u      *p;    long n; +  int what;    if (argvars[1].v_type != VAR_UNKNOWN) {      base = get_tv_number(&argvars[1]); @@ -16050,11 +16051,20 @@ static void f_str2nr(typval_T *argvars, typval_T *rettv)    if (*p == '+') {      p = skipwhite(p + 1);    } -  vim_str2nr(p, NULL, NULL, -             base == 2 ? 2 : 0, -             base == 8 ? 2 : 0, -             base == 16 ? 2 : 0, -             &n, NULL, 0); +  switch (base) { +    case 2: +      what = STR2NR_BIN + STR2NR_FORCE; +      break; +    case 8: +      what = STR2NR_OCT + STR2NR_FORCE; +      break; +    case 16: +      what = STR2NR_HEX + STR2NR_FORCE; +      break; +    default: +      what = 0; +  } +  vim_str2nr(p, NULL, NULL, what, &n, NULL, 0);    rettv->vval.v_number = n;  } @@ -18336,7 +18346,7 @@ long get_tv_number_chk(typval_T *varp, int *denote)    case VAR_STRING:      if (varp->vval.v_string != NULL) {        vim_str2nr(varp->vval.v_string, NULL, NULL, -                 true, true, true, &n, NULL, 0); +                 STR2NR_ALL, &n, NULL, 0);      }      return n;    case VAR_LIST: | 
