From c98212f9e7cef496dded06eba4476033062c171f Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Mon, 21 Apr 2014 23:51:30 -0700 Subject: [PATCH] Minor bytecomp.el fixes * lisp/emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment): Use lambda function values, not quoted lambdas. (byte-compile-recurse-toplevel): Remove extraneous &optional. --- lisp/ChangeLog | 6 +++++- lisp/emacs-lisp/bytecomp.el | 40 ++++++++++++++++++------------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c4b1c05121..38871c7ff3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,11 @@ 2014-04-22 Daniel Colascione + * emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment): + Use lambda function values, not quoted lambdas. + (byte-compile-recurse-toplevel): Remove extraneous &optional. + * emacs-lisp/cl-macs.el - (cl-struct-sequence-type,cl-struct-slot-info): Declare pure. + (cl-struct-sequence-type, cl-struct-slot-info): Declare pure. (cl-struct-slot-value): Conditionally use aref or nth so that the compiler produces optimal code. diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 923d2067a4..9c52cc44eb 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -421,7 +421,7 @@ Filled in `cconv-analyse-form' but initialized and consulted here.") (defvar byte-compiler-error-flag) -(defun byte-compile-recurse-toplevel (form &optional non-toplevel-case) +(defun byte-compile-recurse-toplevel (form non-toplevel-case) "Implement `eval-when-compile' and `eval-and-compile'. Return the compile-time value of FORM." ;; Macroexpand (not macroexpand-all!) form at toplevel in case it @@ -439,28 +439,28 @@ Return the compile-time value of FORM." (funcall non-toplevel-case form))) (defconst byte-compile-initial-macro-environment - '( + `( ;; (byte-compiler-options . (lambda (&rest forms) ;; (apply 'byte-compiler-options-handler forms))) (declare-function . byte-compile-macroexpand-declare-function) - (eval-when-compile . (lambda (&rest body) - (let ((result nil)) - (byte-compile-recurse-toplevel - (cons 'progn body) - (lambda (form) - (setf result - (byte-compile-eval - (byte-compile-top-level - (byte-compile-preprocess form)))))) - (list 'quote result)))) - (eval-and-compile . (lambda (&rest body) - (byte-compile-recurse-toplevel - (cons 'progn body) - (lambda (form) - (let ((compiled (byte-compile-top-level - (byte-compile-preprocess form)))) - (eval compiled) - compiled)))))) + (eval-when-compile . ,(lambda (&rest body) + (let ((result nil)) + (byte-compile-recurse-toplevel + (cons 'progn body) + (lambda (form) + (setf result + (byte-compile-eval + (byte-compile-top-level + (byte-compile-preprocess form)))))) + (list 'quote result)))) + (eval-and-compile . ,(lambda (&rest body) + (byte-compile-recurse-toplevel + (cons 'progn body) + (lambda (form) + (let ((compiled (byte-compile-top-level + (byte-compile-preprocess form)))) + (eval compiled lexical-binding) + compiled)))))) "The default macro-environment passed to macroexpand by the compiler. Placing a macro here will cause a macro to have different semantics when expanded by the compiler as when expanded by the interpreter.") -- 2.20.1