unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#11938: 24.1.50; Some not so useful CL related byte compiler warnings
@ 2012-07-13 18:00 Michael Heerdegen
  2012-07-13 18:18 ` Andreas Schwab
  2012-07-18 10:25 ` Stefan Monnier
  0 siblings, 2 replies; 4+ messages in thread
From: Michael Heerdegen @ 2012-07-13 18:00 UTC (permalink / raw)
  To: 11938

Hi,

I create an example file with the following content:

(eval-when-compile
  (require 'cl))

(defvar my-holiday-alist
      '((2012 . ((( 1  1) . "New Year")))))

(defun* my-holidayp (&optional date no-warn-if-no-info)
  (save-excursion
    (progv '(a b year) date
      (cdr (assoc (list a b)
                  (cdr (or (assoc year my-holiday-alist)
                           (prog1 nil   ;always return nil
                             (push (cons year ()) my-holiday-alist) ;; --> Warn only one time
                             (unless no-warn-if-no-info
                               (ding)
                               (message "Note: No holiday info for %s in `my-holiday-alist'." year)
                               (sit-for 3))))))))))

(labels ((fac (x) (if (< x 2) 1 (* x (fac (1- x))))))
  (defun test () (fac 5)))


If I byte compile it, I get the following warnings:

progv-bug.el:7:37:Warning: global/dynamic var `body' lacks a prefix
progv-bug.el:10:25:Warning: reference to free variable `a'
progv-bug.el:10:27:Warning: reference to free variable `b'
progv-bug.el:11:35:Warning: reference to free variable `year'
progv-bug.el:19:1:Warning: `labels' is an obsolete function (as of 24.2); use
    `(quote cl-labels)' instead.


In detail:

  progv-bug.el:7:37:Warning: global/dynamic var `body' lacks a prefix

Dunno what that means, the code doesn't include such a variable.

  progv-bug.el:10:25:Warning: reference to free variable `a'
  progv-bug.el:10:27:Warning: reference to free variable `b'
  progv-bug.el:11:35:Warning: reference to free variable `year'

Not very useful, since the variables' values are never looked up
before they are bound, but ok, I can live with it.

  progv-bug.el:19:1:Warning: `labels' is an obsolete function (as of 24.2); use
      `(quote cl-labels)' instead.

What does `(quote cl-labels)' mean?  I guess this should be just
`cl-labels'.


Thanks,

Michael.




In GNU Emacs 24.1.50.1 (i486-pc-linux-gnu, GTK+ Version 3.4.2)
 of 2012-07-12 on keller, modified by Debian
 (emacs-snapshot package, version 2:20120712-1)
Windowing system distributor `The X.Org Foundation', version 11.0.11201902
Configured using:
 `configure '--build' 'i486-linux-gnu' '--host' 'i486-linux-gnu'
 '--prefix=/usr' '--sharedstatedir=/var/lib' '--libexecdir=/usr/lib'
 '--localstatedir=/var' '--infodir=/usr/share/info'
 '--mandir=/usr/share/man' '--with-pop=yes'
 '--enable-locallisppath=/etc/emacs-snapshot:/etc/emacs:/usr/local/share/emacs/24.1.50/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.1.50/site-lisp:/usr/share/emacs/site-lisp'
 '--without-compress-info' '--with-crt-dir=/usr/lib/i386-linux-gnu/'
 '--with-x=yes' '--with-x-toolkit=gtk3' '--with-imagemagick=yes'
 'build_alias=i486-linux-gnu' 'host_alias=i486-linux-gnu'
 'CFLAGS=-DDEBIAN -DSITELOAD_PURESIZE_EXTRA=5000 -g -O2' 'LDFLAGS=-g
 -Wl,--as-needed -znocombreloc' 'CPPFLAGS=-D_FORTIFY_SOURCE=2''






^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#11938: 24.1.50; Some not so useful CL related byte compiler warnings
  2012-07-13 18:00 bug#11938: 24.1.50; Some not so useful CL related byte compiler warnings Michael Heerdegen
@ 2012-07-13 18:18 ` Andreas Schwab
  2012-07-18 10:25 ` Stefan Monnier
  1 sibling, 0 replies; 4+ messages in thread
From: Andreas Schwab @ 2012-07-13 18:18 UTC (permalink / raw)
  To: michael_heerdegen; +Cc: 11938

Michael Heerdegen <michael_heerdegen@web.de> writes:

>   progv-bug.el:19:1:Warning: `labels' is an obsolete function (as of 24.2); use
>       `(quote cl-labels)' instead.
>
> What does `(quote cl-labels)' mean?  I guess this should be just
> `cl-labels'.

Fixed.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."





^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#11938: 24.1.50; Some not so useful CL related byte compiler warnings
  2012-07-13 18:00 bug#11938: 24.1.50; Some not so useful CL related byte compiler warnings Michael Heerdegen
  2012-07-13 18:18 ` Andreas Schwab
@ 2012-07-18 10:25 ` Stefan Monnier
  2012-07-19  0:19   ` Juanma Barranquero
  1 sibling, 1 reply; 4+ messages in thread
From: Stefan Monnier @ 2012-07-18 10:25 UTC (permalink / raw)
  To: michael_heerdegen; +Cc: 11938

> If I byte compile it, I get the following warnings:

> progv-bug.el:7:37:Warning: global/dynamic var `body' lacks a prefix
> progv-bug.el:10:25:Warning: reference to free variable `a'
> progv-bug.el:10:27:Warning: reference to free variable `b'
> progv-bug.el:11:35:Warning: reference to free variable `year'
> progv-bug.el:19:1:Warning: `labels' is an obsolete function (as of 24.2); use
>     `(quote cl-labels)' instead.

Yay!!  So there are progv users after all!  Amazing!

> In detail:
>   progv-bug.el:7:37:Warning: global/dynamic var `body' lacks a prefix
> Dunno what that means, the code doesn't include such a variable.

Yes, it's a bug of my new progv code, which introduces this var.
Should be fixed now, thank you.

>   progv-bug.el:10:25:Warning: reference to free variable `a'
>   progv-bug.el:10:27:Warning: reference to free variable `b'
>   progv-bug.el:11:35:Warning: reference to free variable `year'

> Not very useful, since the variables' values are never looked up
> before they are bound, but ok, I can live with it.

Yes, I think these warnings were already present with Emacs-24.1's
version of progv.
I'm curious, actually.  What does Common-Lisp do with something like:

  (let ((a 2)) (progv '(a b) '(1 2) a))

does it return 2 (the value of the lexically-scoped var `a') or 1?
If it should return 1, what about:

  (let ((a 2)) (progv '(b) '(1) a))

In any case, for all uses of progv where the first arg is a constant,
you'd be much better off using pcase-let (or destructuring-bind or
multiple-value-bind).
So maybe you're not a user of progv after all.

>   progv-bug.el:19:1:Warning: `labels' is an obsolete function (as of 24.2); use
>       `(quote cl-labels)' instead.
> What does `(quote cl-labels)' mean?  I guess this should be just
> `cl-labels'.

Indeed, that was a copy&paste typo, thank you for catching it,


        Stefan







^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#11938: 24.1.50; Some not so useful CL related byte compiler warnings
  2012-07-18 10:25 ` Stefan Monnier
@ 2012-07-19  0:19   ` Juanma Barranquero
  0 siblings, 0 replies; 4+ messages in thread
From: Juanma Barranquero @ 2012-07-19  0:19 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: michael_heerdegen, 11938

On Wed, Jul 18, 2012 at 12:25 PM, Stefan Monnier
<monnier@iro.umontreal.ca> wrote:

> I'm curious, actually.  What does Common-Lisp do with something like:
>
>   (let ((a 2)) (progv '(a b) '(1 2) a))
>
> does it return 2 (the value of the lexically-scoped var `a') or 1?

SBCL, CLisp and Clozure agree on the result: 2

    Juanma





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-07-19  0:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-13 18:00 bug#11938: 24.1.50; Some not so useful CL related byte compiler warnings Michael Heerdegen
2012-07-13 18:18 ` Andreas Schwab
2012-07-18 10:25 ` Stefan Monnier
2012-07-19  0:19   ` Juanma Barranquero

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).