]> git.eshelyaron.com Git - emacs.git/commitdiff
Add convenience wrapper for regexp disassembly
authorMattias Engdegård <mattiase@acm.org>
Fri, 13 Oct 2023 13:21:26 +0000 (15:21 +0200)
committerMattias Engdegård <mattiase@acm.org>
Fri, 13 Oct 2023 13:24:10 +0000 (15:24 +0200)
* lisp/emacs-lisp/disass.el (re-disassemble): New.
* etc/NEWS: Describe the new function instead of the internal
`re--describe-compiled`.

etc/NEWS
lisp/emacs-lisp/disass.el

index 0e93faebb84bb52dd12359733059f8eec5709b22..0f9b5f98ebf89c2161eed27711e99a452d530f8b 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1018,7 +1018,7 @@ Use 'define-minor-mode' and 'define-globalized-minor-mode' instead.
 \f
 * Lisp Changes in Emacs 30.1
 
-** New function 're--describe-compiled' to see the innards of a regexp.
+** New function 're-disassemble' to see the innards of a regexp.
 If you compiled with '--enable-checking', you can use this to help debug
 either your regexp performance problems or the regexp engine.
 
index 73777d7e701dcaa1c1916a44960168baad2501fe..d9295686e9ff9328dcd05de8dcd821358aed1839 100644 (file)
@@ -301,6 +301,23 @@ OBJ should be a call to BYTE-CODE generated by the byte compiler."
          (insert "\n")))))
   nil)
 
+(defun re-disassemble (regexp &optional case-table)
+  "Describe the compiled form of REGEXP in a separate window.
+If CASE-TABLE is non-nil, use it as translation table for case-folding.
+
+This function is mainly intended for maintenance of Emacs itself
+and may change at any time.  It requires Emacs to be built with
+`--enable-checking'."
+  (interactive "XRegexp (Lisp expression): ")
+  (let ((desc (with-temp-buffer
+                (when case-table
+                  (set-case-table case-table))
+                (let ((case-fold-search (and case-table t)))
+                  (re--describe-compiled regexp)))))
+    (with-output-to-temp-buffer "*Regexp-disassemble*"
+      (with-current-buffer standard-output
+        (insert desc)))))
+
 (provide 'disass)
 
 ;;; disass.el ends here