1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-28 08:11:05 -08:00
Commit graph

41542 commits

Author SHA1 Message Date
Stefan Monnier
0f09808e52 Adjust remaining uses of NILP (HASH_HASH).
* src/json.c (lisp_to_json_toplevel_1):
* src/pdumper.c (dump_hash_table_stable_p, hash_table_contents):
* src/print.c (print, print_vectorlike):
* src/minibuf.c (Ftry_completion, Fall_completions, Ftest_completion):
Use `EQ (HASH_KEY, Qunbound)` instead of `NILP (HASH_HASH)`.
2019-07-26 16:55:59 -04:00
Stefan Monnier
0dc5a85a1c Don't dump the hash vector if it will need to be recomputed anyway
* src/fns.c (hash_table_rehash): Only set `hash` field at the end.
(sweep_weak_table): Only set slot of `hash` vector when that vector exists.
(Fhash_table_count): No need to hash_rehash_if_needed any more.

* src/lisp.h (hash_rehash_needed_p): Test the presence of `hash` instead.

* src/pdumper.c (check_hash_table_rehash, dump_hash_table):
Set `hash` to nil to indicate that the table needs to be rehashed.
2019-07-26 15:03:03 -04:00
Stefan Monnier
c74da403aa * src/fns.c: Use EQ (key, Qunbound) to check if a slot is in use
(make_hash_table): Use Qunbound for the key_and_value table.
(maybe_resize_hash_table): Set new key_and_value slots to Qunbound.
(hash_table_rehash): Don't bother copying the old table of hashes since
we're recomputing it completely.
(hash_table_rehash): Use hash_rehash_needed_p more.
(hash_put): Add assertion that the slot was indeed considered empty.
(hash_remove_from_table, hash_clear, sweep_weak_table): Set empty
slot's key to Qunbound.
(Fmaphash): Use `EQ (key, Qunbound)` to check if a slot is in use.

* src/lisp.h (struct Lisp_Hash_Table): Update comments.
2019-07-26 15:03:03 -04:00
Stefan Monnier
bbff294bf4 * src/fns.c (hash_index_size): New function, extracted from make_hash_table
(make_hash_table, maybe_resize_hash_table): Use it.

* src/pdumper.c (check_hash_table_rehash): Use hash_rehash_needed_p.
2019-07-26 15:03:03 -04:00
Stefan Monnier
2260483560 * src/fns.c (maybe_resize_hash_table): Obey rehash_size (bug#25743) 2019-07-26 13:15:50 -04:00
Paul Eggert
e3575ee4b2 Fix recently-introduced file-name-absolute-p typo
Fix a bug introduced in 2019-07-24T21:28:13!eggert@cs.ucla.edu.
* src/fileio.c (file_name_absolute_p):
~/foo is also absolute (Bug#36809).
* test/src/fileio-tests.el (fileio-tests--file-name-absolute-p):
Rename from fileio-tests--no-such-user and add more tests.
2019-07-26 09:48:57 -07:00
Lars Ingebrigtsen
1573cf98eb Clarify last-command-event doc string
* src/keyboard.c (syms_of_keyboard): Clarify the doc string
(bug#26626).
2019-07-26 11:34:15 +02:00
Paul Eggert
6204791728 Minor pdumper tweaks
* src/pdumper.c (dump_hash_table_stable_p):
Bool vectors and bignums are also stable keys.
(decode_emacs_reloc, drain_reloc_list, Fdump_emacs_portable):
(dump_bitset_clear): Simplify use of memset.
2019-07-25 23:18:51 -07:00
Paul Eggert
263b9680f3 Don't crash when parsing bad SVG data
Derived from a patch by Pip Cet (Bug#36773#47).
* src/image.c (svg_load_image): Work around librsvg 2.40.13 bug.
2019-07-25 14:34:07 -07:00
Eli Zaretskii
28d231dbbb Fix HarfBuzz support on MS-Windows
* src/w32uniscribe.c [HAVE_HARFBUZZ]: Include hb-ot.h.
(fn_hb_ot_font_set_funcs, hb_ot_font_set_funcs): Define.
(w32hb_get_font): Call hb_ot_font_set_funcs after creating the
hb_font_t object, to make the code work with versions of
HarfBuzz before 2.0.0.  Problem reported by Stephen Leake
<stephen_leake@stephe-leake.org>.  Solution suggested by
Khaled Hosny <dr.khaled.hosny@gmail.com> in
https://lists.freedesktop.org/archives/harfbuzz/2019-July/007412.html.
2019-07-25 19:47:56 +03:00
Paul Eggert
a5063aa8b1 Do not treat ~nosuchuser as an absolute file name
Derived from Ken Brown’s patch (Bug#36502#97).
* doc/lispref/files.texi (Relative File Names):
* etc/NEWS: Document this.
* src/fileio.c (user_homedir): New function.
(Fexpand_file_name, file_name_absolute_p): Use it.
(search_embedded_absfilename): Simplify via file_name_absolute_p.
* test/src/fileio-tests.el (fileio-tests--no-such-user): New test.
2019-07-24 14:33:02 -07:00
Paul Eggert
50126f2049 Port double-slash test to z/OS
* admin/merge-gnulib (GNULIB_MODULES): Add double-slash-root.
Emacs was already using this Gnulib module indirectly, so this
is merely noting that there is now a direct dependency.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
* src/fileio.c (search_embedded_absfilename):
Use DOUBLE_SLASH_IS_DISTINCT_ROOT instead of (WINDOWSNT || CYGWIN).
Simplify.
2019-07-24 12:11:32 -07:00
Paul Eggert
a48726ebae Merge pdumper.c and alloc.c builtin symbol tests
* src/alloc.c (c_symbol_p): Move from here ...
* src/lisp.h (c_symbol_p): ... to here, and make it more portable
to hypothetical platforms where pointers are wider than ptrdiff_t.
* src/pdumper.c (dump_builtin_symbol_p): Use c_symbol_p.
2019-07-23 11:18:58 -07:00
Paul Eggert
8dd5b6ea56 Improve pdumper doc; say unexec is deprecated
Say that pdumping cannot redump unless -batch is used.  Say that
the traditional unexec dumping method is by default not available,
and is deprecated.  Don't call dump files "portable", as dump files
are not any more portable than the Emacs executables themselves.
Just call them "dump files".  Similar, prefer "portable dumper"
(since the dumper code is portable) to "portable dumping" (since
the dump file is not).  Be more systematic about calling them
"dump files" instead of "dumped images" or whatnot.
2019-07-23 09:23:20 -07:00
Stefan Monnier
29a7d73d19 * src/fns.c (hashfn_user_defined): Make sure we always return a fixnum. 2019-07-23 08:29:21 -04:00
Paul Eggert
dfb0ba79b5 Support "%x" etc. formats on more floats
* doc/lispref/strings.texi (Formatting Strings): Document this.
* src/editfns.c (styled_format): Support %o, %x, and %X on
finite floats less than zero or greater than UINTMAX_MAX.
* test/src/editfns-tests.el (format-%x-large-float)
(read-large-integer, format-%o-negative-float):
Adjust tests to match extended behavior.
Rename the latter test from format-%o-invalid-float,
since the float is no longer invalid.

* test/src/editfns-tests.el (format-%x-large-float)
(read-large-integer): Test this.
2019-07-23 01:46:41 -07:00
Paul Eggert
56a3e4a5d3 Tweak performance of cmpfn_profiler
* src/profiler.c (cmpfn_profiler):
Improve performance when VECTORP (bt1) && EQ (bt1, bt2).
2019-07-22 22:09:27 -07:00
Paul Eggert
f378ed1a0b Avoid overexposing fixnums for hash codes
Following a suggestion by Stefan Monnier in:
https://lists.gnu.org/r/emacs-devel/2019-07/msg00530.html
* doc/lispref/hash.texi (Creating Hash, Defining Hash):
* src/fns.c (Fsxhash_eq, Fsxhash_eql, Fsxhash_equal, Fmake_hash_table):
Don’t insist that hash codes be fixnums, reverting
the recent doc changes to the contrary.
* src/bytecode.c (exec_byte_code): Special-case only the eq case,
as the others aren’t worth tuning now that we treat bignum hashes
like fixnums.
* src/fns.c (hashfn_user_defined): If the hash code is a bignum,
reduce its hash down to a fixnum.
2019-07-22 21:28:18 -07:00
Paul Eggert
3f4a9a5a3b Do not pdump user-defined hashtabs
* src/pdumper.c (dump_hash_table_stable_p):
Signal an error if a hash table has user-defined tests (Bug#36769).
* src/fns.c (hashfn_user_defined): Now extern.
2019-07-22 18:34:16 -07:00
Paul Eggert
c34496d0b9 Keep track of consing while GC’s inhibited
* src/alloc.c (allow_garbage_collection): Do not discard the count
of consing that occurred while GC was inhibited.
Problem and initial fix reported by Pip Cet in:
https://lists.gnu.org/r/emacs-devel/2019-07/msg00523.html
2019-07-22 18:06:11 -07:00
Martin Rudalics
8e0ebb9a3c Handle persistence of windows' scroll bar and fringes settings (Bug#36193)
* doc/lispref/display.texi (Fringe Size/Pos): Document new
argument PERSISTENT of 'set-window-fringes'.
(Scroll Bars): Document new argument PERSISTENT of
'set-window-scroll-bars'.  Mention that HORIZONTAL-TYPE must
be 'bottom' to show a horizontal scroll bar on mini windows.
* lisp/window.el (window-min-pixel-height): For mini windows the
minimum height is one line.
(window--min-size-1): Use value returned by
'window-min-pixel-height' when dealing with mini windows.
(window--resize-mini-window): Try to handle horizontal scroll
bars and size restrictions more accurately.
(window--state-put-2): Handle persistence of scroll bar
settings.
* src/frame.c (make_frame): Allow horizontal scroll bars in
mini windows.
(adjust_frame_size): Drop PIXELWISE argument in
'resize_frame_windows' calls.
* src/window.c (set_window_buffer): Don't override WINDOW's
scroll bar and fringe settings when marked as persistent.
(resize_frame_windows): Drop fourth argument PIXELWISE - SIZE
is always specified in terms of pixels.  Try to handle height
of mini windows more accurately.
(grow_mini_window, shrink_mini_window): Use body height of
mini window when calculating expected height change.  Take
horizontal scroll bars into account.
(struct saved_window): Two new members to handle persistence
of window fringes and scroll bars.
(Fset_window_configuration, save_window_save): Handle
persistence of fringes and scroll bars.
(set_window_fringes, set_window_scroll_bars): New arguments
PERSISTENT.  Make dimension checks more accurate.
(Fset_window_fringes): New argument PERSISTENT.
(Fwindow_fringes, Fwindow_scroll_bars): Add PERSISTENT to
return values.
(Fset_window_scroll_bars): New argument PERSISTENT.  In
doc-string mention that 'bottom' must be specified to get a
horizontal scroll bar in mini windows.
(compare_window_configurations): Add checks for persistence of
fringes and scroll bars.
* src/window.h (struct window): New boolean slots
'fringes_persistent' and 'scroll_bars_persistent'.
(WINDOW_HAS_HORIZONTAL_SCROLL_BAR): Allow horizontal scroll bars
for mini windows.
(resize_frame_windows): Remove fourth argument of
'resize_frame_windows' in external declaration.
* src/xdisp.c (resize_mini_window): Use box text height to
tell whether mini window height changed.
(set_horizontal_scroll_bar): Set mini window's horizontal
scroll bar when its type is specified as 'bottom'.
* etc/NEWS: Mention new options for 'set-window-fringes' and
'set-window-scroll-bars'.
2019-07-22 09:19:18 +02:00
Paul Eggert
5d4dd552c2 Fix lifetime error in previous patch
Problem reported by Pip Cet in:
https://lists.gnu.org/r/emacs-devel/2019-07/msg00520.html
* src/alloc.c (inhibit_garbage_collection): Use new function.
(allow_garbage_collection): Accept intmax_t, not pointer.
* src/eval.c (default_toplevel_binding, do_one_unbind)
(backtrace_eval_unrewind, Fbacktrace__locals, mark_specpdl):
Support SPECPDL_UNWIND_INTMAX.
(record_unwind_protect_excursion): New function.
* src/lisp.h (enum specbind_tag): New constant SPECPDL_UNWIND_INTMAX.
(union specbinding): New member unwind_intmax.
2019-07-21 12:32:16 -07:00
Paul Eggert
d02c2f7f65 Speed up maybe_gc when GC is inhibited
* src/alloc.c (allow_garbage_collection)
(inhibit_garbage_collection): Temporarily bump
consing_until_gc, to improve performance of maybe_gc while
garbage collection is inhibited.  Suggested by Stefan Monnier in:
https://lists.gnu.org/r/emacs-devel/2019-07/msg00511.html
2019-07-21 11:24:11 -07:00
Paul Eggert
c72e6328b4 Avoid integer overflow in hash table size
* src/fns.c (INDEX_SIZE_BOUND): Use a tighter bound.
(maybe_resize_hash_table): Avoid integer overflow when
checking for hash table size overflow.  Fix confusion
between INDEX_SIZE_BOUND (which is for the index vector)
and hash table size.  Fix typo in debugging message
when ENABLE_CHECKING.
2019-07-21 11:24:11 -07:00
Paul Eggert
cf285946be Improve doc for hash tables
* doc/lispref/hash.texi (Creating Hash, Defining Hash):
* src/fns.c (Fsxhash_eq, Fsxhash_eql, Fsxhash_equal):
Say that hashes are fixnums.
(Fmake_hash_table): Say that that an integer rehash-size
should be a fixnum.
* doc/lispref/hash.texi (Defining Hash): Say that hash and
comparison functions should be consistent and pure, and should
return quickly.
2019-07-21 11:24:11 -07:00
Paul Eggert
4a1507b88e pure_alloc returns cleared memory
* src/alloc.c (pure_alloc): Clear any heap-allocated storage.
This is simpler than auditing all the callers to make sure
they don’t assume pure memory is cleared memory, and the
performance implication is nonexistent except when Emacs
is misconfigured.  Also, add an assertion to catch
caller misuse when pure space is exhausted.
2019-07-21 11:24:11 -07:00
Ken Brown
8b13ec1d70 Fix expand-file-name for names starting with '~'
* src/fileio.c: (file_name_absolute_no_tilde_p):
New static function.
(Fexpand_file_name): If the current buffer's default-directory
starts with "~user" where "user" is not a valid user name, don't
give the '~' a special meaning.  Just treat the value of
default-directory as a relative name.  (Bug#36502)
* test/src/fileio-tests.el
(fileio-tests--relative-default-directory): Add a test.
2019-07-21 10:40:54 -04:00
Paul Eggert
49e80e765b Tweak recent hash-table fix
* src/fns.c (maybe_resize_hash_table): Completely initialize the
new ‘next’ vector before allocating more vectors, as this
preserves locality a bit better and it’s safer not to leave an
uninitialized Lisp object around.  Use next_size instead of
new_size to compute new index size.
2019-07-20 23:21:41 -07:00
Paul Eggert
515afc9c15 Fix crash if user test munges hash table
* src/fns.c (restore_mutability)
(hash_table_user_defined_call): New functions.
(cmpfn_user_defined, hashfn_user_defined): Use them.
(make_hash_table, copy_hash_table):
Mark new hash table as mutable.
(check_mutable_hash_table): New function.
(Fclrhash, Fputhash, Fremhash): Use it instead of CHECK_IMPURE.
* src/lisp.h (struct hash_table_test): User-defined functions
now take pointers to struct Lisp_Hash_Table, not to struct
hash_table_test.  All uses changed.
(struct Lisp_Hash_Table): New member ‘mutable’.
* src/pdumper.c (dump_hash_table): Copy it.
* test/src/fns-tests.el (test-hash-function-that-mutates-hash-table):
New test, which tests for the bug.
2019-07-20 20:13:46 -07:00
Paul Eggert
b6f194a0fb Simplify hashfn/cmpfn calling convention
* src/fns.c (cmpfn_eql, cmpfn_equal, cmpfn_user_defined)
(hashfn_eq, hashfn_equal, hashfn_eql, hashfn_user_defined):
* src/profiler.c (cmpfn_profiler, hashfn_profiler):
Use new calling convention where the return value is a fixnum
instead of EMACS_UINT.  While we’re at it, put the hash table
at the end, since that’s a bit simpler and generates better
code (at least on the x86-64).  All callers changed.
* src/fns.c (hash_lookup): Store fixnum rather than EMACS_UINT.
All callers changed.
(hash_put): Take a fixnum rather than an EMACS_UINT.
All callers changed.  Remove unnecessary eassert (XUFIXNUM does it).
* src/lisp.h (struct hash_table_test):
Adjust signatures of cmpfn and hashfn.
2019-07-20 20:13:46 -07:00
Paul Eggert
5018b663c6 Inhibit GC after inhibit_garbage_collection
Without this patch, there are unlikely ways that garbage
collection could occur (sometimes causing undefined behavior)
even when inhibit_garbage_collection is in effect.
* src/alloc.c (garbage_collection_inhibited): New var.
(pure_alloc): Increment it if pure space is exhausted, so that
garbage_collect_1 no longer needs to inspect
pure_bytes_used_before_overflow.
(allow_garbage_collection): New function.
(inhibit_garbage_collection): Increment the new variable rather
than specbinding a user variable.
(garbage_collect_1): Do not garbage collect if the new variable
is set, rather than if pure_bytes_used_before_overflow is set.
2019-07-20 20:13:46 -07:00
Paul Eggert
26de2d42d0 Simplify maybe_gc implementation
* src/alloc.c (consing_until_gc): New variable, replacing the
combination of consing_since_gc and gc_relative_threshold.
All uses changed.
(byte_ct): Move decl here from lisp.h.
(memory_full_cons_threshold): New an enum constant.
(free_cons): Check for integer overflow in
statistics calculation.
* src/lisp.h (object_ct): Move decl here from alloc.c.
(OBJECT_CT_MAX): New macro.
(maybe_gc): Simplify accordingly.
2019-07-20 20:13:46 -07:00
Paul Eggert
df5024dbae Rename ‘pure’ to ‘purecopy’
* src/lisp.h (struct Lisp_Hash_Table): Rename ‘pure’ member to
‘purecopy’, as the old name was quite confusing (it did not
mean the hash table was pure).  All uses changed.
2019-07-20 20:13:45 -07:00
Paul Eggert
b0908a0fe6 Fix hash table overallocation etc.
* src/fns.c (set_hash_key_and_value, set_hash_next)
(set_hash_hash, set_hash_index): Remove.  All uses removed.
(maybe_resize_hash_table): Don’t update h->next until it’s
known that all the allocations succeeded, to avoid trashing
the hash table if memory is exhausted.  Don’t overallocate the
other vectors.  Don’t output growth message if the hash table
didn’t actually grow due to allocation failure.  Assume C99
decls after statements.
2019-07-20 20:13:45 -07:00
Noam Postavsky
6490269bec Merge from emacs-26
150bdfe43a Handle completely undecoded input in term (Bug#29918)
021f32cca1 * doc/misc/forms.texi (Control File Format): Fix a doc error.
76538d09b7 Fix typo in package-alist docstring
b2fde4b5e8 * doc/lispref/text.texi (Mode-Specific Indent): Fix a typo...
7e62778548 ; Another minor change in 'bidi-display-reordering's doc s...
4455ddbe56 Improve doc string of 'bidi-display-reordering'
34ee26dd93 Add warning to bidi-display-reordering doc string

# Conflicts:
#	lisp/term.el
#	test/lisp/term-tests.el
2019-07-20 22:02:36 -04:00
Lars Ingebrigtsen
b7946afe25 open-dribble-file doc string clarification
* src/keyboard.c (Fopen_dribble_file): Clarify when the file is
closed, and when events are written to the file (bug#27996).
2019-07-15 19:55:26 +02:00
Robert Pluim
b34c6d2c96 Don't delete GnuTLS boot parameters too early
* src/process.c (connect_network_socket): Don't delete the GnuTLS
boot parameters until after we've managed to connect at the IP
level (bug#36660).
2019-07-15 13:30:11 +02:00
Alan Third
ac57c50938 Use correct colorspace for XBM images
* src/nsimage.m ([EmacsImage setXBMColor:]): Use 'generic RGB' color
space.
2019-07-14 17:41:19 +01:00
Stefan Monnier
8ff09154a2 ; Add comment to hash_table_rehash (Bug#36447)
* src/fns.c (hash_table_rehash): Add a comment to explain that
hash_table_rehash is not used in "normal" rehashing, but only in the
rare case of rehashing on the first access to a preloaded hash-table.
2019-07-14 10:04:22 -04:00
Eli Zaretskii
474bd9d4a0 Fix recent changes
* src/sysstdio.h: Include stdarg.h, for va_list.
2019-07-14 08:59:49 +03:00
Pip Cet
1542d17324 Avoid returning negative numbers from `hash-table-count'
* src/fns.c (Fhash_table_count): Rehash argument if necessary.
2019-07-13 21:45:27 -07:00
Paul Eggert
61a79e88e4 * src/lisp.h (struct Lisp_Hash_Table.count): Improve comment. 2019-07-13 21:45:27 -07:00
Paul Eggert
34810ab4f9 Avoid interleaving stderr lines when shutting down
* src/emacs.c (shut_down_emacs) [!DOS_NT]: Avoid interleaving
to stderr in the usual case, by using a single write and by
appending a newline.
* src/sysdep.c (emacs_backtrace) [HAVE_BACKTRACE_SYMBOLS_FD]:
Omit newline since shut_down_emacs now does that.
2019-07-13 16:53:21 -07:00
Paul Eggert
9a34591ddd Use a better buffer size in emacs_perror
* src/sysdep.c (emacs_perror): Since the buffer is for avoiding
interleaving, size it via PIPE_BUF not BUFSIZ.
* src/sysstdio.h (PIPE_BUF): Provide a default.
2019-07-13 16:53:21 -07:00
Paul Eggert
1178f98f2c Avoid interleaving stderr in dump_fingerprint
* src/fns.c (hexbuf_digest): New function, containing most of
the old make_digest_string.
(make_digest_string): Use it.
* src/pdumper.c (dump_fingerprint): Rewrite to use a single
fprintf call, to avoid interleaving on GNU/Linux.
2019-07-13 16:53:21 -07:00
Paul Eggert
a8ffbb20da Avoid interleaving stderr in a few cases
* src/sysdep.c (buferr): New static var.
(init_standard_fds) [_PC_PIPE_BUF]: Initialize it.
(errstream, errputc, verrprintf, errwrite): New functions.
(close_output_streams): Check buferr status too.
* src/xdisp.c: Include sysstdio.h instead of stdio.h.
(message_to_stderr, vmessage): Use the new functions
to avoid interleaving stderr.
2019-07-13 16:53:21 -07:00
Lars Ingebrigtsen
8620e07a35 Doc fix for Finteractive (only %s is allowed)
* src/callint.c (Finteractive): Any other format spec than %s will
bug out with "Format specifier doesn’t match argument type", so
say explicitly that only %s is supported (bug#31314).
2019-07-13 17:18:11 +02:00
Lars Ingebrigtsen
d4c2b3ca64 plist-get/lax-plist-get doc fix
* src/fns.c (Fplist_get): Mention that comparison is done with eq
(bug#31441).
(Flax_plist_get): Refer to plist-get for details.
2019-07-13 16:44:03 +02:00
Eli Zaretskii
7e62778548 ; Another minor change in 'bidi-display-reordering's doc string. 2019-07-13 14:24:15 +03:00
Eli Zaretskii
4455ddbe56 Improve doc string of 'bidi-display-reordering'
* src/buffer.c (syms_of_buffer) <bidi-display-reordering>:
Further doc fix.
2019-07-13 14:21:41 +03:00