changeset 19427:fdfe44ac6a1a v8.2.0271

patch 8.2.0271: the "num64" feature is available everywhere Commit: https://github.com/vim/vim/commit/82f654e092ac5b86316bc1b30c0b07a849813186 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Feb 17 22:12:50 2020 +0100 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)
author Bram Moolenaar <Bram@vim.org>
date Mon, 17 Feb 2020 22:15:07 +0100
parents 23bd41ec57fb
children 1f9e7e703f24
files src/evalfunc.c src/feature.h src/message.c src/structs.h src/testdir/test_expr.vim src/testdir/test_largefile.vim src/testdir/test_sort.vim src/testdir/test_vimscript.vim src/version.c
diffstat 9 files changed, 53 insertions(+), 119 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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
--- 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)
+# else
 #  define TMP_LEN 66
-# else
-#  define TMP_LEN 34
 # 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,16 +4675,12 @@ 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';
+# else
 			    f[f_l++] = 'l';
-#  endif
-# else
 			    f[f_l++] = 'l';
 # endif
 			}
@@ -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
 			    }
 			}
 
--- 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
-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;
--- 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()
--- 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
--- 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 @@ 9223372036854775807
 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
 
 
--- 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
--- 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,