]> granicus.if.org Git - vim/commitdiff
patch 8.1.0973: pattern with syntax error gives threee error messages v8.1.0973
authorBram Moolenaar <Bram@vim.org>
Fri, 22 Feb 2019 16:29:43 +0000 (17:29 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 22 Feb 2019 16:29:43 +0000 (17:29 +0100)
Problem:    Pattern with syntax error gives threee error messages. (Kuang-che
            Wu)
Solution:   Remove outdated internal error.  Don't fall back to other engine
            after an error.

src/regexp.c
src/regexp_nfa.c
src/testdir/test_search.vim
src/version.c

index e37c065079b1285af4d2a3bf3f3e8bd7bc99cb1c..5c06ada1b7cf5457e9b7ac20e76d0a72c7fc339d 100644 (file)
@@ -7969,6 +7969,7 @@ vim_regcomp(char_u *expr_arg, int re_flags)
 {
     regprog_T   *prog = NULL;
     char_u     *expr = expr_arg;
+    int                save_called_emsg;
 
     regexp_engine = p_re;
 
@@ -8004,6 +8005,8 @@ vim_regcomp(char_u *expr_arg, int re_flags)
     /*
      * First try the NFA engine, unless backtracking was requested.
      */
+    save_called_emsg = called_emsg;
+    called_emsg = FALSE;
     if (regexp_engine != BACKTRACKING_ENGINE)
        prog = nfa_regengine.regcomp(expr,
                re_flags + (regexp_engine == AUTOMATIC_ENGINE ? RE_AUTO : 0));
@@ -8032,13 +8035,15 @@ vim_regcomp(char_u *expr_arg, int re_flags)
         * If the NFA engine failed, try the backtracking engine.
         * The NFA engine also fails for patterns that it can't handle well
         * but are still valid patterns, thus a retry should work.
+        * But don't try if an error message was given.
         */
-       if (regexp_engine == AUTOMATIC_ENGINE)
+       if (regexp_engine == AUTOMATIC_ENGINE && !called_emsg)
        {
            regexp_engine = BACKTRACKING_ENGINE;
            prog = bt_regengine.regcomp(expr, re_flags);
        }
     }
+    called_emsg |= save_called_emsg;
 
     if (prog != NULL)
     {
index ba75834fc57fd827070bba7b9ece72b4c6a13e7d..1e106359806556c58de4e68ae5b8ebe33d6bff2a 100644 (file)
@@ -7252,12 +7252,7 @@ nfa_regcomp(char_u *expr, int re_flags)
      * (and count its size). */
     postfix = re2post();
     if (postfix == NULL)
-    {
-       /* TODO: only give this error for debugging? */
-       if (post_ptr >= post_end)
-           siemsg("Internal error: estimated max number of states insufficient: %ld", post_end - post_start);
        goto fail;          /* Cascaded (syntax?) error */
-    }
 
     /*
      * In order to build the NFA, we parse the input regexp twice:
index 4ff2aca5ace403c6025df8660a3934cd9f024fd1..5cf70d4d8960bb844548b2764fd2243b18f09fd7 100644 (file)
@@ -1220,3 +1220,8 @@ func Test_large_hex_chars()
     call assert_match('E678:', v:exception)
   endtry
 endfunc
+
+func Test_one_error_msg()
+  " This  was also giving an internal error
+  call assert_fails('call search(" \\((\\v[[=P=]]){185}+             ")', 'E871:')
+endfunc
index bd49a512ceaf71e24f5aaf8200f680ddfda1a4da..cca92c8ee5db821e9a0af743396cbab82ae4836e 100644 (file)
@@ -779,6 +779,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    973,
 /**/
     972,
 /**/