summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0959
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0959')
-rw-r--r--data/vim/patches/8.1.0959199
1 files changed, 199 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0959 b/data/vim/patches/8.1.0959
new file mode 100644
index 000000000..c7299e0f7
--- /dev/null
+++ b/data/vim/patches/8.1.0959
@@ -0,0 +1,199 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0959
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0959
+Problem: Sorting large numbers is not tested and does not work properly.
+Solution: Add test. Fix comparing lines with and without a number.
+ (Dominique Pelle, closes #4017)
+Files: src/ex_cmds.c, src/testdir/test_sort.vim
+
+*** ../vim-8.1.0958/src/ex_cmds.c 2019-02-17 17:44:36.203875545 +0100
+--- src/ex_cmds.c 2019-02-20 22:15:27.631399246 +0100
+***************
+*** 303,309 ****
+ varnumber_T start_col_nr; /* starting column number */
+ varnumber_T end_col_nr; /* ending column number */
+ } line;
+! varnumber_T value; /* value if sorting by integer */
+ #ifdef FEAT_FLOAT
+ float_T value_flt; /* value if sorting by float */
+ #endif
+--- 303,313 ----
+ varnumber_T start_col_nr; /* starting column number */
+ varnumber_T end_col_nr; /* ending column number */
+ } line;
+! struct
+! {
+! varnumber_T value; /* value if sorting by integer */
+! int is_number; /* TRUE when line contains a number */
+! } num;
+ #ifdef FEAT_FLOAT
+ float_T value_flt; /* value if sorting by float */
+ #endif
+***************
+*** 335,345 ****
+ if (got_int)
+ sort_abort = TRUE;
+
+- /* When sorting numbers "start_col_nr" is the number, not the column
+- * number. */
+ if (sort_nr)
+! result = l1.st_u.value == l2.st_u.value ? 0
+! : l1.st_u.value > l2.st_u.value ? 1 : -1;
+ #ifdef FEAT_FLOAT
+ else if (sort_flt)
+ result = l1.st_u.value_flt == l2.st_u.value_flt ? 0
+--- 339,352 ----
+ if (got_int)
+ sort_abort = TRUE;
+
+ if (sort_nr)
+! {
+! if (l1.st_u.num.is_number != l2.st_u.num.is_number)
+! result = l1.st_u.num.is_number - l2.st_u.num.is_number;
+! else
+! result = l1.st_u.num.value == l2.st_u.num.value ? 0
+! : l1.st_u.num.value > l2.st_u.num.value ? 1 : -1;
+! }
+ #ifdef FEAT_FLOAT
+ else if (sort_flt)
+ result = l1.st_u.value_flt == l2.st_u.value_flt ? 0
+***************
+*** 553,563 ****
+ if (s > p && s[-1] == '-')
+ --s; /* include preceding negative sign */
+ if (*s == NUL)
+! /* empty line should sort before any number */
+! nrs[lnum - eap->line1].st_u.value = -MAXLNUM;
+ else
+ vim_str2nr(s, NULL, NULL, sort_what,
+! &nrs[lnum - eap->line1].st_u.value, NULL, 0);
+ }
+ #ifdef FEAT_FLOAT
+ else
+--- 560,576 ----
+ if (s > p && s[-1] == '-')
+ --s; /* include preceding negative sign */
+ if (*s == NUL)
+! {
+! /* line without number should sort before any number */
+! nrs[lnum - eap->line1].st_u.num.is_number = FALSE;
+! nrs[lnum - eap->line1].st_u.num.value = 0;
+! }
+ else
++ {
++ nrs[lnum - eap->line1].st_u.num.is_number = TRUE;
+ vim_str2nr(s, NULL, NULL, sort_what,
+! &nrs[lnum - eap->line1].st_u.num.value, NULL, 0);
+! }
+ }
+ #ifdef FEAT_FLOAT
+ else
+*** ../vim-8.1.0958/src/testdir/test_sort.vim 2018-09-21 12:46:16.341772938 +0200
+--- src/testdir/test_sort.vim 2019-02-20 22:15:27.631399246 +0100
+***************
+*** 1222,1227 ****
+--- 1222,1298 ----
+ enew!
+ endfunc
+
++ func Test_sort_large_num()
++ new
++ a
++ -2147483648
++ -2147483647
++
++ -1
++ 0
++ 1
++ -2147483646
++ 2147483646
++ 2147483647
++ 2147483647
++ -2147483648
++ abc
++
++ .
++ " Numerical sort. Non-numeric lines are ordered before numerical lines.
++ " Ordering of non-numerical is stable.
++ sort n
++ call assert_equal(['',
++ \ 'abc',
++ \ '',
++ \ '-2147483648',
++ \ '-2147483648',
++ \ '-2147483647',
++ \ '-2147483646',
++ \ '-1',
++ \ '0',
++ \ '1',
++ \ '2147483646',
++ \ '2147483647',
++ \ '2147483647'], getline(1, '$'))
++ bwipe!
++
++ if has('num64')
++ new
++ a
++ -9223372036854775808
++ -9223372036854775807
++
++ -1
++ 0
++ 1
++ -9223372036854775806
++ 9223372036854775806
++ 9223372036854775807
++ 9223372036854775807
++ -9223372036854775808
++ abc
++
++ .
++ sort n
++ call assert_equal(['',
++ \ 'abc',
++ \ '',
++ \ '-9223372036854775808',
++ \ '-9223372036854775808',
++ \ '-9223372036854775807',
++ \ '-9223372036854775806',
++ \ '-1',
++ \ '0',
++ \ '1',
++ \ '9223372036854775806',
++ \ '9223372036854775807',
++ \ '9223372036854775807'], getline(1, '$'))
++ bwipe!
++ endif
++ endfunc
++
++
+ func Test_sort_cmd_report()
+ enew!
+ call append(0, repeat([1], 3) + repeat([2], 3) + repeat([3], 3))
+*** ../vim-8.1.0958/src/version.c 2019-02-20 22:04:28.823721308 +0100
+--- src/version.c 2019-02-20 22:17:16.762701596 +0100
+***************
+*** 781,782 ****
+--- 781,784 ----
+ { /* Add new patch number below this line */
++ /**/
++ 959,
+ /**/
+
+
+--
+A consultant is a person who takes your money and annoys your employees while
+tirelessly searching for the best way to extend the consulting contract.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///