[Top][All Lists]
[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- do_autoload records more than just autoloads.,
Lute Kamstra <=