From d315cf551f1d15609c4d7cf724e471de55f5cdac Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 23 May 2018 20:30:56 +0200 Subject: [PATCH 1/2] patch 8.1.0021: clang warns for undefined behavior Problem: Clang warns for undefined behavior. Solution: Move #ifdef outside of sprintf() call.(suggestion by Michael Jarvis, closes #2956) --- src/term.c | 13 +++++++------ src/version.c | 2 ++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/term.c b/src/term.c index 8b69cc41a5..4bb8030cbe 100644 --- a/src/term.c +++ b/src/term.c @@ -2872,14 +2872,15 @@ term_color(char_u *s, int n) #else char *format = "%s%s%%dm"; #endif - sprintf(buf, format, - i == 2 ? + char *lead = i == 2 ? ( #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS) - s[1] == '|' ? IF_EB("\033|", ESC_STR "|") : + s[1] == '|' ? IF_EB("\033|", ESC_STR "|") : #endif - IF_EB("\033[", ESC_STR "[") : "\233", - s[i] == '3' ? (n >= 16 ? "38;5;" : "9") - : (n >= 16 ? "48;5;" : "10")); + IF_EB("\033[", ESC_STR "[")) : "\233"; + char *tail = s[i] == '3' ? (n >= 16 ? "38;5;" : "9") + : (n >= 16 ? "48;5;" : "10"); + + sprintf(buf, format, lead, tail); OUT_STR(tgoto(buf, 0, n >= 16 ? n : n - 8)); } else diff --git a/src/version.c b/src/version.c index 616a169e59..3208eca446 100644 --- a/src/version.c +++ b/src/version.c @@ -761,6 +761,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 21, /**/ 20, /**/ From 833093bfb0e4a7f89b5adc66babcfa8ac09cfda9 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 23 May 2018 21:53:52 +0200 Subject: [PATCH 2/2] patch 8.1.0022: repeating put from expression register fails Problem: Repeating put from expression register fails. Solution: Re-evaluate the expression register. (Andy Massimino, closes #2945) --- src/getchar.c | 8 ++++++++ src/testdir/test_put.vim | 13 +++++++++++++ src/version.c | 2 ++ 3 files changed, 23 insertions(+) diff --git a/src/getchar.c b/src/getchar.c index ddb23dd5c1..ff03905b44 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -844,6 +844,14 @@ start_redo(long count, int old_redo) if (c >= '1' && c < '9') ++c; add_char_buff(&readbuf2, c); + + /* the expression register should be re-evaluated */ + if (c == '=') + { + add_char_buff(&readbuf2, CAR); + cmd_silent = TRUE; + } + c = read_redo(FALSE, old_redo); } diff --git a/src/testdir/test_put.vim b/src/testdir/test_put.vim index 18c7f4e64d..0a23a43919 100644 --- a/src/testdir/test_put.vim +++ b/src/testdir/test_put.vim @@ -45,3 +45,16 @@ func Test_put_lines() bw! call setreg('a', a[0], a[1]) endfunc + +func Test_put_expr() + new + call setline(1, repeat(['A'], 6)) + exec "1norm! \"=line('.')\p" + norm! j0. + norm! j0. + exec "4norm! \"=\P" + norm! j0. + norm! j0. + call assert_equal(['A1','A2','A3','4A','5A','6A'], getline(1,'$')) + bw! +endfunc diff --git a/src/version.c b/src/version.c index 3208eca446..0cfe61a04a 100644 --- a/src/version.c +++ b/src/version.c @@ -761,6 +761,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 22, /**/ 21, /**/