diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2012-11-09 17:20:47 -0500 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2012-11-09 17:20:47 -0500 |
commit | 32e5c58ca969ec30d31520da52c9866cafa62927 (patch) | |
tree | aab212d158443e5a04d5828b78a26eca4d5db88c /src/eval.c | |
parent | da03ef8a9d38ef6f059aaeddb8c97dc7e76d3917 (diff) | |
download | emacs-32e5c58ca969ec30d31520da52c9866cafa62927.tar.gz |
Provide new `defalias-fset-function' symbol property.
* src/lisp.h (AUTOLOADP): New macro.
* src/eval.c (Fautoload): Don't attach to loadhist, call Fdefalias instead.
* src/data.c (Ffset): Remove special ad-advice-info handling.
(Fdefalias): Handle autoload definitions and new Qdefalias_fset_function.
(Fsubr_arity): CSE.
(Finteractive_form): Simplify.
(Fquo): Don't insist on having at least 2 arguments.
(Qdefalias_fset_function): New var.
* lisp/emacs-lisp/advice.el (ad-set-advice-info): Set defalias-fset-function.
(ad--defalias-fset): New function.
(ad-safe-fset): Remove.
(ad-make-freeze-definition): Use cl-letf*.
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/src/eval.c b/src/eval.c index 975204da017..dcd48cb7250 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1876,26 +1876,19 @@ this does nothing and returns nil. */) CHECK_STRING (file); /* If function is defined and not as an autoload, don't override. */ - if ((CONSP (XSYMBOL (function)->function) - && EQ (XCAR (XSYMBOL (function)->function), Qautoload))) - /* Remember that the function was already an autoload. */ - LOADHIST_ATTACH (Fcons (Qt, function)); - else if (!EQ (XSYMBOL (function)->function, Qunbound)) + if (!EQ (XSYMBOL (function)->function, Qunbound) + && !AUTOLOADP (XSYMBOL (function)->function)) return Qnil; - if (NILP (Vpurify_flag)) - /* Only add entries after dumping, because the ones before are - not useful and else we get loads of them from the loaddefs.el. */ - LOADHIST_ATTACH (Fcons (Qautoload, function)); - else if (EQ (docstring, make_number (0))) + if (!NILP (Vpurify_flag) && EQ (docstring, make_number (0))) /* `read1' in lread.c has found the docstring starting with "\ and assumed the docstring will be provided by Snarf-documentation, so it passed us 0 instead. But that leads to accidental sharing in purecopy's hash-consing, so we use a (hopefully) unique integer instead. */ - docstring = make_number (XUNTAG (function, Lisp_Symbol)); - return Ffset (function, - Fpurecopy (list5 (Qautoload, file, docstring, - interactive, type))); + docstring = make_number (XHASH (function)); + return Fdefalias (function, + list5 (Qautoload, file, docstring, interactive, type), + Qnil); } Lisp_Object |