]> granicus.if.org Git - vim/commitdiff
patch 8.2.0271: the "num64" feature is available everywhere v8.2.0271
authorBram Moolenaar <Bram@vim.org>
Mon, 17 Feb 2020 21:12:50 +0000 (22:12 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 17 Feb 2020 21:12:50 +0000 (22:12 +0100)
Problem:    The "num64" feature is available everywhere and building without
            it causes problems.
Solution:   Graduage the "num64" feature. (James McCoy, closes #5650)

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

index 3e1a462d19a6db315932f448f12434e799d162dd..f1a06caaacd8f763a3423e84cd31411bef4a73fb 100644 (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
index 7e1e982ed6217b3476a01d2ca3b48397710afdd4..b25837e1f6b3a6c296331342da84c403212115c6 100644 (file)
  * +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
index 935fd8c447e97c6f471da68d9aadd90a3183154c..9ab0eaefeb7f3859d695abbbad3fd4e547b33ee4 100644 (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
                            }
                        }
 
index 7aff8af201fea33db789a06cfab6ab3486a8a1c1..823dfda3cafdfcd5086829255e612cf02262a151 100644 (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
+#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;
index 1281ae72f8ffc5ec06a2e286ef65fb2b093cf495..7601c4fa717099ed9e6448ef5df3a18edc67469d 100644 (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()
index 1b3e02a0c85cb534c5539fd1ec7c35ed6b089231..68d6ec9eb03131e7258dd20557fc1f57a5c67d2c 100644 (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
index ce5592e2e908eaab339e7cb7d04201e8e26da873..8299db4ef884996bc7a43b5fa1940b36c4f197fa 100644 (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
 
 
index a75e5f6f2b54c936d6292e8bef1ea6550ce26062..b16b05b02c9f10afe29bf94a0c546e48404143ed 100644 (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
index e27ac715218fe362c6bc5224540912efb53a24c2..ad70c4dd0bd0c3707748af9e2b27f006a649b092 100644 (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,
 /**/