summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-09-20 13:51:25 +0100
committerBram Moolenaar <Bram@vim.org>2022-09-20 13:51:25 +0100
commit9781d9c00517a67c44b50b040cca2c5804daf15c (patch)
tree6188156e94afb4d1ed7b3635d94efc3040437e95
parentc14bfc31d907cbee6a3636f780561ad1787cdb9b (diff)
downloadvim-git-9781d9c00517a67c44b50b040cca2c5804daf15c.tar.gz
patch 9.0.0513: may not be able to use a pattern ad the debug promptv9.0.0513
Problem: May not be able to use a pattern ad the debug prompt. Solution: Temporarily disable the timeout. (closes #11164)
-rw-r--r--src/debugger.c2
-rw-r--r--src/proto/regexp.pro2
-rw-r--r--src/regexp.c28
-rw-r--r--src/version.c2
4 files changed, 34 insertions, 0 deletions
diff --git a/src/debugger.c b/src/debugger.c
index 4a325505a..09c835517 100644
--- a/src/debugger.c
+++ b/src/debugger.c
@@ -87,6 +87,7 @@ do_debug(char_u *cmd)
msg_silent = FALSE; // display messages
emsg_silent = FALSE; // display error messages
redir_off = TRUE; // don't redirect debug commands
+ save_timeout_for_debugging(); // disable regexp timeout flag
State = MODE_NORMAL;
debug_mode = TRUE;
@@ -293,6 +294,7 @@ do_debug(char_u *cmd)
redraw_all_later(UPD_NOT_VALID);
need_wait_return = FALSE;
msg_scroll = save_msg_scroll;
+ restore_timeout_for_debugging();
lines_left = Rows - 1;
State = save_State;
debug_mode = FALSE;
diff --git a/src/proto/regexp.pro b/src/proto/regexp.pro
index 3fd91eefa..ffd5a0778 100644
--- a/src/proto/regexp.pro
+++ b/src/proto/regexp.pro
@@ -1,6 +1,8 @@
/* regexp.c */
void init_regexp_timeout(long msec);
void disable_regexp_timeout(void);
+void save_timeout_for_debugging(void);
+void restore_timeout_for_debugging(void);
int re_multiline(regprog_T *prog);
char_u *skip_regexp(char_u *startp, int delim, int magic);
char_u *skip_regexp_err(char_u *startp, int delim, int magic);
diff --git a/src/regexp.c b/src/regexp.c
index 61fc14da3..842c48038 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -80,6 +80,34 @@ disable_regexp_timeout(void)
}
#endif
+#if defined(FEAT_EVAL) || defined(PROTO)
+# ifdef FEAT_RELTIME
+static sig_atomic_t *saved_timeout_flag;
+# endif
+
+/*
+ * Used at the debug prompt: disable the timeout so that expression evaluation
+ * can used patterns.
+ * Must be followed by calling restore_timeout_for_debugging().
+ */
+ void
+save_timeout_for_debugging(void)
+{
+# ifdef FEAT_RELTIME
+ saved_timeout_flag = (sig_atomic_t *)timeout_flag;
+ timeout_flag = &dummy_timeout_flag;
+# endif
+}
+
+ void
+restore_timeout_for_debugging(void)
+{
+# ifdef FEAT_RELTIME
+ timeout_flag = saved_timeout_flag;
+# endif
+}
+#endif
+
/*
* The first byte of the BT regexp internal "program" is actually this magic
* number; the start node begins in the second byte. It's used to catch the
diff --git a/src/version.c b/src/version.c
index 55da620bc..129f7ce9c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 513,
+/**/
512,
/**/
511,