[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 7133f26: * lisp/progmodes/gud.el: Use lexical-bindi
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] master 7133f26: * lisp/progmodes/gud.el: Use lexical-binding. |
Date: |
Tue, 03 Mar 2015 19:23:59 +0000 |
branch: master
commit 7133f262bbd818509825a3317c91e91e62bd56fb
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>
* lisp/progmodes/gud.el: Use lexical-binding.
Fixes: debbugs:19966
* lisp/emacs-lisp/gv.el (gv-ref): Warn about likely problematic cases.
---
lisp/ChangeLog | 10 ++++++++--
lisp/emacs-lisp/gv.el | 17 ++++++++++++++---
lisp/progmodes/gud.el | 2 +-
3 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 6307173..0cfe8ee 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,9 @@
+2015-03-03 Stefan Monnier <address@hidden>
+
+ * progmodes/gud.el: Use lexical-binding (bug#19966).
+
+ * emacs-lisp/gv.el (gv-ref): Warn about likely problematic cases.
+
2015-03-03 Daniel Colascione <address@hidden>
* 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 <address@hidden>
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index 5d6e6e1..fae3bcb 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -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.
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 42c5b20..29a6dc6 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 7133f26: * lisp/progmodes/gud.el: Use lexical-binding.,
Stefan Monnier <=