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.
diff --git a/src/regexp.c b/src/regexp.c
index 112f753..ef3896c 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -2556,7 +2556,7 @@
 {
     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 @@
     /*
      * 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 @@
 	 * 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)
     {