emacs-pretest-bug
[Top][All Lists]
Advanced

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

do_autoload records more than just autoloads.


From: Lute Kamstra
Subject: do_autoload records more than just autoloads.
Date: Mon, 25 Apr 2005 00:42:13 +0200
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

Consider this file:

,----[ file.el ]
| (defun a () 'a)
| (defun b () 'new-b)
| (defun c () 'new-c)
| (provide 'file)
`----

Now do:

(autoload 'a "file")
(defun b () 'old-b)
(defmacro c () '(quote old-c))

We have:

(symbol-function 'a) => (autoload "file" nil nil nil)
(symbol-function 'b) => (lambda nil (quote old-b))
(symbol-function 'c) => (macro lambda nil (quote (quote old-c)))

Now call a to have do_autoload load file.el:

(a)

Then we have:

(symbol-function 'a) => (lambda nil (quote a))
(symbol-function 'b) => (lambda nil (quote new-b))
(symbol-function 'c) => (lambda nil (quote new-c))

But do_autoload recorded more than just the autoload:

(get 'a 'autoload) => ("file" nil nil nil)
(get 'b 'autoload) => (nil (quote old-b))
(get 'c 'autoload) => (lambda nil (quote (quote old-c)))

When we no do:

(unload-feature 'file)

we get a big mess:

(symbol-function 'a) => (autoload "file" nil nil nil)
(symbol-function 'b) => (autoload nil (quote old-b))
(symbol-function 'c) => (autoload lambda nil (quote (quote old-c)))

What about the patch below to fix this?


  Lute "who fixes bugs too".



Index: src/eval.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/eval.c,v
retrieving revision 1.235
diff -c -r1.235 eval.c
*** src/eval.c  3 Apr 2005 22:08:58 -0000       1.235
--- src/eval.c  24 Apr 2005 22:28:49 -0000
***************
*** 1,6 ****
  /* Evaluator for GNU Emacs Lisp interpreter.
!    Copyright (C) 1985, 86, 87, 93, 94, 95, 99, 2000, 2001, 02, 2004
!      Free Software Foundation, Inc.
  
  This file is part of GNU Emacs.
  
--- 1,6 ----
  /* Evaluator for GNU Emacs Lisp interpreter.
!    Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1999, 2000, 2001,
!      2002, 2004, 2005 Free Software Foundation, Inc.
  
  This file is part of GNU Emacs.
  
***************
*** 1982,1991 ****
        second = Fcdr (first);
        first = Fcar (first);
  
!       /* Note: This test is subtle.  The cdr of an autoload-queue entry
!        may be an atom if the autoload entry was generated by a defalias
!        or fset.  */
!       if (CONSP (second))
        Fput (first, Qautoload, (XCDR (second)));
  
        queue = XCDR (queue);
--- 1982,1988 ----
        second = Fcdr (first);
        first = Fcar (first);
  
!       if (CONSP (second) && EQ (XCAR (second), Qautoload))
        Fput (first, Qautoload, (XCDR (second)));
  
        queue = XCDR (queue);




reply via email to

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