]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/progmodes/gud.el: Use lexical-binding.
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 3 Mar 2015 19:23:49 +0000 (14:23 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 3 Mar 2015 19:23:49 +0000 (14:23 -0500)
Fixes: debbugs:19966
* lisp/emacs-lisp/gv.el (gv-ref): Warn about likely problematic cases.

lisp/ChangeLog
lisp/emacs-lisp/gv.el
lisp/progmodes/gud.el

index 63071734cf8e5bb33e2174a7f9827730a06b18e1..0cfe8eed02a847d65c40244d73130ac2689c2579 100644 (file)
@@ -1,3 +1,9 @@
+2015-03-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * progmodes/gud.el: Use lexical-binding (bug#19966).
+
+       * emacs-lisp/gv.el (gv-ref): Warn about likely problematic cases.
+
 2015-03-03  Daniel Colascione  <dancol@dancol.org>
 
        * emacs-lisp/generator.el: Make globals conform to elisp
@@ -6,8 +12,8 @@
        `cps-disable-atomic-optimization'.
        (cps--gensym): New macro; replaces `cl-gensym' throughout.
        (cps-generate-evaluator): Move the `iter-yield' local macro
-       definition here
-       (iter-defun, iter-lambda): from here.
+       definition here...
+       (iter-defun, iter-lambda): ...from here.
 
 2015-03-03  Artur Malabarba  <bruce.connor.am@gmail.com>
 
index 5d6e6e1b3724ff9e85f547dea76507cdf952392e..fae3bcb86f676b1521ff57766b512ee01da00a63 100644 (file)
@@ -493,9 +493,20 @@ This is like the `&' operator of the C language.
 Note: this only works reliably with lexical binding mode, except for very
 simple PLACEs such as (function-symbol 'foo) which will also work in dynamic
 binding mode."
-  (gv-letplace (getter setter) place
-    `(cons (lambda () ,getter)
-           (lambda (gv--val) ,(funcall setter 'gv--val)))))
+  (let ((code
+         (gv-letplace (getter setter) place
+           `(cons (lambda () ,getter)
+                  (lambda (gv--val) ,(funcall setter 'gv--val))))))
+    (if (or lexical-binding
+            ;; If `code' still starts with `cons' then presumably gv-letplace
+            ;; did not add any new let-bindings, so the `lambda's don't capture
+            ;; any new variables.  As a consequence, the code probably works in
+            ;; dynamic binding mode as well.
+            (eq (car-safe code) 'cons))
+        code
+      (macroexp--warn-and-return
+       "Use of gv-ref probably requires lexical-binding"
+       code))))
 
 (defsubst gv-deref (ref)
   "Dereference REF, returning the referenced value.
index 42c5b20a7b8901162662cd38e2185fcc76d14285..29a6dc63a6850b9b0d297b8c440ff0c561734eba 100644 (file)
@@ -1,4 +1,4 @@
-;;; gud.el --- Grand Unified Debugger mode for running GDB and other debuggers
+;;; gud.el --- Grand Unified Debugger mode for running GDB and other debuggers  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1992-1996, 1998, 2000-2015 Free Software Foundation,
 ;; Inc.