]> granicus.if.org Git - vim/commitdiff
patch 8.1.2036: the str2nr() tests fail v8.1.2036
authorBram Moolenaar <Bram@vim.org>
Sun, 15 Sep 2019 12:49:52 +0000 (14:49 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 15 Sep 2019 12:49:52 +0000 (14:49 +0200)
Problem:    The str2nr() tests fail.
Solution:   Add missing part of patch.

src/charset.c
src/version.c

index d47ccfd6911f14b28e1276992a01eb4e648f78e3..09e78203ffe3ed33c25ef2c6e7103bc6e2b9f068 100644 (file)
@@ -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))
index 09baa53249fcb2054bb1eecd9c585d12bdb7ac22..b258eea0e145574d2a33c46412928ed9dc3051b3 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2036,
 /**/
     2035,
 /**/