Files
emacs/lisp
Paul Eggert 083940a93d Fix core dump in substitute-object-in-subtree
Without this fix, (substitute-object-in-subtree #0=(#0# 'a) 'a)
would dump core, since the C code would recurse indefinitely through
the infinite structure.  This patch adds an argument to the function,
and renames it to lread--substitute-object-in-subtree as the function
is not general-purpose and should not be relied on by outside code.
See Bug#23660.
* src/intervals.c (traverse_intervals_noorder): ARG is now void *,
not Lisp_Object, so that callers need not cons unnecessarily.
All callers changed.  Also, remove related #if-0 code that was
“temporary” in the early 1990s and has not been compilable for
some time.
* src/lread.c (struct subst): New type, for substitution closure data.
(seen_list): Remove this static var, as this info is now part of
struct subst.  All uses removed.
(Flread__substitute_object_in_subtree): Rename from
Fsubstitute_object_in_subtree, and give it a 3rd arg so that it
doesn’t dump core when called from the top level with an
already-cyclic structure.  All callers changed.
(SUBSTITUTE): Remove.  All callers expanded and then simplified.
(substitute_object_recurse): Take a single argument SUBST rather
than a pair OBJECT and PLACEHOLDER, so that its address can be
passed around as part of a closure; this avoids the need for an
AUTO_CONS call.  All callers changed.  If the COMPLETED component
is t, treat every subobject as potentially circular.
(substitute_in_interval): Take a struct subst * rather than a
Lisp_Object, for the closure data.  All callers changed.
* test/src/lread-tests.el (lread-lread--substitute-object-in-subtree):
New test, to check that the core dump does not reoccur.
2017-07-09 16:05:13 -07:00
..
2017-07-06 00:24:56 -07:00
2017-06-21 08:12:10 +00:00
2017-01-01 01:10:47 -08:00
2017-05-30 08:29:34 -07:00
2017-07-05 17:03:42 +02:00
2017-05-07 13:22:34 +02:00
2017-07-06 00:24:56 -07:00
2017-04-08 11:36:56 -04:00
2017-06-06 15:08:41 -04:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-07-06 00:24:56 -07:00
2016-12-31 19:42:26 -08:00
2017-07-02 11:41:58 +02:00
2016-12-31 19:42:26 -08:00
2017-01-29 19:34:35 +01:00
2017-06-13 14:31:53 +09:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-06-05 20:33:55 -04:00
2017-05-06 18:38:18 -07:00
2017-05-06 18:38:18 -07:00
2017-06-07 14:27:21 -04:00
2017-07-06 00:24:56 -07:00
2017-05-06 18:30:14 -07:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2017-02-21 15:11:56 -05:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-06-26 14:22:34 +09:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-07-09 20:35:57 +03:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-07-08 11:08:55 +03:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00
2017-05-21 23:03:01 +02:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-07-01 06:26:53 -04:00
2016-12-31 19:42:26 -08:00
2017-04-26 12:51:48 -04:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-03 18:34:13 -05:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-07-06 00:24:56 -07:00
2017-04-27 00:04:54 -04:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-03-19 12:34:04 -07:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00
2017-01-04 14:21:38 -05:00
2016-12-31 19:42:26 -08:00
2017-05-31 20:32:31 +02:00
2017-02-18 11:32:45 +02:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-02-20 18:08:48 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-05-19 15:20:59 +03:00
2016-12-31 19:42:26 -08:00
2017-07-07 18:13:15 -04:00
2017-01-01 01:10:47 -08:00
2016-12-31 19:42:26 -08:00
2016-12-31 19:42:26 -08:00
2017-05-07 13:22:34 +02:00
2016-12-31 19:42:26 -08:00
2017-01-01 01:10:47 -08:00
2017-01-01 01:10:47 -08:00

This directory contains source code for the parts of Emacs that are
written in Emacs Lisp.  *.el files are Emacs Lisp source, and the
corresponding *.elc files are byte-compiled versions.  Byte-compiled
files are architecture-independent.

The term subdirectory contains Lisp files that customize Emacs for
certain terminal types.  When Emacs starts, it checks the TERM
environment variable to get the terminal type and loads
'term/${TERM}.el' if it exists.

The other subdirectories hold Lisp packages grouped by their general
purpose.