# HG changeset patch # User Bram Moolenaar # Date 1568552403 -7200 # Node ID 1c7a91cf235648ac28905cc67389d09cb3b3c6d0 # Parent 25bf4300631b7edea77c498a218489f87dffb860 patch 8.1.2036: the str2nr() tests fail Commit: https://github.com/vim/vim/commit/1ac90b4fa63414d56750559506a3e076df6923b0 Author: Bram Moolenaar Date: Sun Sep 15 14:49:52 2019 +0200 patch 8.1.2036: the str2nr() tests fail Problem: The str2nr() tests fail. Solution: Add missing part of patch. diff --git a/src/charset.c b/src/charset.c --- a/src/charset.c +++ b/src/charset.c @@ -1773,6 +1773,7 @@ vim_isblankline(char_u *lbuf) * If "what" contains STR2NR_OCT recognize octal numbers * If "what" contains STR2NR_HEX recognize hex numbers * If "what" contains STR2NR_FORCE always assume bin/oct/hex. + * If "what" contains STR2NR_QUOTE ignore embedded single quotes * If maxlen > 0, check at a maximum maxlen chars. * If strict is TRUE, check the number strictly. return *len = 0 if fail. */ @@ -1841,7 +1842,8 @@ vim_str2nr( // Do the conversion manually to avoid sscanf() quirks. n = 1; - if (pre == 'B' || pre == 'b' || what == STR2NR_BIN + STR2NR_FORCE) + if (pre == 'B' || pre == 'b' + || ((what & STR2NR_BIN) && (what & STR2NR_FORCE))) { /* bin */ if (pre != 0) @@ -1856,9 +1858,16 @@ vim_str2nr( ++ptr; if (n++ == maxlen) break; + if ((what & STR2NR_QUOTE) && *ptr == '\'' + && '0' <= ptr[1] && ptr[1] <= '1') + { + ++ptr; + if (n++ == maxlen) + break; + } } } - else if (pre == '0' || what == STR2NR_OCT + STR2NR_FORCE) + else if (pre == '0' || ((what & STR2NR_OCT) && (what & STR2NR_FORCE))) { /* octal */ while ('0' <= *ptr && *ptr <= '7') @@ -1871,9 +1880,16 @@ vim_str2nr( ++ptr; if (n++ == maxlen) break; + if ((what & STR2NR_QUOTE) && *ptr == '\'' + && '0' <= ptr[1] && ptr[1] <= '7') + { + ++ptr; + if (n++ == maxlen) + break; + } } } - else if (pre != 0 || what == STR2NR_HEX + STR2NR_FORCE) + else if (pre != 0 || ((what & STR2NR_HEX) && (what & STR2NR_FORCE))) { /* hex */ if (pre != 0) @@ -1888,6 +1904,12 @@ vim_str2nr( ++ptr; if (n++ == maxlen) break; + if ((what & STR2NR_QUOTE) && *ptr == '\'' && vim_isxdigit(ptr[1])) + { + ++ptr; + if (n++ == maxlen) + break; + } } } else @@ -1906,8 +1928,15 @@ vim_str2nr( ++ptr; if (n++ == maxlen) break; + if ((what & STR2NR_QUOTE) && *ptr == '\'' && VIM_ISDIGIT(ptr[1])) + { + ++ptr; + if (n++ == maxlen) + break; + } } } + // Check for an alpha-numeric character immediately following, that is // most likely a typo. if (strict && n - 1 != maxlen && ASCII_ISALNUM(*ptr)) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2036, +/**/ 2035, /**/ 2034,