From 590130fb19e1f433965c421d98fedeb2d7c33310 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 27 Dec 2010 12:55:38 -0500 Subject: [PATCH] * src/eval.c (Fdefvar): Record specialness before computing initial value. * lisp/emacs-lisp/bytecomp.el (byte-compile-track-mouse): Don't use #'. --- lisp/ChangeLog | 4 ++++ lisp/emacs-lisp/bytecomp.el | 18 ++++++++++++++++-- src/ChangeLog | 4 ++++ src/eval.c | 7 ++++--- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 87794ceb5d2..7e3982a5a70 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2010-12-27 Stefan Monnier + + * emacs-lisp/bytecomp.el (byte-compile-track-mouse): Don't use #'. + 2010-12-15 Stefan Monnier * emacs-lisp/edebug.el (edebug-eval-defun, edebug-eval): diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 0f7018b9b64..82b5ed3367d 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -441,6 +441,7 @@ specify different fields to sort on." ;(defvar byte-compile-debug nil) (defvar byte-compile-debug t) +(setq debug-on-error t) ;; (defvar byte-compile-overwrite-file t ;; "If nil, old .elc files are deleted before the new is saved, and .elc @@ -4084,8 +4085,21 @@ if LFORMINFO is nil (meaning all bindings are dynamic)." (defun byte-compile-track-mouse (form) (byte-compile-form - `(funcall #'(lambda nil - (track-mouse ,@(byte-compile-top-level-body (cdr form))))))) + ;; Use quote rather that #' here, because we don't want to go + ;; through the body again, which would lead to an infinite recursion: + ;; "byte-compile-track-mouse" (0xbffc98e4) + ;; "byte-compile-form" (0xbffc9c54) + ;; "byte-compile-top-level" (0xbffc9fd4) + ;; "byte-compile-lambda" (0xbffca364) + ;; "byte-compile-closure" (0xbffca6d4) + ;; "byte-compile-function-form" (0xbffcaa44) + ;; "byte-compile-form" (0xbffcadc0) + ;; "mapc" (0xbffcaf74) + ;; "byte-compile-funcall" (0xbffcb2e4) + ;; "byte-compile-form" (0xbffcb654) + ;; "byte-compile-track-mouse" (0xbffcb9d4) + `(funcall '(lambda nil + (track-mouse ,@(byte-compile-top-level-body (cdr form))))))) (defun byte-compile-condition-case (form) (let* ((var (nth 1 form)) diff --git a/src/ChangeLog b/src/ChangeLog index 2de6a5ed66c..f7a3fcc8b1b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2010-12-27 Stefan Monnier + + * eval.c (Fdefvar): Record specialness before computing initial value. + 2010-12-15 Stefan Monnier * eval.c (Feval): Add `lexical' argument. Adjust callers. diff --git a/src/eval.c b/src/eval.c index 7104a8a8396..36acca01c8b 100644 --- a/src/eval.c +++ b/src/eval.c @@ -855,6 +855,10 @@ usage: (defvar SYMBOL &optional INITVALUE DOCSTRING) */) tem = Fdefault_boundp (sym); if (!NILP (tail)) { + if (SYMBOLP (sym)) + /* Do it before evaluating the initial value, for self-references. */ + XSYMBOL (sym)->declared_special = 1; + if (SYMBOL_CONSTANT_P (sym)) { /* For upward compatibility, allow (defvar :foo (quote :foo)). */ @@ -893,9 +897,6 @@ usage: (defvar SYMBOL &optional INITVALUE DOCSTRING) */) Fput (sym, Qvariable_documentation, tem); } LOADHIST_ATTACH (sym); - - if (SYMBOLP (sym)) - XSYMBOL (sym)->declared_special = 1; } else if (!NILP (Vinternal_interpreter_environment) && !XSYMBOL (sym)->declared_special) -- 2.39.5