<feed xmlns='http://www.w3.org/2005/Atom'>
<title>emacs/test/src/eval-tests.el, branch feature/windows-with-utils</title>
<subtitle>Emacs is the extensible, customizable, self-documenting real-time display editor. 
</subtitle>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/'/>
<entry>
<title>Remove support for destructive splicing in elisp</title>
<updated>2019-09-26T16:37:23+00:00</updated>
<author>
<name>Stefan Kangas</name>
</author>
<published>2019-09-13T23:49:23+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=3cf8f9b1ec1a079f6cd1a127259414dcb0cf8672'/>
<id>3cf8f9b1ec1a079f6cd1a127259414dcb0cf8672</id>
<content type='text'>
* src/lread.c (read1): Don't handle destructive splicing in
backquote expressions (e.g. ",.&lt;identifier&gt;").  (Bug#19790)
(syms_of_lread): Remove Qcomma_dot.
* src/print.c (print_object): Don't check for Qcomma_dot.
* test/src/eval-tests.el
(eval-tests-19790-backquote-comma-dot-substitution): New test.
* etc/NEWS: Announce it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* src/lread.c (read1): Don't handle destructive splicing in
backquote expressions (e.g. ",.&lt;identifier&gt;").  (Bug#19790)
(syms_of_lread): Remove Qcomma_dot.
* src/print.c (print_object): Don't check for Qcomma_dot.
* test/src/eval-tests.el
(eval-tests-19790-backquote-comma-dot-substitution): New test.
* etc/NEWS: Announce it.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge from origin/emacs-26</title>
<updated>2019-01-01T01:57:29+00:00</updated>
<author>
<name>Paul Eggert</name>
</author>
<published>2019-01-01T01:57:29+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=ba809612c06bcabd05dcbaae79da39dcb0925992'/>
<id>ba809612c06bcabd05dcbaae79da39dcb0925992</id>
<content type='text'>
2fcf2df Fix copyright years by hand
26bed8b Update copyright year to 2019
2814292 Fix value of default frame height.  (Bug#33921)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
2fcf2df Fix copyright years by hand
26bed8b Update copyright year to 2019
2814292 Fix value of default frame height.  (Bug#33921)
</pre>
</div>
</content>
</entry>
<entry>
<title>Update copyright year to 2019</title>
<updated>2019-01-01T01:01:13+00:00</updated>
<author>
<name>Paul Eggert</name>
</author>
<published>2019-01-01T00:59:58+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=26bed8ba10eeaf0a340a8d0d760c5578dddec867'/>
<id>26bed8ba10eeaf0a340a8d0d760c5578dddec867</id>
<content type='text'>
Run 'TZ=UTC0 admin/update-copyright $(git ls-files)'.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Run 'TZ=UTC0 admin/update-copyright $(git ls-files)'.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add regression test for Bug#33014</title>
<updated>2018-10-31T04:17:34+00:00</updated>
<author>
<name>Gemini Lasswell</name>
</author>
<published>2018-10-31T04:15:51+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=c3cf85b1c186e13c2d588aa35ffa57981ca481d7'/>
<id>c3cf85b1c186e13c2d588aa35ffa57981ca481d7</id>
<content type='text'>
Backport from master.
* test/src/eval-tests.el:
(eval-tests-byte-code-being-evaluated-is-protected-from-gc): New test.
(eval-tests-33014-var): New variable.
(eval-tests-33014-func, eval-tests-33014-redefine): New functions.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Backport from master.
* test/src/eval-tests.el:
(eval-tests-byte-code-being-evaluated-is-protected-from-gc): New test.
(eval-tests-33014-var): New variable.
(eval-tests-33014-func, eval-tests-33014-redefine): New functions.
</pre>
</div>
</content>
</entry>
<entry>
<title>Keep a stack reference to bytecode objects being executed (Bug#33014)</title>
<updated>2018-10-29T18:05:00+00:00</updated>
<author>
<name>Gemini Lasswell</name>
</author>
<published>2018-10-14T19:12:04+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=0e484c66fd63877230c3dfa97f2ce9dda71ad88b'/>
<id>0e484c66fd63877230c3dfa97f2ce9dda71ad88b</id>
<content type='text'>
* src/eval.c (Ffuncall): Make local variable 'fun' volatile.
* test/src/eval-tests.el
(eval-tests-byte-code-being-evaluated-is-protected-from-gc):
Add regression test for Bug#33014.
(eval-tests-33014-var): New variable.
(eval-tests-33014-func, eval-tests-33014-redefine): New functions.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* src/eval.c (Ffuncall): Make local variable 'fun' volatile.
* test/src/eval-tests.el
(eval-tests-byte-code-being-evaluated-is-protected-from-gc):
Add regression test for Bug#33014.
(eval-tests-33014-var): New variable.
(eval-tests-33014-func, eval-tests-33014-redefine): New functions.
</pre>
</div>
</content>
</entry>
<entry>
<title>Give warning if losing value to defvaralias (Bug#5950)</title>
<updated>2018-06-12T11:40:33+00:00</updated>
<author>
<name>Noam Postavsky</name>
</author>
<published>2018-05-25T12:40:55+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=c912db0836f6975519dea57fb0a4adc2988da1b1'/>
<id>c912db0836f6975519dea57fb0a4adc2988da1b1</id>
<content type='text'>
* src/eval.c (Fdefvaralias): Call `display-warning' if the alias
target has a non-eq value to the variable being aliased.
* test/src/eval-tests.el (defvaralias-overwrite-warning): New test.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* src/eval.c (Fdefvaralias): Call `display-warning' if the alias
target has a non-eq value to the variable being aliased.
* test/src/eval-tests.el (defvaralias-overwrite-warning): New test.
</pre>
</div>
</content>
</entry>
<entry>
<title>Avoid undefined behavior in 'defvar' (Bug#31072)</title>
<updated>2018-04-16T06:50:06+00:00</updated>
<author>
<name>Philipp Stephani</name>
</author>
<published>2018-04-16T06:45:27+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=9f2d21ca536ea7ca1da98e7bd57ae535ab394997'/>
<id>9f2d21ca536ea7ca1da98e7bd57ae535ab394997</id>
<content type='text'>
* src/eval.c (Fdefvar): Check that first argument is a symbol.
* test/src/eval-tests.el (defvar/bug31072): New unit test.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* src/eval.c (Fdefvar): Check that first argument is a symbol.
* test/src/eval-tests.el (defvar/bug31072): New unit test.
</pre>
</div>
</content>
</entry>
<entry>
<title>Allow `&amp;rest' or `&amp;optional' without following variable (Bug#29165)</title>
<updated>2018-03-25T11:56:35+00:00</updated>
<author>
<name>Noam Postavsky</name>
</author>
<published>2018-01-20T16:27:23+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=1d47d777ef24c0be9153b0a1c8ba21918fa1025a'/>
<id>1d47d777ef24c0be9153b0a1c8ba21918fa1025a</id>
<content type='text'>
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 &amp; earlier | 26  | 27  |
|---------------------------+--------------+-----+-----|
| (&amp;rest)                   | y/n          | n/n | y/y |
| (&amp;rest &amp;rest)             | y/n          | n/n | n/n |
| (&amp;rest &amp;rest x)           | y/n          | n/n | n/n |
| (&amp;rest x &amp;rest)           | y/n          | n/n | n/n |
| (&amp;rest x &amp;rest y)         | y/n          | n/n | n/n |
|---------------------------+--------------+-----+-----|
| (&amp;optional)               | y/n          | n/n | y/y |
| (&amp;optional &amp;optional)     | y/n          | n/n | n/n |
| (&amp;optional x &amp;optional)   | y/n          | n/n | n/n |
| (&amp;optional x &amp;optional y) | y/y          | n/n | n/n |
|---------------------------+--------------+-----+-----|
| (&amp;optional &amp;rest)         | y/n          | n/n | y/y |
| (&amp;optional x &amp;rest)       | y/n          | n/n | y/y |
| (&amp;optional &amp;rest y)       | y/y          | n/n | y/y |
|---------------------------+--------------+-----+-----|
| (&amp;rest &amp;optional)         | y/n          | n/n | n/n |
| (&amp;rest &amp;optional y)       | y/n          | n/n | n/n |
| (&amp;rest x &amp;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 '((&amp;rest)
                     (&amp;rest &amp;rest)
                     (&amp;rest &amp;rest x)
                     (&amp;rest x &amp;rest)
                     (&amp;rest x &amp;rest y)
                     (&amp;optional)
                     (&amp;optional &amp;optional)
                     (&amp;optional x &amp;optional)
                     (&amp;optional x &amp;optional y)
                     (&amp;optional &amp;rest)
                     (&amp;optional x &amp;rest)
                     (&amp;optional &amp;rest y)
                     (&amp;rest &amp;optional)
                     (&amp;rest &amp;optional y)
                     (&amp;rest x &amp;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 `&amp;rest' and `&amp;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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 &amp; earlier | 26  | 27  |
|---------------------------+--------------+-----+-----|
| (&amp;rest)                   | y/n          | n/n | y/y |
| (&amp;rest &amp;rest)             | y/n          | n/n | n/n |
| (&amp;rest &amp;rest x)           | y/n          | n/n | n/n |
| (&amp;rest x &amp;rest)           | y/n          | n/n | n/n |
| (&amp;rest x &amp;rest y)         | y/n          | n/n | n/n |
|---------------------------+--------------+-----+-----|
| (&amp;optional)               | y/n          | n/n | y/y |
| (&amp;optional &amp;optional)     | y/n          | n/n | n/n |
| (&amp;optional x &amp;optional)   | y/n          | n/n | n/n |
| (&amp;optional x &amp;optional y) | y/y          | n/n | n/n |
|---------------------------+--------------+-----+-----|
| (&amp;optional &amp;rest)         | y/n          | n/n | y/y |
| (&amp;optional x &amp;rest)       | y/n          | n/n | y/y |
| (&amp;optional &amp;rest y)       | y/y          | n/n | y/y |
|---------------------------+--------------+-----+-----|
| (&amp;rest &amp;optional)         | y/n          | n/n | n/n |
| (&amp;rest &amp;optional y)       | y/n          | n/n | n/n |
| (&amp;rest x &amp;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 '((&amp;rest)
                     (&amp;rest &amp;rest)
                     (&amp;rest &amp;rest x)
                     (&amp;rest x &amp;rest)
                     (&amp;rest x &amp;rest y)
                     (&amp;optional)
                     (&amp;optional &amp;optional)
                     (&amp;optional x &amp;optional)
                     (&amp;optional x &amp;optional y)
                     (&amp;optional &amp;rest)
                     (&amp;optional x &amp;rest)
                     (&amp;optional &amp;rest y)
                     (&amp;rest &amp;optional)
                     (&amp;rest &amp;optional y)
                     (&amp;rest x &amp;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 `&amp;rest' and `&amp;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.
</pre>
</div>
</content>
</entry>
<entry>
<title>Avoid memory corruption with specpdl overflow + edebug (Bug#30481)</title>
<updated>2018-02-17T03:13:34+00:00</updated>
<author>
<name>Noam Postavsky</name>
</author>
<published>2018-02-16T03:13:51+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=c352434ab89617b48c7c1f29342a22e5a5685504'/>
<id>c352434ab89617b48c7c1f29342a22e5a5685504</id>
<content type='text'>
If grow_specpdl fails due to outgrowing max_specpdl_size, it will
signal an error *before* growing the specpdl array.  Therefore, when
handling the signal, specpdl_ptr points past the end of the specpdl
array and any further use of of specpdl before unwinding (e.g., if
edebug binds signal-hook-function) will cause memory corruption.
* src/eval.c (signal_or_quit): Don't call `signal-hook-function' if
the specpdl_ptr is already past the end of the specpdl array.
* test/src/eval-tests.el (eval-tests--exceed-specbind-limit)
(eval-exceed-specbind-with-signal-hook): New test &amp; helper function.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If grow_specpdl fails due to outgrowing max_specpdl_size, it will
signal an error *before* growing the specpdl array.  Therefore, when
handling the signal, specpdl_ptr points past the end of the specpdl
array and any further use of of specpdl before unwinding (e.g., if
edebug binds signal-hook-function) will cause memory corruption.
* src/eval.c (signal_or_quit): Don't call `signal-hook-function' if
the specpdl_ptr is already past the end of the specpdl array.
* test/src/eval-tests.el (eval-tests--exceed-specbind-limit)
(eval-exceed-specbind-with-signal-hook): New test &amp; helper function.
</pre>
</div>
</content>
</entry>
<entry>
<title>Update copyright year to 2018</title>
<updated>2018-01-01T08:57:59+00:00</updated>
<author>
<name>Paul Eggert</name>
</author>
<published>2018-01-01T08:21:42+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=5c7dd8a783fa2503f042f6671279e5fca38c35cb'/>
<id>5c7dd8a783fa2503f042f6671279e5fca38c35cb</id>
<content type='text'>
Run admin/update-copyright.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Run admin/update-copyright.
</pre>
</div>
</content>
</entry>
</feed>
