]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/eval.c (eval_sub): Bind lexical-binding.
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 16 Aug 2012 01:18:07 +0000 (21:18 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 16 Aug 2012 01:18:07 +0000 (21:18 -0400)
* src/lread.c (Qlexical_binding): Make non-static.

src/ChangeLog
src/eval.c
src/lread.c

index 6e49dd44fdecd51f68ae68a320366dc18aceefb7..b203908cdb6367a0902c52dea4f4816fae049f4e 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * eval.c (eval_sub): Bind lexical-binding.
+       * lread.c (Qlexical_binding): Make non-static.
+
 2012-08-15  Jan Djärv  <jan.h.d@swipnet.se>
 
        * nsmenu.m (popupSession): Remove.
@@ -44,8 +49,8 @@
 
        Generalize and cleanup font subsystem checks.
        * font.h (FONT_DEBUG, font_assert): Remove.
-       * font.c, fontset.c, w32font.c, xfont.c, xftfont.c: Change
-       font_assert to eassert.  Use eassert where appropriate.
+       * font.c, fontset.c, w32font.c, xfont.c, xftfont.c:
+       Change font_assert to eassert.  Use eassert where appropriate.
 
 2012-08-15  Dmitry Antipov  <dmantipov@yandex.ru>
 
 
 2012-08-15  Chong Yidong  <cyd@gnu.org>
 
-       * gtkutil.c (xg_get_font): Rename from xg_get_font_name.  When
-       using the new font chooser, use gtk_font_chooser_get_font_desc to
-       extract the font descriptor instead of just the font name.  In
-       that case, return a font spec instead of a string.
+       * gtkutil.c (xg_get_font): Rename from xg_get_font_name.
+       When using the new font chooser, use gtk_font_chooser_get_font_desc to
+       extract the font descriptor instead of just the font name.
+       In that case, return a font spec instead of a string.
        (x_last_font_name): Move to this file from xfns.c.
 
        * xfns.c (Fx_select_font): The return value can also be a font
index b531f790cc5a7ec393f88be78df6703954024f6e..f3f14d60e1cd6df756aae2859528edc7b8d7fef0 100644 (file)
@@ -2217,7 +2217,19 @@ eval_sub (Lisp_Object form)
          goto retry;
        }
       if (EQ (funcar, Qmacro))
-       val = eval_sub (apply1 (Fcdr (fun), original_args));
+       {
+         ptrdiff_t count = SPECPDL_INDEX ();
+         extern Lisp_Object Qlexical_binding;
+         Lisp_Object exp;
+         /* Bind lexical-binding during expansion of the macro, so the
+            macro can know reliably if the code it outputs will be
+            interpreted using lexical-binding or not.  */
+         specbind (Qlexical_binding,
+                   NILP (Vinternal_interpreter_environment) ? Qnil : Qt);
+         exp = apply1 (Fcdr (fun), original_args);
+         unbind_to (count, Qnil);
+         val = eval_sub (exp);
+       }
       else if (EQ (funcar, Qlambda)
               || EQ (funcar, Qclosure))
        val = apply_lambda (fun, original_args);
index 72991e92bae189b6ad56ffbe2f0f3e141a778b7a..94ae4dd428283ed2cecec1ec132458c20e2e7bbc 100644 (file)
@@ -80,7 +80,7 @@ static Lisp_Object Qascii_character, Qload, Qload_file_name;
 Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction;
 static Lisp_Object Qinhibit_file_name_operation;
 static Lisp_Object Qeval_buffer_list;
-static Lisp_Object Qlexical_binding;
+Lisp_Object Qlexical_binding;
 static Lisp_Object Qfile_truename, Qdo_after_load_evaluation; /* ACM 2006/5/16 */
 
 /* Used instead of Qget_file_char while loading *.elc files compiled