]> code.delx.au - gnu-emacs/commitdiff
(byte-optimize-set): New. Turn `set' into `setq' when applicable.
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 25 Mar 2003 16:34:00 +0000 (16:34 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 25 Mar 2003 16:34:00 +0000 (16:34 +0000)
lisp/emacs-lisp/byte-opt.el

index 0bf5a7904c22f7ed9f47869c304a487024d68b8b..7aa34cff6bcdf9ec487a7c56a7f40e32f1c27a35 100644 (file)
   (if (equal '((quote xemacs)) (cdr-safe form))
       nil
     form))
+
+(put 'set 'byte-optimizer 'byte-optimize-set)
+(defun byte-optimize-set (form)
+  (let ((var (car-safe (cdr-safe form))))
+    (cond
+     ((and (eq (car-safe var) 'quote) (consp (cdr var)))
+      (list* 'setq (cadr var) (cddr form)))
+     ((and (eq (car-safe var) 'make-local-variable)
+          (eq (car-safe (setq var (car-safe (cdr var)))) 'quote)
+          (consp (cdr var)))
+      `(progn ,(cadr form) (setq ,(cadr var) ,@(cddr form))))
+     (t form))))
 \f
 ;;; enumerating those functions which need not be called if the returned
 ;;; value is not used.  That is, something like