From: Stefan Monnier Date: Sun, 16 Nov 2014 04:59:50 +0000 (-0500) Subject: * lisp/emacs-lisp/backquote.el (backquote-process): Optimize away the ,' case. X-Git-Tag: emacs-25.0.90~2635^2~461 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=86009dd5d886f1101358990e4f8f69a5d1467eb8;p=emacs.git * lisp/emacs-lisp/backquote.el (backquote-process): Optimize away the ,' case. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5eb4e3a8a7a..634412ec989 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2014-11-16 Stefan Monnier + + * emacs-lisp/backquote.el (backquote-process): Optimize away the ,' case. + 2014-11-15 Lars Magne Ingebrigtsen * net/eww.el (eww-search-words): Mention `eww-search-prefix'. @@ -11,8 +15,8 @@ * progmodes/python.el (python-shell-font-lock-kill-buffer): (python-shell-font-lock-with-font-lock-buffer) - (python-shell-get-buffer, python-ffap-module-path): Use - `derived-mode-p' instead of equality test on `major-mode'. + (python-shell-get-buffer, python-ffap-module-path): + Use `derived-mode-p' instead of equality test on `major-mode'. 2014-11-14 Fabián Ezequiel Gallina diff --git a/lisp/emacs-lisp/backquote.el b/lisp/emacs-lisp/backquote.el index a497acd637e..5cecbcd4335 100644 --- a/lisp/emacs-lisp/backquote.el +++ b/lisp/emacs-lisp/backquote.el @@ -148,16 +148,19 @@ LEVEL is only used internally and indicates the nesting level: (t (list 'apply '(function vector) (cdr n)))))))) ((atom s) + ;; FIXME: Use macroexp-quote! (cons 0 (if (or (null s) (eq s t) (not (symbolp s))) s (list 'quote s)))) ((eq (car s) backquote-unquote-symbol) (if (<= level 0) - (if (> (length s) 2) - ;; We could support it with: (cons 2 `(list . ,(cdr s))) - ;; But let's not encourage such uses. - (error "Multiple args to , are not supported: %S" s) - (cons 1 (nth 1 s))) + (cond + ((> (length s) 2) + ;; We could support it with: (cons 2 `(list . ,(cdr s))) + ;; But let's not encourage such uses. + (error "Multiple args to , are not supported: %S" s)) + (t (cons (if (eq (car-safe (nth 1 s)) 'quote) 0 1) + (nth 1 s)))) (backquote-delay-process s (1- level)))) ((eq (car s) backquote-splice-symbol) (if (<= level 0) @@ -215,9 +218,7 @@ LEVEL is only used internally and indicates the nesting level: ;; Tack on any initial elements. (if firstlist (setq expression (backquote-listify firstlist (cons 1 expression)))) - (if (eq (car-safe expression) 'quote) - (cons 0 (list 'quote s)) - (cons 1 expression)))))) + (cons (if (eq (car-safe expression) 'quote) 0 1) expression))))) ;; backquote-listify takes (tag . structure) pairs from backquote-process ;; and decides between append, list, backquote-list*, and cons depending