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:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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()
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user