diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-02-17 22:12:50 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-02-17 22:12:50 +0100 |
commit | 82f654e092ac5b86316bc1b30c0b07a849813186 (patch) | |
tree | 8a6ba00df3ea0f536d4fe559f0f6093146466062 | |
parent | bc2b71d44a0b90b6aeb3534a76912fccbe5577df (diff) | |
download | vim-git-82f654e092ac5b86316bc1b30c0b07a849813186.tar.gz |
patch 8.2.0271: the "num64" feature is available everywherev8.2.0271
Problem: The "num64" feature is available everywhere and building without
it causes problems.
Solution: Graduage the "num64" feature. (James McCoy, closes #5650)
-rw-r--r-- | src/evalfunc.c | 2 | ||||
-rw-r--r-- | src/feature.h | 4 | ||||
-rw-r--r-- | src/message.c | 36 | ||||
-rw-r--r-- | src/structs.h | 45 | ||||
-rw-r--r-- | src/testdir/test_expr.vim | 12 | ||||
-rw-r--r-- | src/testdir/test_largefile.vim | 7 | ||||
-rw-r--r-- | src/testdir/test_sort.vim | 36 | ||||
-rw-r--r-- | src/testdir/test_vimscript.vim | 22 | ||||
-rw-r--r-- | src/version.c | 6 |
9 files changed, 52 insertions, 118 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 3e1a462d1..f1a06caaa 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -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 diff --git a/src/feature.h b/src/feature.h index 7e1e982ed..b25837e1f 100644 --- a/src/feature.h +++ b/src/feature.h @@ -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 diff --git a/src/message.c b/src/message.c index 935fd8c44..9ab0eaefe 100644 --- a/src/message.c +++ b/src/message.c @@ -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 } } diff --git a/src/structs.h b/src/structs.h index 7aff8af20..823dfda3c 100644 --- a/src/structs.h +++ b/src/structs.h @@ -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 +#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 +# 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) +# 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 +# define VARNUM_MIN INT64_MIN +# define VARNUM_MAX INT64_MAX +# define UVARNUM_MAX UINT64_MAX +#else 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 -#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 +# define VARNUM_MIN LONG_MIN +# define VARNUM_MAX LONG_MAX +# define UVARNUM_MAX ULONG_MAX #endif typedef double float_T; diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim index 1281ae72f..7601c4fa7 100644 --- a/src/testdir/test_expr.vim +++ b/src/testdir/test_expr.vim @@ -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() diff --git a/src/testdir/test_largefile.vim b/src/testdir/test_largefile.vim index 1b3e02a0c..68d6ec9eb 100644 --- a/src/testdir/test_largefile.vim +++ b/src/testdir/test_largefile.vim @@ -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 diff --git a/src/testdir/test_sort.vim b/src/testdir/test_sort.vim index ce5592e2e..8299db4ef 100644 --- a/src/testdir/test_sort.vim +++ b/src/testdir/test_sort.vim @@ -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 diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim index a75e5f6f2..b16b05b02 100644 --- a/src/testdir/test_vimscript.vim +++ b/src/testdir/test_vimscript.vim @@ -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 diff --git a/src/version.c b/src/version.c index e27ac7152..ad70c4dd0 100644 --- a/src/version.c +++ b/src/version.c @@ -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", @@ -743,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 271, +/**/ 270, /**/ 269, |