From: Vincent Belaïche Date: Fri, 24 Oct 2014 23:02:25 +0000 (+0200) Subject: * ses.el (macroexp): add require for this package, so that function X-Git-Tag: emacs-25.0.90~2635^2~658 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b5dc75aed71ecb2310a6689e2f7082243aa7e4ab;p=emacs.git * ses.el (macroexp): add require for this package, so that function `ses--cell gets macroexp-quote. (ses--cell): makes formula a macroexp-quote of value when formula is nil. The rationale of this changr is to allow in the future shorter SES files, e.g. we could have only `(ses-cell A1 1.0)' instead of `(ses-cell A1 1.0 1.0 nil REFLIST)'. In such a case reference list REFLIST would be re-computed after load --- thus trading off load time against file size. * emacs-lisp/package.el (package--alist-to-plist-args): use macroexp-quote instead of a lambda expression which has the same content as macroexp-quote. (macroexp): add require for this package, so that function `package--alist-to-plist-args' gets macroexp-quote. * emacs-lisp/macroexp.el (macroexp-quote): new defun. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index da6c936810a..da3ce647cf7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,22 @@ +2014-10-24 Vincent Belaïche + + * ses.el (macroexp): add require for this package, so that function + `ses--cell gets macroexp-quote. + (ses--cell): makes formula a macroexp-quote of value when formula + is nil. The rationale of this changr is to allow in the future + shorter SES files, e.g. we could have only `(ses-cell A1 1.0)' + instead of `(ses-cell A1 1.0 1.0 nil REFLIST)'. In such a case + reference list REFLIST would be re-computed after load --- thus + trading off load time against file size. + + * emacs-lisp/package.el (package--alist-to-plist-args): use + macroexp-quote instead of a lambda expression which has the same + content as macroexp-quote. + (macroexp): add require for this package, so that function + `package--alist-to-plist-args' gets macroexp-quote. + + * emacs-lisp/macroexp.el (macroexp-quote): new defun. + 2014-10-24 Stefan Monnier * term/ns-win.el (ns-store-cut-buffer-internal) diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el index 44727daf76a..b3bcc2d4078 100644 --- a/lisp/emacs-lisp/macroexp.el +++ b/lisp/emacs-lisp/macroexp.el @@ -370,6 +370,18 @@ symbol itself." "Return non-nil if EXP can be copied without extra cost." (or (symbolp exp) (macroexp-const-p exp))) +(defun macroexp-quote (v) + "Returns an expression E such that `(eval E)' is V. + +E is either V or (quote V) depending on whether V evaluates to +itself or not." + (if (and (not (consp v)) + (or (keywordp v) + (not (symbolp v)) + (memq v '(nil t)))) + v + (list 'quote v))) + ;;; Load-time macro-expansion. ;; Because macro-expansion used to be more lazy, eager macro-expansion diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index b8370fde337..e375a1e2301 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -165,6 +165,7 @@ (eval-when-compile (require 'epg)) ;For setf accessors. (require 'tabulated-list) +(require 'macroexp) (defgroup package nil "Manager for Emacs Lisp packages." @@ -723,12 +724,7 @@ untar into a directory named DIR; otherwise, signal an error." nil pkg-file nil 'silent)))) (defun package--alist-to-plist-args (alist) - (mapcar (lambda (x) - (if (and (not (consp x)) - (or (keywordp x) - (not (symbolp x)) - (memq x '(nil t)))) - x `',x)) + (mapcar 'macroexp-quote (apply #'nconc (mapcar (lambda (pair) (list (car pair) (cdr pair))) alist)))) (defun package-unpack (pkg-desc) diff --git a/lisp/ses.el b/lisp/ses.el index 541c1e19769..09001fdb358 100644 --- a/lisp/ses.el +++ b/lisp/ses.el @@ -491,7 +491,8 @@ Safety-checking for FORMULA and PRINTER are deferred until first use." (let ((rowcol (ses-sym-rowcol sym))) (ses-formula-record formula) (ses-printer-record printer) - (unless formula (setq formula value)) + (unless (or formula (eq formula '*skip*)) + (setq formula (macroexp-quote value))) (or (atom formula) (eq safe-functions t) (setq formula `(ses-safe-formula ,formula)))