0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.2.0271: the "num64" feature is available everywhere

Problem:    The "num64" feature is available everywhere and building without
            it causes problems.
Solution:   Graduage the "num64" feature. (James McCoy, closes #5650)
This commit is contained in:
Bram Moolenaar
2020-02-17 22:12:50 +01:00
parent bc2b71d44a
commit 82f654e092
9 changed files with 53 additions and 119 deletions

View File

@@ -3545,9 +3545,7 @@ f_has(typval_T *argvars, typval_T *rettv)
"mzscheme",
#endif
#endif
#ifdef FEAT_NUM64
"num64",
#endif
#ifdef FEAT_OLE
"ole",
#endif

View File

@@ -285,16 +285,12 @@
* +eval Built-in script language and expression evaluation,
* ":let", ":if", etc.
* +float Floating point variables.
* +num64 64-bit Number.
*/
#ifdef FEAT_NORMAL
# define FEAT_EVAL
# if defined(HAVE_FLOAT_FUNCS) || defined(MSWIN) || defined(MACOS_X)
# define FEAT_FLOAT
# endif
# if defined(HAVE_STDINT_H) || defined(MSWIN) || (VIM_SIZEOF_LONG >= 8)
# define FEAT_NUM64
# endif
#endif
#ifdef FEAT_EVAL

View File

@@ -4246,10 +4246,8 @@ vim_vsnprintf_typval(
# define TMP_LEN 350 // On my system 1e308 is the biggest number possible.
// That sounds reasonable to use as the maximum
// printable.
# elif defined(FEAT_NUM64)
# define TMP_LEN 66
# else
# define TMP_LEN 34
# define TMP_LEN 66
# endif
char tmp[TMP_LEN];
@@ -4374,11 +4372,7 @@ vim_vsnprintf_typval(
if (length_modifier == 'l' && *p == 'l')
{
// double l = long long
# ifdef FEAT_NUM64
length_modifier = 'L';
# else
length_modifier = 'l'; // treat it as a single 'l'
# endif
p++;
}
}
@@ -4394,7 +4388,7 @@ vim_vsnprintf_typval(
default: break;
}
# if defined(FEAT_EVAL) && defined(FEAT_NUM64)
# if defined(FEAT_EVAL)
switch (fmt_spec)
{
case 'd': case 'u': case 'o': case 'x': case 'X':
@@ -4516,11 +4510,9 @@ vim_vsnprintf_typval(
long int long_arg = 0;
unsigned long int ulong_arg = 0;
# ifdef FEAT_NUM64
// only defined for length modifier ll
varnumber_T llong_arg = 0;
uvarnumber_T ullong_arg = 0;
# endif
// only defined for b conversion
uvarnumber_T bin_arg = 0;
@@ -4581,19 +4573,17 @@ vim_vsnprintf_typval(
else if (long_arg < 0)
arg_sign = -1;
break;
# ifdef FEAT_NUM64
case 'L':
llong_arg =
# if defined(FEAT_EVAL)
# if defined(FEAT_EVAL)
tvs != NULL ? tv_nr(tvs, &arg_idx) :
# endif
# endif
va_arg(ap, varnumber_T);
if (llong_arg > 0)
arg_sign = 1;
else if (llong_arg < 0)
arg_sign = -1;
break;
# endif
}
}
else
@@ -4622,18 +4612,16 @@ vim_vsnprintf_typval(
if (ulong_arg != 0)
arg_sign = 1;
break;
# ifdef FEAT_NUM64
case 'L':
ullong_arg =
# if defined(FEAT_EVAL)
# if defined(FEAT_EVAL)
tvs != NULL ? (uvarnumber_T)
tv_nr(tvs, &arg_idx) :
# endif
# endif
va_arg(ap, uvarnumber_T);
if (ullong_arg != 0)
arg_sign = 1;
break;
# endif
}
}
@@ -4687,17 +4675,13 @@ vim_vsnprintf_typval(
;
else if (length_modifier == 'L')
{
# ifdef FEAT_NUM64
# ifdef MSWIN
# ifdef MSWIN
f[f_l++] = 'I';
f[f_l++] = '6';
f[f_l++] = '4';
# else
f[f_l++] = 'l';
f[f_l++] = 'l';
# endif
# else
f[f_l++] = 'l';
f[f_l++] = 'l';
# endif
}
else
@@ -4735,11 +4719,9 @@ vim_vsnprintf_typval(
case 'l': str_arg_l += sprintf(
tmp + str_arg_l, f, long_arg);
break;
# ifdef FEAT_NUM64
case 'L': str_arg_l += sprintf(
tmp + str_arg_l, f, llong_arg);
break;
# endif
}
}
else
@@ -4754,11 +4736,9 @@ vim_vsnprintf_typval(
case 'l': str_arg_l += sprintf(
tmp + str_arg_l, f, ulong_arg);
break;
# ifdef FEAT_NUM64
case 'L': str_arg_l += sprintf(
tmp + str_arg_l, f, ullong_arg);
break;
# endif
}
}

View File

@@ -1245,42 +1245,33 @@ typedef struct hashtable_S
typedef long_u hash_T; // Type for hi_hash
#ifdef FEAT_NUM64
// Use 64-bit Number.
# ifdef MSWIN
# ifdef PROTO
typedef long varnumber_T;
typedef unsigned long uvarnumber_T;
# define VARNUM_MIN LONG_MIN
# define VARNUM_MAX LONG_MAX
# define UVARNUM_MAX ULONG_MAX
# else
typedef __int64 varnumber_T;
typedef unsigned __int64 uvarnumber_T;
# define VARNUM_MIN _I64_MIN
# define VARNUM_MAX _I64_MAX
# define UVARNUM_MAX _UI64_MAX
# endif
# elif defined(HAVE_STDINT_H)
typedef int64_t varnumber_T;
typedef uint64_t uvarnumber_T;
# define VARNUM_MIN INT64_MIN
# define VARNUM_MAX INT64_MAX
# define UVARNUM_MAX UINT64_MAX
# else
#ifdef MSWIN
# ifdef PROTO
typedef long varnumber_T;
typedef unsigned long uvarnumber_T;
# define VARNUM_MIN LONG_MIN
# define VARNUM_MAX LONG_MAX
# define UVARNUM_MAX ULONG_MAX
# else
typedef __int64 varnumber_T;
typedef unsigned __int64 uvarnumber_T;
# define VARNUM_MIN _I64_MIN
# define VARNUM_MAX _I64_MAX
# define UVARNUM_MAX _UI64_MAX
# endif
#elif defined(HAVE_STDINT_H)
typedef int64_t varnumber_T;
typedef uint64_t uvarnumber_T;
# define VARNUM_MIN INT64_MIN
# define VARNUM_MAX INT64_MAX
# define UVARNUM_MAX UINT64_MAX
#else
// Use 32-bit Number.
typedef int varnumber_T;
typedef unsigned int uvarnumber_T;
# define VARNUM_MIN INT_MIN
# define VARNUM_MAX INT_MAX
# define UVARNUM_MAX UINT_MAX
typedef long varnumber_T;
typedef unsigned long uvarnumber_T;
# define VARNUM_MIN LONG_MIN
# define VARNUM_MAX LONG_MAX
# define UVARNUM_MAX ULONG_MAX
#endif
typedef double float_T;

View File

@@ -382,9 +382,7 @@ function Test_max_min_errors()
endfunc
function Test_printf_64bit()
if has('num64')
call assert_equal("123456789012345", printf('%d', 123456789012345))
endif
call assert_equal("123456789012345", printf('%d', 123456789012345))
endfunc
function Test_printf_spec_s()
@@ -423,12 +421,8 @@ function Test_printf_spec_b()
call assert_equal(" 0b1111011", printf('%#10b', 123))
call assert_equal("0B01111011", printf('%#010B', 123))
call assert_equal("1001001100101100000001011010010", printf('%b', 1234567890))
if has('num64')
call assert_equal("11100000100100010000110000011011101111101111001", printf('%b', 123456789012345))
call assert_equal("1111111111111111111111111111111111111111111111111111111111111111", printf('%b', -1))
else
call assert_equal("11111111111111111111111111111111", printf('%b', -1))
endif
call assert_equal("11100000100100010000110000011011101111101111001", printf('%b', 123456789012345))
call assert_equal("1111111111111111111111111111111111111111111111111111111111111111", printf('%b', -1))
endfunc
func Test_substitute_expr()

View File

@@ -24,11 +24,6 @@ func Test_largefile()
w
" Check if the file size is 4,000,000,000 bytes.
let fsize=getfsize(fname)
if has('num64')
call assert_true(fsize == 4000000000)
else
" getfsize() returns -2 if a Number is 32 bits.
call assert_true(fsize == -2)
endif
call assert_true(fsize == 4000000000)
call delete(fname)
endfunc

View File

@@ -1295,9 +1295,8 @@ abc
\ '2147483647'], getline(1, '$'))
bwipe!
if has('num64')
new
a
new
a
-9223372036854775808
-9223372036854775807
@@ -1312,22 +1311,21 @@ abc
abc
.
sort n
call assert_equal(['',
\ 'abc',
\ '',
\ '-9223372036854775808',
\ '-9223372036854775808',
\ '-9223372036854775807',
\ '-9223372036854775806',
\ '-1',
\ '0',
\ '1',
\ '9223372036854775806',
\ '9223372036854775807',
\ '9223372036854775807'], getline(1, '$'))
bwipe!
endif
sort n
call assert_equal(['',
\ 'abc',
\ '',
\ '-9223372036854775808',
\ '-9223372036854775808',
\ '-9223372036854775807',
\ '-9223372036854775806',
\ '-1',
\ '0',
\ '1',
\ '9223372036854775806',
\ '9223372036854775807',
\ '9223372036854775807'], getline(1, '$'))
bwipe!
endfunc

View File

@@ -1416,10 +1416,6 @@ endfunc
"-------------------------------------------------------------------------------
func Test_num64()
if !has('num64')
return
endif
call assert_notequal( 4294967296, 0)
call assert_notequal(-4294967296, 0)
call assert_equal( 4294967296, 0xFFFFffff + 1)
@@ -1692,27 +1688,15 @@ func Test_compound_assignment_operators()
" Test special cases: division or modulus with 0.
let x = 1
let x /= 0
if has('num64')
call assert_equal(0x7FFFFFFFFFFFFFFF, x)
else
call assert_equal(0x7fffffff, x)
endif
call assert_equal(0x7FFFFFFFFFFFFFFF, x)
let x = -1
let x /= 0
if has('num64')
call assert_equal(-0x7FFFFFFFFFFFFFFF, x)
else
call assert_equal(-0x7fffffff, x)
endif
call assert_equal(-0x7FFFFFFFFFFFFFFF, x)
let x = 0
let x /= 0
if has('num64')
call assert_equal(-0x7FFFFFFFFFFFFFFF - 1, x)
else
call assert_equal(-0x7FFFFFFF - 1, x)
endif
call assert_equal(-0x7FFFFFFFFFFFFFFF - 1, x)
let x = 1
let x %= 0

View File

@@ -436,11 +436,7 @@ static char *(features[]) =
#else
"-netbeans_intg",
#endif
#ifdef FEAT_NUM64
"+num64",
#else
"-num64",
#endif
#ifdef FEAT_GUI_MSWIN
# ifdef FEAT_OLE
"+ole",
@@ -742,6 +738,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
271,
/**/
270,
/**/