]> git.eshelyaron.com Git - emacs.git/commitdiff
(byte-optimize-form-code-walker): Treat `ignore' specially--prevent
authorRichard M. Stallman <rms@gnu.org>
Mon, 14 Oct 2002 01:33:40 +0000 (01:33 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 14 Oct 2002 01:33:40 +0000 (01:33 +0000)
warnings about functions called for effect, in its args.
Don't warn when `pop' is used for effect.

lisp/emacs-lisp/byte-opt.el

index 5594b918b37ce249cbab88a33f309ec73c6d3a86..af68b7c919a14314eb52342b345bab27936f1760 100644 (file)
                 (cons (byte-optimize-form (nth 1 form) nil)
                       (cdr (cdr form)))))
 
+         ((eq fn 'ignore)
+          ;; Don't treat the args to `ignore' as being
+          ;; computed for effect.  We want to avoid the warnings
+          ;; that might occur if they were treated that way.
+          ;; However, don't actually bother calling `ignore'.
+          `(prog1 nil . ,(mapcar 'byte-optimize-form (cdr form))))
+
          ;; If optimization is on, this is the only place that macros are
          ;; expanded.  If optimization is off, then macroexpansion happens
          ;; in byte-compile-form.  Otherwise, the macros are already expanded
          ((and for-effect (setq tmp (get fn 'side-effect-free))
                (or byte-compile-delete-errors
                    (eq tmp 'error-free)
+                   ;; Detect the expansion of (pop foo).
+                   ;; There is no need to compile the call to `car' there.
+                   (and (eq fn 'car)
+                        (eq (car-safe (cadr form)) 'prog1)
+                        (let ((var (cadr (cadr form)))
+                              (last (nth 2 (cadr form))))
+                          (and (symbolp var)
+                               (null (nthcdr 3 (cadr form)))
+                               (eq (car-safe last) 'setq)
+                               (eq (cadr last) var)
+                               (eq (car-safe (nth 2 last)) 'cdr)
+                               (eq (cadr (nth 2 last)) var))))
                    (progn
                      (byte-compile-warn "`%s' called for effect"
-                                        (prin1-to-string form))
+                                        (prin1-to-string (car form)))
                      nil)))
           (byte-compile-log "  %s called for effect; deleted" fn)
           ;; appending a nil here might not be necessary, but it can't hurt.