Mercurial > hg > lib > markup
comparison emacs/repl-comment.el @ 0:509549c55989
from elsewhere
author | Henry S. Thompson <ht@inf.ed.ac.uk> |
---|---|
date | Tue, 25 May 2021 13:57:42 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:509549c55989 |
---|---|
1 ;; Universal (?) replace comment in function | |
2 | |
3 ;; Last edited: Thu Oct 7 09:39:50 1993 | |
4 (defun repl-comment (fn comment) | |
5 "replace/install as FN's comment COMMENT, no matter what emacs/compiler" | |
6 (let ((defn (symbol-function fn))) | |
7 (if (consp defn) | |
8 (if (eq (car defn) 'autoload) | |
9 (progn (load-library (car (cdr defn))) | |
10 (if (equal defn (symbol-function fn)) | |
11 (error "autoloading didn't help define %s" fn) | |
12 (repl-comment fn comment))) | |
13 ;; either symbolic or old byte-compiler | |
14 (if (eq (car defn) 'lambda) | |
15 (if (stringp (car (cdr (cdr defn)))) | |
16 (rplaca (cdr (cdr defn)) | |
17 comment) | |
18 (rplacd (cdr defn) | |
19 (cons comment | |
20 (cdr (cdr defn))))) | |
21 (error "can't diagnose defn %s" defn))) | |
22 ;; array or not | |
23 (if (compiled-function-p defn) | |
24 (fset fn (repl-byte fn (list (cons 4 comment)))) | |
25 (error "unrecognised defn %s" defn))))) | |
26 | |
27 (defun repl-byte (fn alist) | |
28 "compute a new byte-code defn for FN, replacing | |
29 elements using ALIST, which is interpreted as (index . newbit). | |
30 Elements are 0: arglist 1: byte-codes 2: symbols 3: stack-depth 4: comment" | |
31 (let | |
32 ((defn (symbol-function fn))) | |
33 (let ((ln (if (sequencep defn) | |
34 (length defn) | |
35 ;; hack otherwise | |
36 6)) | |
37 (i 0) | |
38 new entry) | |
39 (apply (function make-byte-code) | |
40 (progn (while (< i ln) | |
41 (setq new | |
42 (cons | |
43 (if (setq entry (assoc i alist)) | |
44 (cdr entry) | |
45 (aref defn i)) | |
46 new)) | |
47 (setq i (1+ i))) | |
48 (nreverse new)))))) | |
49 | |
50 | |
51 (provide 'repl-comment) |