Ar an dara lá de mí Eanair, scríobh Stephen J. Turnbull:
VETO
You broke the union build, and it's a real bug in the disunion build
too (`fun = Fcdr_safe(fun)' in doc.c:523 is a Lisp object and will
never be zero).
That was intentional--I didn’t realise it would break the union build. Thank
you for the report, I’ll fix this today.
BTW, it looks to me like this probably should be an assert, but I
don't know where to look it up offhand.
No, if I understand you correctly that would make it trivial to crash XEmacs
from Lisp with:
(progn
(fset 'whatever '(macro . not-a-subr))
(built-in-symbol-file 'whatever))
Aidan Kehoe writes:
> changeset: 4367:69e6352406f0393738f99a6d250c351e7016f47b
> parent: 4365:c9ab656691c04f41c53df820c0a83e4ee36f5177
> user: Aidan Kehoe <kehoea(a)parhasard.net>
> date: Sun Dec 30 15:33:13 2007 +0100
> files: lisp/ChangeLog lisp/loadhist.el src/ChangeLog src/doc.c
> description:
> Handle macros, autoloads correctly in symbol-file. Add an incomplete TYPE arg.
>
> src/ChangeLog addition:
>
> 2007-12-30 Aidan Kehoe <kehoea(a)parhasard.net>
>
> * doc.c (Fbuilt_in_symbol_file):
> Take a new TYPE argument, specifying whether the function or
> variable definition of the symbol should be searched for.
> Handle built-in macros correctly.
>
> lisp/ChangeLog addition:
>
> 2007-12-30 Aidan Kehoe <kehoea(a)parhasard.net>
>
> * loadhist.el (symbol-file):
> Accept a new TYPE argument, compatible with GNU, saying
> whether function or variable definitions should be searched for.
> Implement the functionality for autoloads, handling TYPE
> correctly.
> Pass the TYPE argument to built-in-symbol-file correctly.
> Document that TYPE is not implemented for non-autoloaded Lisp
> definitions. Our load-history doesn't have the relevant metadata.
>
>
> diff -r c9ab656691c04f41c53df820c0a83e4ee36f5177 -r
69e6352406f0393738f99a6d250c351e7016f47b lisp/ChangeLog
> --- a/lisp/ChangeLog Thu Dec 27 13:22:26 2007 +0100
> +++ b/lisp/ChangeLog Sun Dec 30 15:33:13 2007 +0100
> @@ -1,3 +1,14 @@ 2007-12-25 Aidan Kehoe <kehoea@parhasa
> +2007-12-30 Aidan Kehoe <kehoea(a)parhasard.net>
> +
> + * loadhist.el (symbol-file):
> + Accept a new TYPE argument, compatible with GNU, saying
> + whether function or variable definitions should be searched for.
> + Implement the functionality for autoloads, handling TYPE
> + correctly.
> + Pass the TYPE argument to built-in-symbol-file correctly.
> + Document that TYPE is not implemented for non-autoloaded Lisp
> + definitions. Our load-history doesn't have the relevant metadata.
> +
> 2007-12-25 Aidan Kehoe <kehoea(a)parhasard.net>
>
> * glyphs.el (init-glyphs):
> diff -r c9ab656691c04f41c53df820c0a83e4ee36f5177 -r
69e6352406f0393738f99a6d250c351e7016f47b lisp/loadhist.el
> --- a/lisp/loadhist.el Thu Dec 27 13:22:26 2007 +0100
> +++ b/lisp/loadhist.el Sun Dec 30 15:33:13 2007 +0100
> @@ -25,6 +25,8 @@
>
> ;;; Synched up with: FSF 20.2.
>
> +;; #### Sync this file!
> +
> ;;; Commentary:
>
> ;; This file is dumped with XEmacs.
> @@ -37,19 +39,36 @@
> ;; load-history is a list of entries that look like this:
> ;; ("outline" outline-regexp ... (require . wid-edit) ... (provide .
outline) ...)
>
> -(defun symbol-file (sym)
> +(defun symbol-file (sym &optional type)
> "Return the input source from which SYM was loaded.
> -This is a file name, or nil if the source was a buffer with no associated
file."
> +This is a file name, or nil if the source was a buffer with no associated file.
> +
> +If TYPE is nil or omitted, any kind of definition is acceptable.
> +If TYPE is `defun', then function, subr, special form or macro definitions
> +are acceptable.
> +If TYPE is `defvar', then variable definitions are acceptable.
> +
> +#### For the moment the difference is not implemented for non-autoloaded
> +Lisp symbols."
> (interactive "SFind source file for symbol: ") ; XEmacs
> (block look-up-symbol-file
> - (dolist (entry load-history)
> - (when (memq sym (cdr entry))
> - (return-from look-up-symbol-file (car entry))))
> - (when (or (and (boundp sym) (built-in-variable-type sym))
> - (and (fboundp sym) (subrp (symbol-function sym))))
> - (let ((built-in-file (built-in-symbol-file sym)))
> - (if built-in-file
> - (concat source-directory "/src/" built-in-file))))))
> + (let (built-in-file autoload-cons)
> + (when (and
> + (eq 'autoload
> + (car-safe (setq autoload-cons
> + (and (fboundp sym)
> + (symbol-function sym)))))
> + (or (and (or (null type) (eq 'defvar type))
> + (eq (fifth autoload-cons) 'keymap))
> + (and (or (null type) (eq 'defvar type))
> + (memq (fifth autoload-cons) '(nil macro)))))
> + (return-from look-up-symbol-file
> + (locate-library (second autoload-cons))))
> + (dolist (entry load-history)
> + (when (memq sym (cdr entry))
> + (return-from look-up-symbol-file (car entry))))
> + (setq built-in-file (built-in-symbol-file sym type))
> + (if built-in-file (concat source-directory "/src/"
built-in-file)))))
>
> (defun feature-symbols (feature)
> "Return the file and list of symbols associated with a given
FEATURE."
> diff -r c9ab656691c04f41c53df820c0a83e4ee36f5177 -r
69e6352406f0393738f99a6d250c351e7016f47b src/ChangeLog
> --- a/src/ChangeLog Thu Dec 27 13:22:26 2007 +0100
> +++ b/src/ChangeLog Sun Dec 30 15:33:13 2007 +0100
> @@ -1,3 +1,10 @@ 2007-12-24 Aidan Kehoe <kehoea@parhasa
> +2007-12-30 Aidan Kehoe <kehoea(a)parhasard.net>
> +
> + * doc.c (Fbuilt_in_symbol_file):
> + Take a new TYPE argument, specifying whether the function or
> + variable definition of the symbol should be searched for.
> + Handle built-in macros correctly.
> +
> 2007-12-24 Aidan Kehoe <kehoea(a)parhasard.net>
>
> * event-xlike-inc.c (x_keysym_to_character):
> diff -r c9ab656691c04f41c53df820c0a83e4ee36f5177 -r
69e6352406f0393738f99a6d250c351e7016f47b src/doc.c
> --- a/src/doc.c Thu Dec 27 13:22:26 2007 +0100
> +++ b/src/doc.c Sun Dec 30 15:33:13 2007 +0100
> @@ -37,7 +37,7 @@ Boston, MA 02111-1307, USA. */
>
> Lisp_Object Vinternal_doc_file_name;
>
> -Lisp_Object QSsubstitute;
> +Lisp_Object QSsubstitute, Qdefvar;
>
> /* Work out what source file a function or variable came from, taking the
> information from the documentation file. */
> @@ -499,21 +499,28 @@ weird_doc (Lisp_Object sym, const CIbyte
> weirdness, type, XSTRING_DATA (XSYMBOL (sym)->name), pos);
> }
>
> -DEFUN ("built-in-symbol-file", Fbuilt_in_symbol_file, 1, 1, 0, /*
> +DEFUN ("built-in-symbol-file", Fbuilt_in_symbol_file, 1, 2, 0, /*
> Return the C source file built-in symbol SYM comes from.
> Don't use this. Use the more general `symbol-file' (q.v.) instead.
> +
> +If TYPE is nil or omitted, any kind of definition is acceptable.
> +If TYPE is `defun', then function, subr, special form or macro definitions
> +are acceptable.
> +If TYPE is `defvar', then variable definitions are acceptable.
> */
> - (symbol))
> + (symbol, type))
> {
> /* This function can GC */
> Lisp_Object fun;
> Lisp_Object filename = Qnil;
>
> - if (EQ(Ffboundp(symbol), Qt))
> + if (EQ(Ffboundp(symbol), Qt) && (EQ(type, Qnil) || EQ(type, Qdefun)))
> {
> fun = Findirect_function (symbol);
>
> - if (SUBRP (fun))
> + if (SUBRP (fun) || (CONSP(fun) && (EQ (Qmacro, Fcar_safe (fun)))
> + && (fun = Fcdr_safe (fun))
> + && (SUBRP (fun))))
> {
> if (XSUBR (fun)->doc == 0)
> return Qnil;
> @@ -529,7 +536,7 @@ Don't use this. Use the more general `s
> (make_int (- (EMACS_INT) XSUBR (fun)->doc));
> }
> }
> - else if (EQ(Fboundp(symbol), Qt))
> + else if (EQ(Fboundp(symbol), Qt) && (EQ(type, Qnil) || EQ(type,
Qdefvar)))
> {
> Lisp_Object doc_offset = Fget (symbol, Qvariable_documentation, Qnil);
>
> @@ -1273,6 +1280,8 @@ syms_of_doc (void)
> DEFSUBR (Fsnarf_documentation);
> DEFSUBR (Fverify_documentation);
> DEFSUBR (Fsubstitute_command_keys);
> +
> + DEFSYMBOL (Qdefvar);
> }
>
> void
>
>
> _______________________________________________
> XEmacs-Patches mailing list
> XEmacs-Patches(a)xemacs.org
>
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches
--
¿Dónde estará ahora mi sobrino Yoghurtu Nghé, que tuvo que huir
precipitadamente de la aldea por culpa de la escasez de rinocerontes?
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org