]> granicus.if.org Git - vim/commitdiff
patch 9.0.0513: may not be able to use a pattern ad the debug prompt v9.0.0513
authorBram Moolenaar <Bram@vim.org>
Tue, 20 Sep 2022 12:51:25 +0000 (13:51 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 20 Sep 2022 12:51:25 +0000 (13:51 +0100)
Problem:    May not be able to use a pattern ad the debug prompt.
Solution:   Temporarily disable the timeout. (closes #11164)

src/debugger.c
src/proto/regexp.pro
src/regexp.c
src/version.c

index 4a325505aef1b5abd26bd589241bc8354de3223d..09c83551719ee71b72a73a7ba0f3d59a371e206b 100644 (file)
@@ -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;
index 3fd91eefaafc42c10fae3e1c0462701e08d3c21b..ffd5a07783adb402541b57d366394ef4557c0199 100644 (file)
@@ -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);
index 61fc14da32f39fbcec9055580bda09af197c9804..842c48038d4e000046542ad710a8e3de1da495f8 100644 (file)
@@ -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
index 55da620bc03734e50805d49450f1d4c388facf7c..129f7ce9c4e671c23ece461678d56f3ff9a1b8be 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    513,
 /**/
     512,
 /**/