summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-17 22:12:50 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-17 22:12:50 +0100
commit82f654e092ac5b86316bc1b30c0b07a849813186 (patch)
tree8a6ba00df3ea0f536d4fe559f0f6093146466062
parentbc2b71d44a0b90b6aeb3534a76912fccbe5577df (diff)
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.c2
-rw-r--r--src/feature.h4
-rw-r--r--src/message.c36
-rw-r--r--src/structs.h45
-rw-r--r--src/testdir/test_expr.vim12
-rw-r--r--src/testdir/test_largefile.vim7
-rw-r--r--src/testdir/test_sort.vim36
-rw-r--r--src/testdir/test_vimscript.vim22
-rw-r--r--src/version.c6
9 files changed, 52 insertions, 118 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 3e1a462d19..f1a06caaac 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 7e1e982ed6..b25837e1f6 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 935fd8c447..9ab0eaefeb 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 7aff8af201..823dfda3ca 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 1281ae72f8..7601c4fa71 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 1b3e02a0c8..68d6ec9eb0 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 ce5592e2e9..8299db4ef8 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 a75e5f6f2b..b16b05b02c 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 e27ac71521..ad70c4dd0b 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,