changeset 23693:cd06cc37f53f v8.2.2388

patch 8.2.2388: no easy way to get the maximum or mininum number value Commit: https://github.com/vim/vim/commit/57d5a01cb45d6edb16c3835a49b42d6d8fc0163e Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jan 21 21:42:31 2021 +0100 patch 8.2.2388: no easy way to get the maximum or mininum number value Problem: No easy way to get the maximum or mininum number value. Solution: Add v:numbermax and v:numbermin.
author Bram Moolenaar <Bram@vim.org>
date Thu, 21 Jan 2021 21:45:04 +0100
parents 3a9a361e6219
children 7d29116429d0
files runtime/doc/eval.txt src/evalvars.c src/testdir/test_eval_stuff.vim src/version.c src/vim.h
diffstat 5 files changed, 47 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.2.  Last change: 2021 Jan 17
+*eval.txt*	For Vim version 8.2.  Last change: 2021 Jan 21
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2082,6 +2082,12 @@ v:null		An empty String. Used to put "nu
 		That is so that eval() can parse the string back to the same
 		value.  Read-only.
 
+					*v:numbermax* *numbermax-variable*
+v:numbermax	Maximum value of a number.
+
+					*v:numbermix* *numbermix-variable*
+v:numbermin	Minimum value of a number (negative)
+
 					*v:numbersize* *numbersize-variable*
 v:numbersize	Number of bits in a Number.  This is normally 64, but on some
 		systems it may be 32.
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -122,6 +122,8 @@ static struct vimvar
     {VV_NAME("true",		 VAR_BOOL), VV_RO},
     {VV_NAME("none",		 VAR_SPECIAL), VV_RO},
     {VV_NAME("null",		 VAR_SPECIAL), VV_RO},
+    {VV_NAME("numbermax",	 VAR_NUMBER), VV_RO},
+    {VV_NAME("numbermin",	 VAR_NUMBER), VV_RO},
     {VV_NAME("numbersize",	 VAR_NUMBER), VV_RO},
     {VV_NAME("vim_did_enter",	 VAR_NUMBER), VV_RO},
     {VV_NAME("testing",		 VAR_NUMBER), 0},
@@ -228,6 +230,8 @@ evalvars_init(void)
     set_vim_var_nr(VV_TRUE, VVAL_TRUE);
     set_vim_var_nr(VV_NONE, VVAL_NONE);
     set_vim_var_nr(VV_NULL, VVAL_NULL);
+    set_vim_var_nr(VV_NUMBERMAX, VARNUM_MAX);
+    set_vim_var_nr(VV_NUMBERMIN, VARNUM_MIN);
     set_vim_var_nr(VV_NUMBERSIZE, sizeof(varnumber_T) * 8);
 
     set_vim_var_nr(VV_TYPE_NUMBER,  VAR_TYPE_NUMBER);
--- a/src/testdir/test_eval_stuff.vim
+++ b/src/testdir/test_eval_stuff.vim
@@ -256,10 +256,13 @@ func Test_execute_cmd_with_null()
   endif
 endfunc
 
-func Test_numbersize()
-  " This will fail on systems without 64 bit int support or when not configured
-  " correctly.
+func Test_number_max_min_size()
+  " This will fail on systems without 64 bit number support or when not
+  " configured correctly.
   call assert_equal(64, v:numbersize)
+
+  call assert_true(v:numbermin < -9999999)
+  call assert_true(v:numbermax > 9999999)
 endfunc
 
 func Assert_reg(name, type, value, valuestr, expr, exprstr)
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2388,
+/**/
     2387,
 /**/
     2386,
--- a/src/vim.h
+++ b/src/vim.h
@@ -1975,32 +1975,34 @@ typedef int sock_T;
 #define VV_TRUE		69
 #define VV_NONE		70
 #define VV_NULL		71
-#define VV_NUMBERSIZE	72
-#define VV_VIM_DID_ENTER 73
-#define VV_TESTING	74
-#define VV_TYPE_NUMBER	75
-#define VV_TYPE_STRING	76
-#define VV_TYPE_FUNC	77
-#define VV_TYPE_LIST	78
-#define VV_TYPE_DICT	79
-#define VV_TYPE_FLOAT	80
-#define VV_TYPE_BOOL	81
-#define VV_TYPE_NONE	82
-#define VV_TYPE_JOB	83
-#define VV_TYPE_CHANNEL	84
-#define VV_TYPE_BLOB	85
-#define VV_TERMRFGRESP	86
-#define VV_TERMRBGRESP	87
-#define VV_TERMU7RESP	88
-#define VV_TERMSTYLERESP 89
-#define VV_TERMBLINKRESP 90
-#define VV_EVENT	91
-#define VV_VERSIONLONG	92
-#define VV_ECHOSPACE	93
-#define VV_ARGV		94
-#define VV_COLLATE      95
-#define VV_EXITING	96
-#define VV_LEN		97	// number of v: vars
+#define VV_NUMBERMAX	72
+#define VV_NUMBERMIN	73
+#define VV_NUMBERSIZE	74
+#define VV_VIM_DID_ENTER 75
+#define VV_TESTING	76
+#define VV_TYPE_NUMBER	77
+#define VV_TYPE_STRING	78
+#define VV_TYPE_FUNC	79
+#define VV_TYPE_LIST	80
+#define VV_TYPE_DICT	81
+#define VV_TYPE_FLOAT	82
+#define VV_TYPE_BOOL	83
+#define VV_TYPE_NONE	84
+#define VV_TYPE_JOB	85
+#define VV_TYPE_CHANNEL	86
+#define VV_TYPE_BLOB	87
+#define VV_TERMRFGRESP	88
+#define VV_TERMRBGRESP	89
+#define VV_TERMU7RESP	90
+#define VV_TERMSTYLERESP 91
+#define VV_TERMBLINKRESP 92
+#define VV_EVENT	93
+#define VV_VERSIONLONG	94
+#define VV_ECHOSPACE	95
+#define VV_ARGV		96
+#define VV_COLLATE      97
+#define VV_EXITING	98
+#define VV_LEN		99	// number of v: vars
 
 // used for v_number in VAR_BOOL and VAR_SPECIAL
 #define VVAL_FALSE	0L	// VAR_BOOL