* lisp/custom.el (defcustom): Obey lexical-binding.
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 25 Apr 2011 16:52:51 +0000 (13:52 -0300)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 25 Apr 2011 16:52:51 +0000 (13:52 -0300)
lisp/ChangeLog
lisp/custom.el

index ed4aafa..13c6bfa 100644 (file)
@@ -1,5 +1,7 @@
 2011-04-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * custom.el (defcustom): Obey lexical-binding.
+
        Fix octave-inf completion problems reported by Alexander Klimov.
        * progmodes/octave-inf.el (inferior-octave-mode-syntax-table):
        Inherit from octave-mode-syntax-table.
index 9673db4..8295777 100644 (file)
@@ -313,11 +313,19 @@ for more information."
   ;; It is better not to use backquote in this file,
   ;; because that makes a bootstrapping problem
   ;; if you need to recompile all the Lisp files using interpreted code.
-  (nconc (list 'custom-declare-variable
-              (list 'quote symbol)
-              (list 'quote value)
-              doc)
-        args))
+  `(custom-declare-variable
+    ',symbol
+    ,(if lexical-binding    ;FIXME: This is not reliable, but is all we have.
+         ;; The `default' arg should be an expression that evaluates to
+         ;; the value to use.  The use of `eval' for it is spread over
+         ;; many different places and hence difficult to eliminate, yet
+         ;; we want to make sure that the `value' expression is checked by the
+         ;; byte-compiler, and that lexical-binding is obeyed, so quote the
+         ;; expression with `lambda' rather than with `quote'.
+         `(list (lambda () ,value))
+       `',value)
+    ,doc
+    ,@args))
 
 ;;; The `defface' Macro.