emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bogus byte-compiler warnings


From: Reiner Steib
Subject: Re: Bogus byte-compiler warnings
Date: Sat, 01 Dec 2007 12:29:27 +0100
User-agent: Gnus/5.110007 (No Gnus v0.7) Emacs/22.1.50 (gnu/linux)

On Sun, Nov 19 2006, Chong Yidong wrote:
        ^^^^^^^^^^^

[ See <http://thread.gmane.org/gmane.emacs.devel/62115> for the
  complete thread. ]

> Richard Stallman <address@hidden> writes:
>
>>     > The reason there is a warning for foo-1 is that the code in the
>>     > compiler to avoid such warnings recognizes only the simpler case (such
>>     > as foo-2) and not the more complex case that foo-1 is.
>>     >
>>     > I would not mind if that code were made smarter.
>>
>>     How bout this patch?
>>
>> I think it would be better to save this for after the release.
>> Changes in this code are somewhat risky, and even if you have
>> been rather careful, you could easily break something.
>
> I had already checked it into CVS (since you put it in FOR-RELEASE, I
> assumed you wanted it fixed).  But I agree that now is not the time
> for such changes, so I've reverted the change.

The patch below has been reverted because Richard didn't want to
install it before the release of Emacs 22.1.  Maybe it should be
installed now in the trunk?

--8<---------------cut here---------------start------------->8---
--- bytecomp.el 7 Jul 2006 16:34:44 -0000       2.186
+++ bytecomp.el 18 Nov 2006 21:07:17 -0000      2.187
@@ -3398,35 +3398,42 @@
 If CONDITION's value is (not (featurep 'emacs)) or (featurep 'xemacs),
 that suppresses all warnings during execution of BODY."
   (declare (indent 1) (debug t))
-  `(let* ((fbound
-          (if (eq 'fboundp (car-safe ,condition))
-              (and (eq 'quote (car-safe (nth 1 ,condition)))
-                   ;; Ignore if the symbol is already on the
-                   ;; unresolved list.
-                   (not (assq (nth 1 (nth 1 ,condition)) ; the relevant symbol
-                              byte-compile-unresolved-functions))
-                   (nth 1 (nth 1 ,condition)))))
-         (bound (if (or (eq 'boundp (car-safe ,condition))
-                        (eq 'default-boundp (car-safe ,condition)))
-                    (and (eq 'quote (car-safe (nth 1 ,condition)))
-                         (nth 1 (nth 1 ,condition)))))
-         ;; Maybe add to the bound list.
-         (byte-compile-bound-variables
-          (if bound
-              (cons bound byte-compile-bound-variables)
-            byte-compile-bound-variables))
-         ;; Suppress all warnings, for code not used in Emacs.
-         (byte-compile-warnings
+  `(let* ((byte-compile-warnings
+          ;; Suppress all warnings, for code not used in Emacs.
           (if (member ,condition '((featurep 'xemacs)
                                    (not (featurep 'emacs))))
-              nil byte-compile-warnings)))
+              nil
+            byte-compile-warnings))
+         (byte-compile-bound-variables byte-compile-bound-variables)
+         binding fbound-list)
+     (mapc (lambda (subcondition)
+            (cond ((eq 'fboundp (car-safe subcondition))
+                   (setq binding (and (eq 'quote (car-safe (nth 1 
subcondition)))
+                                      ;; Ignore if the symbol is already on the
+                                      ;; unresolved list.
+                                      (not (assq (nth 1 (nth 1 subcondition))
+                                                 
byte-compile-unresolved-functions))
+                                      (nth 1 (nth 1 subcondition))))
+                   (if binding (setq fbound-list (cons binding fbound-list))))
+                  ((or (eq 'boundp (car-safe subcondition))
+                       (eq 'default-boundp (car-safe subcondition)))
+                   (setq binding (and (eq 'quote (car-safe (nth 1 
subcondition)))
+                                      (nth 1 (nth 1 subcondition))))
+                   (if binding (setq byte-compile-bound-variables
+                                     (cons binding 
byte-compile-bound-variables))))))
+          ;; Inspect each element in an `and' condition; otherwise,
+          ;; inspect the condition itself.
+          (if (eq 'and (car-safe ,condition))
+              (cdr ,condition)
+            (list ,condition)))
      (unwind-protect
         (progn ,@body)
        ;; Maybe remove the function symbol from the unresolved list.
-       (if fbound
-          (setq byte-compile-unresolved-functions
-                (delq (assq fbound byte-compile-unresolved-functions)
-                      byte-compile-unresolved-functions))))))
+       (mapc (lambda (fun)
+              (setq byte-compile-unresolved-functions
+                    (delq (assq fun byte-compile-unresolved-functions)
+                          byte-compile-unresolved-functions)))
+            fbound-list))))
 
 (defun byte-compile-if (form)
   (byte-compile-form (car (cdr form)))
--8<---------------cut here---------------end--------------->8---

Davis Herring commented:

> Chong Yidong <cyd <at> stupidchicken.com> writes:
>> !       (if (eq 'and (car-safe ,condition))
>> !           (cdr-safe ,condition)
> Tiny point: you can just use `cdr' here, since `car-safe' returned non-nil.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]