0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

patch 7.4.1976

Problem:    Number variables are not 64 bits while they could be.
Solution:   Add the num64 feature. (Ken Takata)
This commit is contained in:
Bram Moolenaar
2016-07-01 18:17:26 +02:00
parent 8767f52fbf
commit 22fcfad292
23 changed files with 384 additions and 227 deletions

View File

@@ -1836,14 +1836,14 @@ vim_str2nr(
is bin */
int *len, /* return: detected length of number */
int what, /* what numbers to recognize */
long *nptr, /* return: signed result */
unsigned long *unptr, /* return: unsigned result */
varnumber_T *nptr, /* return: signed result */
uvarnumber_T *unptr, /* return: unsigned result */
int maxlen) /* max length of string to check */
{
char_u *ptr = start;
int pre = 0; /* default is decimal */
int negative = FALSE;
unsigned long un = 0;
uvarnumber_T un = 0;
int n;
if (ptr[0] == '-')
@@ -1912,7 +1912,7 @@ vim_str2nr(
/* octal */
while ('0' <= *ptr && *ptr <= '7')
{
un = 8 * un + (unsigned long)(*ptr - '0');
un = 8 * un + (uvarnumber_T)(*ptr - '0');
++ptr;
if (n++ == maxlen)
break;
@@ -1925,7 +1925,7 @@ vim_str2nr(
n += 2; /* skip over "0x" */
while (vim_isxdigit(*ptr))
{
un = 16 * un + (unsigned long)hex2nr(*ptr);
un = 16 * un + (uvarnumber_T)hex2nr(*ptr);
++ptr;
if (n++ == maxlen)
break;
@@ -1936,7 +1936,7 @@ vim_str2nr(
/* decimal */
while (VIM_ISDIGIT(*ptr))
{
un = 10 * un + (unsigned long)(*ptr - '0');
un = 10 * un + (uvarnumber_T)(*ptr - '0');
++ptr;
if (n++ == maxlen)
break;
@@ -1950,9 +1950,9 @@ vim_str2nr(
if (nptr != NULL)
{
if (negative) /* account for leading '-' for decimal numbers */
*nptr = -(long)un;
*nptr = -(varnumber_T)un;
else
*nptr = (long)un;
*nptr = (varnumber_T)un;
}
if (unptr != NULL)
*unptr = un;