From 7fb75680b38fe0805c2ff7e9cca3bec8121ba984 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Fri, 5 Aug 2016 22:11:00 -0400 Subject: [PATCH] Fix debugging of string-match-p errors * src/eval.c (call_debugger): Bind inhibit-changing-match-data to nil so that debugger code that needs to do regexp match won't break (Bug #23949, Bug #24166, Bug#16294). --- src/eval.c | 5 +++++ src/search.c | 1 + 2 files changed, 6 insertions(+) diff --git a/src/eval.c b/src/eval.c index 33b82f74b64..d182f7f693d 100644 --- a/src/eval.c +++ b/src/eval.c @@ -300,6 +300,11 @@ call_debugger (Lisp_Object arg) specbind (Qinhibit_redisplay, Qnil); specbind (Qinhibit_debugger, Qt); + /* If we are debugging an error while `inhibit-changing-match-data' + is bound to non-nil (e.g., within a call to `string-match-p'), + then make sure debugger code can still use match data. */ + specbind (Qinhibit_changing_match_data, Qnil); + #if 0 /* Binding this prevents execution of Lisp code during redisplay, which necessarily leads to display problems. */ specbind (Qinhibit_eval_during_redisplay, Qt); diff --git a/src/search.c b/src/search.c index 5dc4d355304..9b8fc584120 100644 --- a/src/search.c +++ b/src/search.c @@ -3390,6 +3390,7 @@ or other such regexp constructs are not replaced with this. A value of nil (which is the normal value) means treat spaces literally. */); Vsearch_spaces_regexp = Qnil; + DEFSYM (Qinhibit_changing_match_data, "inhibit-changing-match-data"); DEFVAR_LISP ("inhibit-changing-match-data", Vinhibit_changing_match_data, doc: /* Internal use only. If non-nil, the primitive searching and matching functions -- 2.39.2