changeset 18082:1c7a91cf2356 v8.1.2036

patch 8.1.2036: the str2nr() tests fail Commit: https://github.com/vim/vim/commit/1ac90b4fa63414d56750559506a3e076df6923b0 Author: Bram Moolenaar <Bram@vim.org> 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.
author Bram Moolenaar <Bram@vim.org>
date Sun, 15 Sep 2019 15:00:03 +0200
parents 25bf4300631b
children 940067fc8f0c
files src/charset.c src/version.c
diffstat 2 files changed, 34 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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))
--- 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,