diff src/regexp.c @ 19892:5feb426d2ea1 v8.2.0502

patch 8.2.0502: Vim9: some code is not tested Commit: https://github.com/vim/vim/commit/e8c4abbbd711af8fd3ed85ea69e9ac3d63a0d879 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Apr 2 21:13:25 2020 +0200 patch 8.2.0502: Vim9: some code is not tested Problem: Vim9: some code is not tested. Solution: Add more tests. Fix uncovered problems.
author Bram Moolenaar <Bram@vim.org>
date Thu, 02 Apr 2020 21:15:04 +0200
parents 08f4dc2ba716
children aadd1cae2ff5
line wrap: on
line diff
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -537,16 +537,30 @@ skip_anyof(char_u *p)
  * Stop at end of "startp" or where "dirc" is found ('/', '?', etc).
  * Take care of characters with a backslash in front of it.
  * Skip strings inside [ and ].
- * When "newp" is not NULL and "dirc" is '?', make an allocated copy of the
- * expression and change "\?" to "?".  If "*newp" is not NULL the expression
- * is changed in-place.
  */
     char_u *
 skip_regexp(
     char_u	*startp,
     int		dirc,
+    int		magic)
+{
+    return skip_regexp_ex(startp, dirc, magic, NULL, NULL);
+}
+
+/*
+ * skip_regexp() with extra arguments:
+ * When "newp" is not NULL and "dirc" is '?', make an allocated copy of the
+ * expression and change "\?" to "?".  If "*newp" is not NULL the expression
+ * is changed in-place.
+ * If a "\?" is changed to "?" then "dropped" is incremented, unless NULL.
+ */
+    char_u *
+skip_regexp_ex(
+    char_u	*startp,
+    int		dirc,
     int		magic,
-    char_u	**newp)
+    char_u	**newp,
+    int		*dropped)
 {
     int		mymagic;
     char_u	*p = startp;
@@ -579,6 +593,8 @@ skip_regexp(
 		    if (*newp != NULL)
 			p = *newp + (p - startp);
 		}
+		if (dropped != NULL)
+		    ++*dropped;
 		if (*newp != NULL)
 		    STRMOVE(p, p + 1);
 		else