diff src/regexp.c @ 18949:5c405689da3e v8.2.0035

patch 8.2.0035: saving and restoring called_emsg is clumsy Commit: https://github.com/vim/vim/commit/53989554a44caca0964376d60297f08ec257c53c Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 23 22:59:18 2019 +0100 patch 8.2.0035: saving and restoring called_emsg is clumsy Problem: Saving and restoring called_emsg is clumsy. Solution: Count the number of error messages.
author Bram Moolenaar <Bram@vim.org>
date Mon, 23 Dec 2019 23:00:03 +0100
parents d34ec6fe207d
children 6fd567c927c0
line wrap: on
line diff
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -2556,7 +2556,7 @@ vim_regcomp(char_u *expr_arg, int re_fla
 {
     regprog_T   *prog = NULL;
     char_u	*expr = expr_arg;
-    int		save_called_emsg;
+    int		called_emsg_before;
 
     regexp_engine = p_re;
 
@@ -2592,8 +2592,7 @@ vim_regcomp(char_u *expr_arg, int re_fla
     /*
      * First try the NFA engine, unless backtracking was requested.
      */
-    save_called_emsg = called_emsg;
-    called_emsg = FALSE;
+    called_emsg_before = called_emsg;
     if (regexp_engine != BACKTRACKING_ENGINE)
 	prog = nfa_regengine.regcomp(expr,
 		re_flags + (regexp_engine == AUTOMATIC_ENGINE ? RE_AUTO : 0));
@@ -2624,13 +2623,13 @@ vim_regcomp(char_u *expr_arg, int re_fla
 	 * 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 && !called_emsg)
+	if (regexp_engine == AUTOMATIC_ENGINE
+					  && called_emsg == called_emsg_before)
 	{
 	    regexp_engine = BACKTRACKING_ENGINE;
 	    prog = bt_regengine.regcomp(expr, re_flags);
 	}
     }
-    called_emsg |= save_called_emsg;
 
     if (prog != NULL)
     {