From b1e04fca3704e272a30afbe062498819eaacd4f9 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 29 Mar 2017 13:08:35 +0200 Subject: [PATCH] patch 8.0.0516: a large count on a normal command causes trouble Problem: A large count on a normal command causes trouble. (Dominique Pelle) Solution: Make "opcount" long. --- src/globals.h | 4 ++-- src/testdir/test_normal.vim | 44 ++++++++++++++++++++++--------------- src/version.c | 2 ++ 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/globals.h b/src/globals.h index f8186630fa..59193e07a7 100644 --- a/src/globals.h +++ b/src/globals.h @@ -932,10 +932,10 @@ EXTERN int State INIT(= NORMAL); /* This is the current state of the * command interpreter. */ EXTERN int finish_op INIT(= FALSE);/* TRUE while an operator is pending */ -EXTERN int opcount INIT(= 0); /* count for pending operator */ +EXTERN long opcount INIT(= 0); /* count for pending operator */ /* - * ex mode (Q) state + * Ex mode (Q) state */ EXTERN int exmode_active INIT(= 0); /* zero, EXMODE_NORMAL or EXMODE_VIM */ EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */ diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index e0df0ae1eb..cbae8479ec 100644 --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -2259,26 +2259,34 @@ func! Test_normal53_digraph() bw! endfunc -func! Test_normal54_Ctrl_bsl() - new - call setline(1, 'abcdefghijklmn') - exe "norm! df\\" - call assert_equal(['abcdefghijklmn'], getline(1,'$')) - exe "norm! df\\" - call assert_equal(['abcdefghijklmn'], getline(1,'$')) - exe "norm! df\m" - call assert_equal(['abcdefghijklmn'], getline(1,'$')) +func Test_normal54_Ctrl_bsl() + new + call setline(1, 'abcdefghijklmn') + exe "norm! df\\" + call assert_equal(['abcdefghijklmn'], getline(1,'$')) + exe "norm! df\\" + call assert_equal(['abcdefghijklmn'], getline(1,'$')) + exe "norm! df\m" + call assert_equal(['abcdefghijklmn'], getline(1,'$')) if !has("multi_byte") return endif - call setline(2, 'abcdefghijklmnāf') - norm! 2gg0 - exe "norm! df\" - call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) - norm! 1gg0 - exe "norm! df\" - call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) + call setline(2, 'abcdefghijklmnāf') + norm! 2gg0 + exe "norm! df\" + call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) + norm! 1gg0 + exe "norm! df\" + call assert_equal(['abcdefghijklmn', 'f'], getline(1,'$')) - " clean up - bw! + " clean up + bw! +endfunc + +func Test_normal_large_count() + " This may fail with 32bit long, how do we detect that? + new + normal o + normal 6666666666dL + bwipe! endfunc diff --git a/src/version.c b/src/version.c index c114d8f55b..74dc550097 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 516, /**/ 515, /**/