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)
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 3e1a462..f1a06ca 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3545,9 +3545,7 @@
 	"mzscheme",
 #endif
 #endif
-#ifdef FEAT_NUM64
 	"num64",
-#endif
 #ifdef FEAT_OLE
 	"ole",
 #endif
diff --git a/src/feature.h b/src/feature.h
index 7e1e982..b25837e 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 935fd8c..9ab0eae 100644
--- a/src/message.c
+++ b/src/message.c
@@ -4246,10 +4246,8 @@
 #  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 @@
 		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 @@
 		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 @@
 		    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 @@
 			    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 @@
 				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 @@
 			    ;
 			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 @@
 			    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 @@
 			    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 7aff8af..823dfda 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1245,42 +1245,33 @@
 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;
diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim
index 1281ae7..7601c4f 100644
--- a/src/testdir/test_expr.vim
+++ b/src/testdir/test_expr.vim
@@ -382,9 +382,7 @@
 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 @@
   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 1b3e02a..68d6ec9 100644
--- a/src/testdir/test_largefile.vim
+++ b/src/testdir/test_largefile.vim
@@ -24,11 +24,6 @@
   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 ce5592e..8299db4 100644
--- a/src/testdir/test_sort.vim
+++ b/src/testdir/test_sort.vim
@@ -1295,9 +1295,8 @@
   \                  '2147483647'], getline(1, '$'))
   bwipe!
 
-  if has('num64')
-    new
-    a
+  new
+  a
 -9223372036854775808
 -9223372036854775807
 
@@ -1312,22 +1311,21 @@
 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 a75e5f6..b16b05b 100644
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -1416,10 +1416,6 @@
 "-------------------------------------------------------------------------------
 
 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 @@
     " 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 e27ac71..ad70c4d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -436,11 +436,7 @@
 #else
 	"-netbeans_intg",
 #endif
-#ifdef FEAT_NUM64
 	"+num64",
-#else
-	"-num64",
-#endif
 #ifdef FEAT_GUI_MSWIN
 # ifdef FEAT_OLE
 	"+ole",
@@ -743,6 +739,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    271,
+/**/
     270,
 /**/
     269,