1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-27 16:51:06 -07:00
Commit graph

41145 commits

Author SHA1 Message Date
Eli Zaretskii
db2c930849 Speed up JSON parsing
Thanks to Dmitry Gutov <dgutov@yandex.ru> for running many
benchmarks and for useful discussions.
* src/json.c (json_make_string): Speed up parsing of JSON
strings by optimizing the normal case of a valid UTF-8 string
being returned from libjansson.  (Bug#31138)
2019-04-23 13:20:46 +03:00
Paul Eggert
7cc66173e4 Revert Vinternal_interpreter_environment tweak
Stefan Monnier pointed out examples like (funcall `(closure
,(let ((cycle (list nil))) (setcdr cycle cycle)) () a)),
where the user can set Vinternal_interpreter_environment
indirectly.
* src/eval.c (Fsetq): Revert recent change, going back to Fassq.
2019-04-22 20:02:32 -07:00
Paul Eggert
b8e7be2833 Tweak Vinternal_interpreter_environment lookup
* src/eval.c (Fsetq, eval_sub): Use assq_no_quit instead
of Fassq for a list that cannot contain cycles or be that long.
2019-04-22 12:35:14 -07:00
Paul Eggert
8882419798 Improve wur coverage on older GCCs
* src/conf_post.h (__has_attribute_warn_unused_result):
New macro for compilers lacking __has_attribute.
* src/systhread.h (__has_attribute): Remove ineffective define.
(ATTRIBUTE_WARN_UNUSED_RESULT): Work better on GCC 3.4 thru 4.
2019-04-22 12:25:53 -07:00
Paul Eggert
4bf3c94939 Go back to old way of checking json int range
Although the lisp.h macros really need improvement,
INTEGER_TO_INT is not the right way to go about it, as it
causes conversion from intmax_t to uintmax_t and back again,
which can cause a signal if the value is negative.
* src/lisp.h (INTEGER_TO_INT, ranged_integer_to_int)
(ranged_integer_to_uint): Remove, reverting recent changes to
this file.
* src/json.c (lisp_to_json): Revert to previous code,
as the change messes up with uintmax_t<->intmax_t conversion.
2019-04-22 11:43:28 -07:00
Philipp Stephani
981470e359 * src/lisp.h (INTEGER_TO_INT): Fix bug. 2019-04-22 19:04:54 +02:00
Philipp Stephani
4e2ea400cb Introduce a helper macro to convert a Lisp integer to a C integer.
This is similar to CONS_TO_INTEGER.  The inverse (INT_TO_INTEGER)
already exists.

* src/lisp.h (INTEGER_TO_INT): New macro.
(ranged_integer_to_int, ranged_integer_to_uint): New
functions.

* src/json.c (lisp_to_json): Use helper macro.
2019-04-22 17:36:52 +02:00
Philipp Stephani
f9659e648c Module API: Don’t require null-terminated strings in make_string.
* emacs-module.c (module_make_string): Use make_unibyte_string, which
doesn’t require its argument to be null-terminated.  Since it always
returns a heap-allocated string, we don’t have to copy it any more
while decoding.
(module_decode): New helper function.
2019-04-22 15:44:37 +02:00
Philipp Stephani
ca3ad9746d Use utf-8-unix for coding system conversions in the module API.
Factor out conversions into helper functions to provide a simpler
interface.

* src/emacs-module.c (module_encode, module_decode_copy): New helper
functions.
(module_make_function, module_copy_string_contents)
(module_make_string): Use them.
2019-04-22 15:44:37 +02:00
Philipp Stephani
a2a51b4e94 Refactoring: Inline a few macros.
Now that CATCHER_ALL catches signals as well, we can simplify
MODULE_HANDLE_NONLOCAL_EXIT a bit.

* src/emacs-module.c (MODULE_SETJMP, MODULE_SETJMP_1): Remove.
(MODULE_HANDLE_NONLOCAL_EXIT): Inline MODULE_SETJMP and
MODULE_SETJMP_1.
2019-04-22 11:36:59 +02:00
Paul Eggert
1ea048f6e0 Remove --enable-checking=xmallocoverrun
It doesn’t work anymore, and these days ‘gcc -fsanitize=address’
does a better job anyway.
* configure.ac: Remove the option.
* configure.ac (ac_xmalloc_overrun, XMALLOC_OVERRUN_CHECK):
* src/alloc.c (XMALLOC_OVERRUN_CHECK_OVERHEAD)
(XMALLOC_OVERRUN_CHECK_SIZE, XMALLOC_OVERRUN_SIZE_SIZE)
(xmalloc_overrun_check_header, xmalloc_overrun_check_trailer)
(xmalloc_put_size, xmalloc_get_size, overrun_check_malloc)
(overrun_check_realloc, overrun_check_free):
Remove.  All uses removed.
* etc/NEWS: Mention this.
2019-04-21 23:16:48 -07:00
Paul Eggert
72067661fe Remove --enablechecking=conslist configure option
* configure.ac: Remove the option.
* configure.ac (ac_gc_check_cons_list, GC_CHECK_CONS_LIST):
* src/alloc.c (check_cons_list) [GC_CHECK_CONS_LIST]:
* src/lisp.h (lisp_h_check_cons_list, check_cons_list):
Remove.  All uses removed.
* etc/NEWS: Mention this.
2019-04-21 23:16:48 -07:00
Paul Eggert
418400ab7b Simplify XPNTR
Because XPNTR now uses ATTRIBUTE_NO_SANITIZE_UNDEFINED,
it can be simplified.
* src/alloc.c (macro_PNTR_ADD, PNTR_ADD, macro_XPNTR): Remove.
(XPNTR): Open-code rather than using the removed macros and
functions.  Also, simplify by using LISP_WORD_TAG.
2019-04-21 21:45:37 -07:00
Paul Eggert
e85bff0bbb Fix drain_reloc_list alignment bug
* src/pdumper.c (dump_charset): Use alignof (struct charset),
not alignof (int), since struct charset might be more strictly
aligned than int.  I think this is just a minor performance
issue, but we might as well use the correct alignment.
(drain_reloc_list): Use an alignment instead of a size for the
output alignment.  This prevents undefined behavior when
alignof (struct emacs_reloc) == 8 and sizeof (dump_off) == 4
when building on x86-64 with gcc -fsanitize=undefined.
2019-04-21 21:16:26 -07:00
Paul Eggert
4a5ed6b05a Port dump_bitset_clear to -fsanitize=undefined
* src/pdumper.c (dump_bitset_clear):
Pacify -fsanitize=undefined by avoiding memset (NULL, x, 0),
which strictly speaking has undefined behavior although it
works on all production platforms I know.
2019-04-21 21:16:26 -07:00
Paul Eggert
f67bc3f12b Port to recent gcc -fsanitize=undefined
* src/alloc.c (XPNTR): Add ATTRIBUTE_NO_SANITIZE_UNDEFINED and
remove ATTRIBUTE_UNUSED.  Do not define as a macro, so that
ATTRIBUTE_NO_SANITIZE_UNDEFINED works.
* src/lisp.h (lisp_h_XSYMBOL): Remove.  All uses removed.
With recent GCC the macro does not work with -fsanitize=undefined,
and the macro can be omitted as its only function is to optimize -O0.
2019-04-21 21:16:26 -07:00
Paul Eggert
2ea55c2774 Fix double-free in pdumper
Revert the double-free bug that I introduced in
2019-03-11T15:20:54Z!eggert@cs.ucla.edu.
* src/pdumper.c (dump_mmap_reset): Do not free the private member;
that’s the release function’s job.
(dump_mm_heap_cb_release): Free cb if its refcount goes to zero.
(dump_mmap_contiguous_heap): Mention memory leak in comment.
2019-04-21 09:59:33 -07:00
Glenn Morris
50d00e7153 Merge from origin/emacs-26
037970f Document insert-image-file's return value (Bug#32978)
598b45a Autoload cua-toggle-rectangle-mark (Bug#34947)
95bd56d Tell xclip not to expect job-control under eshell (Bug#35257)
9997bbb ; * src/emacs.c: Fix typo in comment (Bug#35320).
a4ad7be Fix off-by-one-link error in image--set-property
2019-04-21 07:51:36 -07:00
YAMAMOTO Mitsuharu
4ff6c657a2 * src/ftcrfont.c (ftcrfont_shape): Fix last change. 2019-04-20 12:50:32 +09:00
YAMAMOTO Mitsuharu
d1dde7d04e Use bitmap strikes as fallbacks for ftcr font backend
* src/ftfont.h (struct font_info): New member bitmap_strike_index.
* src/ftfont.c (ftfont_open2): Try bitmap strikes as fallbacks.
(ftfont_open): Discard bitmap strikes.
* src/ftcrfont.c (ftcrfont_open): Recalculate metrics for bitmap strikes.
(ftcrfont_get_bitmap, ftcrfont_anchor_point, ftcrfont_shape): New functions.
(struct font_driver): Use them.
2019-04-20 12:43:45 +09:00
Paul Eggert
b793a88179 Fix GC_CHECK_STRING_BYTES false alarm with pdumper
* src/alloc.c (string_bytes): Don’t abort on strings
taken from the dumped file.
2019-04-19 17:37:06 -07:00
Paul Eggert
e0d2ff25b0 Fix another hash false alarm
* src/pdumper.c (dump_vectorlike): Fix hash.
2019-04-19 17:37:06 -07:00
Philipp Stephani
ca02e8c00c ; * src/alloc.c (xrealloc): Fix typo. 2019-04-20 01:51:58 +02:00
Paul Eggert
1a4df31ddd * src/emacs-module.c (value_storage_contains_p): Fix typo. 2019-04-19 14:41:57 -07:00
Philipp Stephani
992fd76ce9 Remove some ineffective #ifdefs.
Since DEFSYM doesn't by itself do anything and make-docfile ignores
preprocessor statements, conditional compilation of DEFSYMs is
ineffective.

* src/data.c (syms_of_data): Remove ineffective #ifdefs.
2019-04-19 23:17:19 +02:00
Philipp Stephani
f5776e0eac ; * src/alloc.c (HAVE_MODULES): remove unused constant 2019-04-19 23:11:14 +02:00
Philipp Stephani
e7cb6eea99 Remove some #ifdefs for user pointers.
Even if Emacs is compiled without module support, we don't have to
comment out every bit of user pointer support.  Defining the basic
structures and functions and detecting user pointers in switch
statements is harmless, and we're already doing the same for module
functions.  Removing these #ifdefs makes the code a bit easier to
read.

* src/lisp.h (PVEC_USER_PTR, struct Lisp_User_Ptr, USER_PTRP)
(XUSER_PTR): Define unconditionally.

* src/data.c (Ftype_of):
* src/alloc.c (cleanup_vector):
* src/print.c (print_vectorlike):
* src/pdumper.c (dump_vectorlike): Remove #ifdef for user pointers.
2019-04-19 23:07:58 +02:00
Philipp Stephani
7e7d62ea5e Remove special-casing of tagged pointers.
This partially reverts commit
09b2b8a5ce.

* src/alloc.c (mark_maybe_pointer): Remove special-casing of tagged
pointers.  After commit 09d746dad3,
modules no longer rely on tagged pointers.
2019-04-19 22:51:16 +02:00
Philipp Stephani
ba2e3a8abb Refactoring: Reduce code duplication
* src/emacs-module.c (value_storage_contains_p): New function.
(module_free_global_ref, value_to_lisp): Use it.
2019-04-19 22:33:40 +02:00
Paul Eggert
0f8628490e Fix Fload dangling pointer
* src/lread.c (Fload): Expand decl’s lifetime to match its use.
Bug found by gcc -fsanitize=address.
2019-04-19 12:57:30 -07:00
Paul Eggert
bc4ed68314 Fix comment and tweak eval_sub
* src/eval.c (eval_sub): Check whether Fassq returns Qnil,
not whether it returns a cons, as NILP is faster than CONSP
nowadays.  Remove incorrect comment “only original_fun and
original_args have values that will be used below”; instead,
move declarations around so that the set of variables with
useful values is obvious.
2019-04-19 12:57:30 -07:00
Paul Eggert
7d84056df4 Fix dump_map_file on unusual platforms
* src/pdumper.c (dump_map_file): Fix recently-introduced typo
on platforms that support neither POSIX nor MS-Windows VM.
2019-04-19 12:57:30 -07:00
Paul Eggert
5e3e14f6e9 Minor lread.c tweaks
* src/lread.c (load_warn_unescaped_character_literals):
Use AUTO_STRING to help the GC.
(Fload): Use bool for boolean.
2019-04-19 12:08:54 -07:00
Noam Postavsky
9997bbb3ee ; * src/emacs.c: Fix typo in comment (Bug#35320). 2019-04-19 14:11:01 -04:00
Philipp Stephani
0b4b380ce4 Make warning about unescaped character literals more helpful.
See Bug#31676.

* lisp/emacs-lisp/byte-run.el
(byte-run--unescaped-character-literals-warning): New defun.

* src/lread.c (load_warn_unescaped_character_literals): Use new defun.
(syms_of_lread): Define symbol for new defun.

* lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Use new
defun.

* test/src/lread-tests.el (lread-tests--unescaped-char-literals):
test/lisp/emacs-lisp/bytecomp-tests.el
(bytecomp-tests--unescaped-char-literals): Adapt unit tests.
2019-04-19 19:19:35 +02:00
Philipp Stephani
8aadf6e415 Refactoring: simplify definition of some internal variables.
In some cases, we never specbind internal objects, so they don't have
to be symbols.  Rather than using DEFSYM/DEFVAR and then uninterning
the symbols, use plain static variables.  Call staticpro for all of
them, to protect them from the garbage collector.

* src/eval.c (syms_of_eval): Use a static variable for
Qcatch_all_memory_full.

* src/emacs-module.c (syms_of_module): Use static variables for
Vmodule_refs_hash, Vmodule_runtimes, and Vmodule_environments.
2019-04-19 18:41:15 +02:00
Philipp Stephani
5c5e309527 Remove :stop key from make-process.
This has never worked and caused issues such as Bug#30460.

* src/process.c (Fmake_process): Don't accept :stop key any more.
(syms_of_process): Define needed symbol 'null'.

* test/src/process-tests.el (make-process/stop): New unit test.

* doc/lispref/processes.texi (Asynchronous Processes): Remove :stop
key from manual.
2019-04-19 14:03:16 +02:00
Philipp Stephani
74f54af2b9 Use eassume (false) for branch that's never taken.
* src/json.c (json_handle_nonlocal_exit): Use eassume (false) since
this branch is never taken.
2019-04-19 10:26:32 +02:00
Eli Zaretskii
d9d9c32329 Fix compilation warning due to a recent change
* src/json.c (json_handle_nonlocal_exit): Always return a
value.
2019-04-19 11:04:17 +03:00
YAMAMOTO Mitsuharu
5ada97cfcd * src/ftcrfont.c (ftcrfont_glyph_extents): Activate ft_size_draw. 2019-04-19 09:55:53 +09:00
YAMAMOTO Mitsuharu
0a453ee7e4 * src/ftcrfont.c (ftcrfont_open): Avoid returning while blocking input. 2019-04-19 09:54:59 +09:00
Philipp Stephani
23a82cba12 Refactoring: have CATCHER_ALL also catch signals.
In all cases where we use a CATCHER_ALL handler we also want to catch
signals.  Therefore have 'signal' respect CATCHER_ALL.  Adapt internal
interfaces so that handlers can distinguish among the two types of
nonlocal exits in CATCHER_ALL handlers.

* src/lisp.h (enum nonlocal_exit): New enum.
(struct handler): Add member 'nonlocal_exit' to hold the type of
nonlocal exit during stack unwinding.

* src/eval.c (signal_or_quit): Also respect CATCHER_ALL handlers.
(unwind_to_catch): Store nonlocal exit type in catch structure.
(Fthrow, signal_or_quit): Adapt callers.
(internal_catch_all): Install only one handler.  Give handler a
nonlocal exit type argument.
(internal_catch_all_1): Remove, no longer needed.

* src/emacs-module.c (MODULE_SETJMP): Install only one handler.
(module_handle_nonlocal_exit): New function to handle all nonlocal
exits.
(MODULE_SETJMP_1): Pass nonlocal exit type to handler function.
(module_handle_signal, module_handle_throw): Remove, no longer needed.

* src/json.c (json_handle_nonlocal_exit): New helper function.
(json_insert_callback): Adapt to change in 'internal_catch_all'.
2019-04-19 01:04:55 +02:00
Philipp Stephani
ee4ba5c8fe ; * src/lisp.h (integer_to_intmax): Fix typo. 2019-04-18 23:29:20 +02:00
Philipp Stephani
e7caf9c744 * src/emacs-module.c: Add instructions how to change the module API 2019-04-18 23:18:06 +02:00
Paul Eggert
6d6c55db2c Mark _Noreturn error functions as cold
On my platform this made ‘make compile-always’ 1.3% faster.
Suggested by Alex Gramiak in:
https://lists.gnu.org/r/emacs-devel/2019-04/msg00684.html
* configure.ac (nw): Don’t use -Wsuggest-attribute=cold.
* lib-src/make-docfile.c (write_globals):
Mark noreturn functions as cold.
* src/callproc.c (exec_failed):
* src/data.c (wrong_length_argument, wrong_type_argument):
* src/emacs-module.c (module_abort):
* src/emacs.c (terminate_due_to_signal):
* src/eval.c (unwind_to_catch):
* src/image.c (my_png_error, my_error_exit):
* src/json.c (json_out_of_memory, json_parse_error):
* src/keyboard.c (quit_throw_to_read_char, user_error):
* src/lisp.h (die, wrong_type_argument, wrong_choice)
(args_out_of_range, args_out_of_range_3, circular_list)
(buffer_overflow, memory_full, buffer_memory_full)
(string_overflow, xsignal, xsignal0, xsignal1, xsignal2)
(xsignal3, signal_error, overflow_error, error, verror)
(nsberror, report_file_errno, report_file_error)
(report_file_notify_error, terminate_due_to_signal)
(emacs_abort, fatal):
* src/lread.c (load_error_old_style_backquotes)
(end_of_file_error, invalid_syntax):
* src/pdumper.c (error_unsupported_dump_object):
* src/puresize.h (pure_write_error):
* src/search.c (matcher_overflow):
* src/sound.c (sound_perror, alsa_sound_perror):
* src/sysdep.c (handle_arith_signal):
* src/systime.h (time_overflow):
* src/term.c (maybe_fatal, vfatal):
* src/textprop.c (text_read_only):
* src/timefns.c (invalid_time_zone_specification)
(time_error, invalid_hz):
* src/xterm.c (x_connection_closed):
Use AVOID instead of _Noreturn void, so that it’s marked cold.
* src/conf_post.h (__has_attribute_cold) [!__has_attribute]:
New macro.
(ATTRIBUTE_COLD): New macro.
* src/frame.h (WINDOW_SYSTEM_RETURN): Add ATTRIBUTE_COLD.
* src/lisp.h (AVOID): New macro.
* src/xterm.c: Omit unnecessary static decls, so that we needn’t
worry about which functions should be marked cold.
(x_io_error_quitter): Mark as cold.
2019-04-18 00:35:18 -07:00
YAMAMOTO Mitsuharu
dded2c4cf3 * src/ftcrfont.c (ftcrfont_glyph_extents): Fix last change. 2019-04-18 11:30:17 +09:00
Glenn Morris
0797897f34 Merge from origin/emacs-26
a1c53d4 (origin/emacs-26) * admin/admin.el (make-manuals-dist--1): Up...
d0f745f Document some compilation-mode faces
23ccba0 Mention the assignment form in "Copyright Assignment"
0f5568e Fix confusing wording in the user manual
70ec392 Fix the MSDOS build when running under CWSDPMI
7a608fc * lisp/progmodes/python.el: Be more careful about temp file r...
2019-04-17 09:32:40 -07:00
YAMAMOTO Mitsuharu
acec59c9f9 Use cairo_scaled_font_t object for text drawing and metrics calculation
* src/ftfont.h (struct font_info): Replace member cr_font_face of type
cairo_font_face_t * with cr_scaled_font of type cairo_scaled_font_t *.
* src/ftcrfont.c: Include math.h for floor, ceiling, and lround.
(ftcrfont_glyph_extents): Use cairo_scaled_font_glyph_extents.
(ftcrfont_open): Create cairo_scaled_font_t object and set it to
cr_scaled_font member of struct font_info.
(ftcrfont_close): Use cairo_scaled_font_destroy.
(ftcrfont_draw): Use cairo_set_scaled_font.
2019-04-17 09:46:34 +09:00
Paul Eggert
debaa72dd8 Fix uninit var in widget.c
* src/widget.c (EmacsFrameQueryGeometry):
Avoid use of uninitialized variables ok_width, ok_height (Bug#35277).
2019-04-15 20:53:36 -07:00
Paul Eggert
a6b4c3bbeb Remove Vparam_value_alist
* src/xfaces.c (Vparam_value_alist):
Remove.  All uses removed.
(Finternal_set_lisp_face_attribute):
Simplify by using AUTO_FRAME_ARG.
2019-04-15 20:24:18 -07:00