1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-02-04 14:40:54 -08:00
emacs/test/src
Noam Postavsky 1d47d777ef Allow &rest' or &optional' without following variable (Bug#29165)
This is sometimes convenient when writing macros, so that the empty
variable case doesn't need to be handled specially.  Older versions of
Emacs accepted this in some cases (especially the interpreter in Emacs
25 and below was very accepting).

                            |   interpreted/compiled   |
| arglist                   | 25 & earlier | 26  | 27  |
|---------------------------+--------------+-----+-----|
| (&rest)                   | y/n          | n/n | y/y |
| (&rest &rest)             | y/n          | n/n | n/n |
| (&rest &rest x)           | y/n          | n/n | n/n |
| (&rest x &rest)           | y/n          | n/n | n/n |
| (&rest x &rest y)         | y/n          | n/n | n/n |
|---------------------------+--------------+-----+-----|
| (&optional)               | y/n          | n/n | y/y |
| (&optional &optional)     | y/n          | n/n | n/n |
| (&optional x &optional)   | y/n          | n/n | n/n |
| (&optional x &optional y) | y/y          | n/n | n/n |
|---------------------------+--------------+-----+-----|
| (&optional &rest)         | y/n          | n/n | y/y |
| (&optional x &rest)       | y/n          | n/n | y/y |
| (&optional &rest y)       | y/y          | n/n | y/y |
|---------------------------+--------------+-----+-----|
| (&rest &optional)         | y/n          | n/n | n/n |
| (&rest &optional y)       | y/n          | n/n | n/n |
| (&rest x &optional y)     | y/n          | n/n | n/n |

The values in the table above can be produced with the following code:

(with-current-buffer (get-buffer-create "*ck-args*")
  (erase-buffer)
  (dolist (arglist '((&rest)
                     (&rest &rest)
                     (&rest &rest x)
                     (&rest x &rest)
                     (&rest x &rest y)
                     (&optional)
                     (&optional &optional)
                     (&optional x &optional)
                     (&optional x &optional y)
                     (&optional &rest)
                     (&optional x &rest)
                     (&optional &rest y)
                     (&rest &optional)
                     (&rest &optional y)
                     (&rest x &optional y)))
    (insert
     (format "%c/%c\n"
             (condition-case err
                 (progn (funcall `(lambda ,arglist 'ok))
                        ?y)
               (error ?n))
             (condition-case err
                 (progn (byte-compile-check-lambda-list arglist)
                        ?y)
               (error ?n))))
    (display-buffer (current-buffer))))

* src/eval.c (funcall_lambda):
* lisp/emacs-lisp/bytecomp.el (byte-compile-check-lambda-list): Don't
check for missing variables after `&rest' and `&optional'.
* test/src/eval-tests.el (eval-tests--bugs-24912-and-24913)
(eval-tests-accept-empty-optional-rest): Update tests accordingly.
* etc/NEWS: Update announcement accordingly.
* doc/lispref/functions.texi (Argument List): Update manual to
indicate that variable names are optional.
2018-03-25 07:56:35 -04:00
..
regex-resources
alloc-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
buffer-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
callint-tests.el Add unit test for Bug#30005. 2018-01-23 23:41:15 +01:00
callproc-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
casefiddle-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
charset-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
chartab-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
cmds-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
coding-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
data-tests.el Fix bug#30846, along with misc cleanups found along the way 2018-03-23 11:29:06 -04:00
decompress-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
doc-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
editfns-tests.el Add tests for Bug#30408 2018-03-21 12:11:52 -07:00
emacs-module-tests.el Port emacs-module-tests to 32-bit Emacs 2018-03-22 09:33:33 -07:00
eval-tests.el Allow &rest' or &optional' without following variable (Bug#29165) 2018-03-25 07:56:35 -04:00
fileio-tests.el Merge from origin/emacs-26 2018-01-01 01:13:04 -08:00
floatfns-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
fns-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
font-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
inotify-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
json-tests.el Quieten --without-json compilation of json-tests.el 2018-03-09 16:38:02 -05:00
keyboard-tests.el Update copyright year to 2018 2018-01-01 01:25:56 -08:00
keymap-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
lcms-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
lread-tests.el Revert "Signal error for symbol names with strange quotes (Bug#2967)" 2018-01-28 10:49:51 -05:00
marker-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
minibuf-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
print-tests.el Fix round tripping of read->print for symbols with strange quotes 2018-01-28 10:43:01 -05:00
process-tests.el Inherit query-on-exit flag to stderr process (Bug#30031) 2018-01-10 15:43:52 +01:00
regex-tests.el Raise limit of regexp repetition (Bug#24914) 2018-01-26 20:49:44 -05:00
syntax-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
textprop-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
thread-tests.el Add some test skip conditions 2018-01-17 13:41:07 -05:00
undo-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00
xml-tests.el Update copyright year to 2018 2018-01-01 00:57:59 -08:00