[Top][All Lists]

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

Re: defvars at compile time

From: Katsumi Yamaoka
Subject: Re: defvars at compile time
Date: Wed, 22 Mar 2006 10:59:43 +0900
User-agent: Gnus/5.110004 (No Gnus v0.4) Emacs/23.0.0 (gnu/linux)

>>>>> In <address@hidden> Stefan Monnier wrote:

>>>> (let* ((load-path (image-load-path-for-library "mh-e" "mh-logo.xpm"))
>>>>        (image-load-path (cons (car load-path)
>>>>         (when (boundp 'image-load-path)
>>>>           image-load-path))))
>>>>   (mh-tool-bar-folder-buttons-init))

>>> How would you fix this, then?

>>> While compiling mh-folder-mode in file
>>> /usr/local/src/mh-e/src/emacs/lisp/mh-e/mh-folder.el:
>>> ** reference to free variable image-load-path

> How/when do you see this?

This is continuation of the thread:


And I esteemed Reiner Steib's `Mail-Followup-To: emacs-devel'

> Emacs-21 should complain indeed, but Emacs-CVS
> shouldn't (because it recognizes the (if (boundp ..) ..) form).

Yes it is.  But Gnus CVS supports Emacs 21 and XEmacs, so we
have to do something to avoid a compile warning.

>> I usually do this:
>>   (when (boundp 'image-load-path)
>>     (symbol-value 'image-load-path))

> Since (symbol-value 'foo) is equivalent to just `foo' the change may work
> for some versions of the byte-compiler (which doesn't optimize one form into
> the other) but not for others.

It relies on just Emacs 21's compiler and XEmacs' compiler.

> I.e. it's a bad solution.

I think the reason it is bad is only that it might take more
time than directly referring the value of the variable.
Therefore, we should not use such a countermeasure if a program
uses it frequently.  However, if not, I feel it is not very ugly
rather than putting `(eval-when-compile (defvar variable))' here
and there.  Did I overlook something?

reply via email to

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