From 0ac306045f2e03289032f4303e3c86dcbca89cc2 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 15 Jun 2011 14:36:00 -0400 Subject: [PATCH] * src/eval.c (Fdefvaralias): Also mark the target as variable-special-p. --- lisp/emacs-lisp/smie.el | 20 ++++++++++++++++++++ src/ChangeLog | 4 ++++ src/eval.c | 1 + 3 files changed, 25 insertions(+) diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el index 2701d6b940b..17cc5668b5f 100644 --- a/lisp/emacs-lisp/smie.el +++ b/lisp/emacs-lisp/smie.el @@ -84,6 +84,26 @@ ;; - Maybe accept two juxtaposed non-terminals in the BNF under the condition ;; that the first always ends with a terminal, or that the second always ;; starts with a terminal. +;; - Permit EBNF-style notation. +;; - If the grammar has conflicts, the only way is to make the lexer return +;; different tokens for the different cases. This extra work performed by +;; the lexer can be costly and unnecessary: we perform this extra work every +;; time we find the conflicting token, regardless of whether or not the +;; difference between the various situations is relevant to the current +;; situation. E.g. we may try to determine whether a ";" is a ";-operator" +;; or a ";-separator" in a case where we're skipping over a "begin..end" pair +;; where the difference doesn't matter. For frequently occurring tokens and +;; rarely occurring conflicts, this can be a significant performance problem. +;; We could try and let the lexer return a "set of possible tokens +;; plus a refinement function" and then let parser call the refinement +;; function if needed. +;; - Make it possible to better specify the behavior in the face of +;; syntax errors. IOW provide some control over the choice of precedence +;; levels within the limits of the constraints. E.g. make it possible for +;; the grammar to specify that "begin..end" has lower precedence than +;; "Module..EndModule", so that if a "begin" is missing, scanning from the +;; "end" will stop at "Module" rather than going past it (and similarly, +;; scanning from "Module" should not stop at a spurious "end"). ;;; Code: diff --git a/src/ChangeLog b/src/ChangeLog index c72311c305f..821e4090cfd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2011-06-15 Stefan Monnier + + * eval.c (Fdefvaralias): Also mark the target as variable-special-p. + 2011-06-14 Jan Djärv * xfns.c (x_set_scroll_bar_default_width): Remove argument to diff --git a/src/eval.c b/src/eval.c index ef5abac17ae..d6f9a9ede81 100644 --- a/src/eval.c +++ b/src/eval.c @@ -772,6 +772,7 @@ The return value is BASE-VARIABLE. */) } sym->declared_special = 1; + XSYMBOL (base_variable)->declared_special = 1; sym->redirect = SYMBOL_VARALIAS; SET_SYMBOL_ALIAS (sym, XSYMBOL (base_variable)); sym->constant = SYMBOL_CONSTANT_P (base_variable); -- 2.11.4.GIT