branch: externals/trie commit 160f092b8da39f87b6747d6cff3c37a2effd477d Author: Toby S. Cubitt <toby-predict...@dr-qubit.org> Commit: Toby S. Cubitt <toby-predict...@dr-qubit.org>
Revert "Replaced advice with cedet-edebug.el for pretty-printing" This reverts commit 5e3702f1a02de5594bcd5cd363e399e3020b6302. --- trie.el | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 9 deletions(-) diff --git a/trie.el b/trie.el index e43dbc9..7dce69d 100644 --- a/trie.el +++ b/trie.el @@ -1883,23 +1883,87 @@ elements that matched the corresponding groups, in order." ;; ---------------------------------------------------------------- -;; Pretty-print tries during edebug +;; Pretty-print tries during edebug -;; We use `cedet-edebug-add-print-override' from cedet-edebug.el to make -;; edebug print "#<trie>" instead of the full print form for -;; tries. (This is cleaner than using aliases or advice.) +;; Note: +;; ----- + +;; We advise the `edebug-prin1' and `edebug-prin1-to-string' functions +;; (actually, aliases) so that they pring "#<trie>" instead of the full +;; print form for tries. ;; ;; This is because, if left to its own devices, edebug hangs for ages ;; whilst printing large tries, and you either have to wait for a *very* ;; long time for it to finish, or kill Emacs entirely. (Even C-g C-g -;; fails!) Since the print form of a trie is practically -;; incomprehensible anyway, we don't lose much by doing this. +;; fails!) +;; +;; Since the print form of a trie is practically incomprehensible +;; anyway, we don't lose much by doing this. If you *really* want to +;; print tries in full whilst edebugging, despite this warning, disable +;; the advice. +;; +;; FIXME: Should use `cedet-edebug-prin1-extensions' instead of advice +;; when `cedet-edebug' is loaded, though I believe this still +;; works in that case. + + +(eval-when-compile + (require 'edebug) + (require 'advice)) + + +(defun trie--edebug-pretty-print (object) + (cond + ((trie-p object) "#<trie>") + ((consp object) + (if (consp (cdr object)) + (let ((pretty "(")) + (while object + (setq pretty + (concat pretty + (trie--edebug-pretty-print + (if (atom object) + (prog1 + (trie--edebug-pretty-print object) + (setq object nil)) + (pop object))) + (when object " ")))) + (concat pretty ")")) + (concat "(" (trie--edebug-pretty-print (car object)) + " . " (trie--edebug-pretty-print (cdr object)) ")"))) + ((vectorp object) + (let ((pretty "[") (len (length object))) + (dotimes (i (1- len)) + (setq pretty + (concat pretty + (trie--edebug-pretty-print (aref object i)) + " "))) + (concat pretty + (trie--edebug-pretty-print (aref object (1- len))) + "]"))) + (t (prin1-to-string object)))) + + +(ad-define-subr-args 'edebug-prin1 '(object &optional printcharfun)) + +(defadvice edebug-prin1 + (around trie activate compile preactivate) + (let ((pretty (trie--edebug-pretty-print object))) + (if pretty + (progn + (prin1 pretty printcharfun) + (setq ad-return-value pretty)) + ad-do-it))) -(require 'cedet-edebug) -(defun trie-pretty-print (trie) "#<trie>") +(ad-define-subr-args 'edebug-prin1-to-string '(object &optional noescape)) -(cedet-edebug-add-print-override 'trie-p 'trie-pretty-print) +(defadvice edebug-prin1-to-string + (around trie activate compile preactivate) + (let ((pretty (trie--edebug-pretty-print object))) + (if pretty + (setq ad-return-value pretty) + ad-do-it)))