mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-12 14:30:42 -08:00
Restructure the reader to be nonrecursive so that it is not limited by
the C stack or crashes Emacs when reading deeply nested data.
This also improves performance.
A few minor bugs were fixed:
- (a .{NBSP}b) where {NBSP} is a non-breaking space (U+00A0) is now
the dotted pair (a . b), not the 3-element list (a \. b), since U+00A0
is treated as whitespace everywhere else.
- #_ with no symbol following is now equivalent to ## (empty interned
symbol), not #: (empty uninterned symbol).
* src/alloc.c (garbage_collect): Call mark_lread.
* src/lread.c (readevalloop): Use read0 instead of read_list.
(stackbufsize): Increase to 1024, now that read0 isn't recursive.
(invalid_radix_integer): Buffer overflow check.
(read1, read_list, read_vector): Remove.
(read_char_literal, read_string_literal)
(hash_table_from_plist, record_from_list, vector_from_rev_list)
(bytecode_from_rev_list, char_table_from_rev_list)
(sub_char_table_from_rev_list, string_props_from_rev_list)
(read_bool_vector, skip_lazy_string, symbol_char_span)
(skip_space_and_comments)
(enum read_entry_type, struct read_stack_entry, struct read_stack)
(rdstack, mark_lread, read_stack_top, read_stack_pop)
(read_stack_empty_p, grow_read_stack, read_stack_push): New.
(read0): Rewrite to be nonrecursive.
* test/src/lread-tests.el (lread-deeply-nested, lread-misc): New tests.
|
||
|---|---|---|
| .. | ||
| comp-resources | ||
| emacs-module-resources | ||
| lread-resources | ||
| regex-resources | ||
| syntax-resources | ||
| alloc-tests.el | ||
| buffer-tests.el | ||
| callint-tests.el | ||
| callproc-tests.el | ||
| casefiddle-tests.el | ||
| character-tests.el | ||
| charset-tests.el | ||
| chartab-tests.el | ||
| cmds-tests.el | ||
| coding-tests.el | ||
| comp-tests.el | ||
| data-tests.el | ||
| decompress-tests.el | ||
| doc-tests.el | ||
| editfns-tests.el | ||
| emacs-module-tests.el | ||
| emacs-tests.el | ||
| eval-tests.el | ||
| fileio-tests.el | ||
| filelock-tests.el | ||
| floatfns-tests.el | ||
| fns-tests.el | ||
| font-tests.el | ||
| image-tests.el | ||
| indent-tests.el | ||
| inotify-tests.el | ||
| json-tests.el | ||
| keyboard-tests.el | ||
| keymap-tests.el | ||
| lcms-tests.el | ||
| lread-tests.el | ||
| marker-tests.el | ||
| minibuf-tests.el | ||
| print-tests.el | ||
| process-tests.el | ||
| regex-emacs-tests.el | ||
| search-tests.el | ||
| sqlite-tests.el | ||
| syntax-tests.el | ||
| textprop-tests.el | ||
| thread-tests.el | ||
| timefns-tests.el | ||
| undo-tests.el | ||
| xdisp-tests.el | ||
| xfaces-tests.el | ||
| xml-tests.el | ||