Commit graph

136103 commits

Author SHA1 Message Date
Stefan Monnier
ca99c00f75 * lisp/simple.el (eval-expression): Fix paren typo. 2019-04-25 15:34:27 -04:00
Philipp Stephani
fe6c507f5c Make sure that ‘sdata’ objects in ‘sblock’ objects are aligned.
Issue found by Clang’s UBSan.

* src/alloc.c (GC_STRING_OVERRUN_COOKIE_SIZE): Increase to 8.
(string_overrun_cookie): Extend accordingly.
(GC_STRING_EXTRA): Ensure that it’s properly aligned for ‘sdata’.
(allocate_string_data): Verify that ‘sdata’ blocks remain aligned.
2019-04-25 21:30:12 +02:00
Stefan Monnier
e08e0880f9 Use lexical-binding by default for M-:, --eval, and *scratch*
* lisp/startup.el (command-line): Default to lexical-binding in *scratch*.
(normal-no-mouse-startup-screen, command-line-1):
Use startup--get-buffer-create-scratch.
(command-line-1):
* lisp/simple.el (eval-expression):
* lisp/server.el (server-eval-and-print): Use lexical-binding to
evaluate the expression.
(server-execute): Use startup--get-buffer-create-scratch.
* lisp/ielm.el (inferior-emacs-lisp-mode): Default to lexical-binding.
2019-04-25 14:36:03 -04:00
Alan Mackenzie
0c2d921a75 Restore fontification of delimiters of multiline CC Mode strings.
E.g., on typing the closing delimiter of a string continued onto a second
line, the opening delimiter retained its font-lock-warning-face.

* lisp/progmodes/cc-defs.el (c-c++-raw-string-opener-re)
(c-c++-raw-string-opener-1-re): New constants.
(c-sub-at-c++-raw-string-opener, c-at-c++-raw-string-opener): New macros.

* lisp/progmodes/cc-engine.el (c-raw-string-pos)
(c-depropertize-raw-strings-in-region, c-after-change-unmark-raw-strings):
Replace uses of open-coded raw string regexps by the new constants and macros
in cc-defs.el.

* lisp/progmodes/cc-fonts.el (c-font-lock-raw-strings): Ditto

* lisp/progmodes/cc-mode.el (c-before-change-check-unbalanced-strings): Set
c-new-BEG to the beginning of the string when we encounter its closing ".
When not in a raw string, but in a string, clear syntax-table properties from
its delimiters and set c-new-BEG/END to its limits.
(c-after-change-mark-abnormal-strings): When applying syntax-table properties
to string delimiters, also set c-new-BEG/END to ensure subsequent
fontification.
2019-04-25 18:00:15 +00:00
Stephen Berman
6d8e0fc5aa Make wdired-mode ignore ls file indicators
* lisp/wdired.el (wdired--restore-dired-filename-prop): When
dired-listing-switches includes "F" or "classify", don't treat
appended indicator characters as part of the file name (bug#34915).

* test/lisp/wdired-tests.el (wdired-test-bug34915): New test.
2019-04-25 19:17:23 +02:00
Paul Eggert
30030945c3 Port emacsclient euidaccess to Solaris 10
Without this fix, linking emacsclient fails with ‘Undefined
symbol eaccess’ on Solaris 10 sparc.
* lib-src/Makefile.in (LIB_EACCESS): New macro.
(emacsclient${EXEEXT}, emacsclientw${EXEEXT}): Use it.
2019-04-25 08:51:19 -07:00
Alan Mackenzie
efb8921a57 Fix some corner cases in the recognition of C++ raw strings.
These are where changing the identifier in a raw string delimiter causes
different delimiters to match eachother.

* lisp/progmodes/cc-engine.el (c-raw-string-end-delim-disrupted): New
variable.
(c-before-change-check-raw-strings): Use new variable.
(c-after-change-unmark-raw-strings): When typing into an opening delimiter or
altering its close delimiter causes the opening delimiter to match a later
closing delimiter, clear all syntax-table char properties from the opening
delimiter onwards, and set c-new-END to point max.  Also, when changing a
closing delimiter, check whether its new value matches a previously open
opening delimiter earlier in the buffer, and amend the syntax-table text
properties appropriately.
2019-04-25 15:18:12 +00:00
Michael R. Mauger
a1386fa6a7 * lisp/progmodes/sql.el
(sql-is-sqli-buffer-p): New function.
(sql-generate-unique-sqli-buffer-name): Refactor and use it.
(sql-product-interactive): Simplify name logic.
* test/lisp/progmodes/sql-tests.el
(sql-tests-placeholder-filter-harness): New macro.
(sql-tests-placeholder-filter-simple)
(sql-tests-placeholder-filter-ampersand)
(sql-tests-placeholder-filter-period): Refactored tests and use macro.
(sql-tests-buffer-naming-harness): New macro.
(sql-tests-buffer-naming-default)
(sql-tests-buffer-naming-multiple)
(sql-tests-buffer-naming-explicit)
(sql-tests-buffer-naming-universal-argument)
(sql-tests-buffer-naming-existing): New tests.
2019-04-24 20:59:25 -04:00
Paul Eggert
2bf957394c Improve port to platforms lacking euidaccess (Bug#35406)
* lib-src/emacsclient.c (set_local_socket):
Use faccessat with AT_EACCESS instead of using euidaccess.
* admin/merge-gnulib, lib/gnulib.mk.in, m4/gnulib-comp.m4:
Revert previous change.
2019-04-24 17:42:09 -07:00
Paul Eggert
445713f555 Port to platforms lacking euidaccess (Bug#35406)
* admin/merge-gnulib (GNULIB_MODULES): Add euidaccess.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
2019-04-24 17:34:32 -07:00
Paul Eggert
41cc2b6490 Merge from gnulib 2019-04-24 17:34:32 -07:00
Mark Oteiza
4494789d2c Fix some strings in wordstar mode
* lisp/obsolete/ws-mode.el (ws-search-direction, ws-error, ws-end-block):
(ws-mark-word, ws-undo, ws-goto-last-cursorposition, ws-last-error):
(ws-kill-bol): Remove full stops from message string endings.  Minor
formatting tweaks.
2019-04-24 19:44:48 -04:00
Mark Oteiza
cb17e9c42e Change WordStar emulation into a minor mode (Bug#35148)
* lisp/obsolete/ws-mode.el: Turn on lexical-binding.  Update commentary.
(wordstar): New custom group.
(wordstar-mode-lighter): New custom variable.
(wordstar-mode): Declare with define-minor-mode.
(turn-on-wordstar-mode): New function.
(global-wordstar-mode): New function.  Use previous new function.
2019-04-24 19:38:20 -04:00
Dmitry Gutov
f0e026a849 Fix project-find-regexp search for '--'
* lisp/progmodes/project.el (project--find-regexp-in-files):
Add an explicit '-e' before the pattern.  Fixing the ability to
search for '--'.  Reported by Juri Linkov <juri@linkov.net>.
2019-04-25 02:26:45 +03:00
Juri Linkov
62072bad41 * lisp/windmove.el (windmove-display-in-direction): Support consecutive calls
Remember action and delete it from display-buffer-overriding-action afterwards
2019-04-25 00:40:27 +03:00
Philipp Stephani
4eb7f9ef59 Unbreak build when building without GMP support.
Add support for a new preprocessor macro EMACS_MODULE_HAVE_MPZ_T to
emacs-module.h.  If this macro is defined, assume that mpz_t is
already defined and don’t include gmp.h.

Don’t document the new macro for now, as it’s unclear whether we want
to support this in modules outside the Emacs tree.

* src/emacs-module.h.in: Allow user to prevent inclusion of gmp.h.

* src/emacs-module.c: Use mini-gmp if GMP is unavailable.  Don’t
include gmp.h.

* src/lisp.h: Don’t require gmp.h.  It’s not needed for lisp.h.

* test/Makefile.in (GMP_LIB, GMP_OBJ): New variables.
($(test_module)): Use them.

* test/data/emacs-module/mod-test.c: Use mini-gmp if GMP is unavailable.
2019-04-24 23:27:43 +02:00
Philipp Stephani
553220fca6 Add missing GMP library to test module.
* test/Makefile.in (GMP_LIB): Define variable.
($(test_module)): Use it.
2019-04-24 23:14:13 +02:00
Philipp Stephani
d2e1bac478 Move definition of Lisp_Module_Function to emacs-module.c.
* src/lisp.h: Remove include of emacs-module.h.  Remove definition
of Lisp_Module_Function structure.

* src/emacs-module.c (module_function_documentation)
(module_function_address): New accessor functions for module function
fields.
(emacs_subr, struct Lisp_Module_Function): Move from lisp.h.

* src/print.c (print_vectorlike):
* src/doc.c (Fdocumentation): Use the new accessor functions.
2019-04-24 23:12:35 +02:00
Paul Eggert
4c90369d77 Simplify thread initialization and GC
* src/lisp.h (PVECHEADERSIZE): New macro.
(XSETPVECTYPESIZE): Use it.
* src/search.c (syms_of_search): No need to initialize or
staticpro last_thing_searched or saved_last_thing_searched, as
the thread code arranges for initialization and GC.
* src/thread.c (main_thread): Initialize statically.
(Fmake_mutex, Fmake_condition_variable, Fmake_thread):
Use ALLOCATE_ZEROED_PSEUDOVECTOR rather than zeroing by hand.
(mark_one_thread): No need to mark Lisp_Object members.
(init_main_thread, init_threads_once): Remove.  All uses removed.
2019-04-24 13:37:15 -07:00
Eli Zaretskii
c5358e831f Regenerate src/emacs-module.h when emacs-module.h.in changes
* Makefile.in (CONFIG_STATUS_FILES_IN): Add
src/emacs-module.h.in.
2019-04-24 18:38:31 +03:00
Eli Zaretskii
2b3c0ae582 Fix rescheduling timers after suspension
* lisp/emacs-lisp/timer.el (timer-event-handler): Fix the
comparison between next invocation time and current time.
2019-04-24 18:13:04 +03:00
Eli Zaretskii
f6e6c1744b Fix posn-at-point with line-number display and display properties
* src/xdisp.c (pos_visible_p): Account for line-number display
width when CHARPOS is covered by display property that begins
at the 2nd display element of a screen line.  (Bug#35404)
2019-04-24 15:26:54 +03:00
Eli Zaretskii
a2e9d3e335 Fix a typo in a recent commit
* src/timefns.c (timespec_to_lisp): Fix a typo in function
definition.
2019-04-24 15:18:18 +03:00
Philipp Stephani
b6d8d34aed * doc/lispref/internals.texi (Module Values): Add a GMP example 2019-04-24 13:54:54 +02:00
Philipp Stephani
c4bacb1215 Clarify rounding mode when converting to struct timespec.
* doc/lispref/internals.texi (Module Values): Clarify that the
truncation is towards negative infinity.

* test/data/emacs-module/mod-test.c (Fmod_test_nanoseconds): Add test
function.
(emacs_module_init): Define it.

* test/src/emacs-module-tests.el (mod-test-nanoseconds): New unit test.
2019-04-24 13:41:05 +02:00
Philipp Stephani
534c33cf37 Fix return type of make_time.
make_time is documented to return a (TICKS . HZ) pair, so we can’t use
make_lisp_time.  Introduce a new conversion function instead.

* src/emacs-module.c (module_make_time): Use timespec_to_lisp to
correct return type.

* src/timefns.c (timespec_to_lisp): New function.
(make_lisp_time): Use it.

* test/src/emacs-module-tests.el (mod-test-add-nanosecond/valid):
Check return type.
2019-04-24 13:17:53 +02:00
Philipp Stephani
e290a7d173 Add module functions to convert from and to big integers.
* src/module-env-27.h: Add new module functions to convert big
integers.

* src/emacs-module.h.in (emacs_mpz): Define if GMP is available.

* src/emacs-module.c (module_extract_big_integer)
(module_make_big_integer): New functions.
(initialize_environment): Use them.

* test/data/emacs-module/mod-test.c (Fmod_test_double): New test
function.
(emacs_module_init): Define it.

* test/src/emacs-module-tests.el (mod-test-double): New unit test.

* doc/lispref/internals.texi (Module Values): Document new functions.
2019-04-24 12:53:54 +02:00
Philipp Stephani
bffceab633 Add conversions to and from struct timespec to module interface.
Time values are a fundamental data type, and such conversions are hard
to implement within modules because of the various forms of time
values in Emacs Lisp.  Adding dedicated conversion functions can
significantly simplify module code dealing with times.

This approach uses nanosecond precision.  While Emacs in theory has
support for higher-precision time values, in practice most languages
and standards, such as POSIX, C, Java, and Go, have settled on
nanosecond-precision integers to represent time.

* src/emacs-module.h.in: Add header for struct timespec.

* src/module-env-27.h: Add module functions for time conversion.

* src/emacs-module.c (module_extract_time, module_make_time): New
functions.
(initialize_environment): Use them.

* test/data/emacs-module/mod-test.c (Fmod_test_add_nanosecond): New
test function.
(emacs_module_init): Define it.

* test/src/emacs-module-tests.el (mod-test-add-nanosecond/valid)
(mod-test-add-nanosecond/nil, mod-test-add-nanosecond/invalid): New
unit tests.

* doc/lispref/internals.texi (Module Values): Document time
conversion functions.
2019-04-24 11:33:52 +02:00
Eli Zaretskii
5ae407aad4 Revert "Remove font.c code commented out for a decade"
This reverts commit 64d0cd9810.

Rationale: any font-related code and comments, even if unused
for decades, serves as important source of useful information
in an area of Emacs code that is notoriously under-documented.

Please do NOT remove this stuff until we have an active
expert in this are on board, who will then decide whether
this can be retired.
2019-04-24 09:38:03 +03:00
YAMAMOTO Mitsuharu
5f4e8e2e08 Don't link libXft when using cairo
* configure.ac: Check cairo early.  Don't try Xft if cairo is used.
* lwlib/lwlib-utils.h [USE_CAIRO]: Include cairo.h and fontconfig.h.
(XftFont, XftDraw, XftColor, XGlyphInfo) [USE_CAIRO]: New typedefs.
(XftFontOpenName, XftFontClose, XftDrawCreate, XftDrawDestroy)
(XftDrawRect, XftDrawStringUtf8, XftTextExtentsUtf8) [USE_CAIRO]: New macros.
(crxft_font_open_name, crxft_font_close, crxft_draw_create)
(crxft_draw_rect, crxft_draw_string, crxft_text_extents) [USE_CAIRO]: New
externs.
* lwlib/lwlib-utils.c [USE_CAIRO]: Include math.h, cairo-ft.h, and
cairo-xlib.h.
(crxft_font_open_name, crxft_font_close, crxft_draw_create)
(crxft_set_source_color, crxft_draw_rect, crxft_draw_string)
(crxft_text_extents) [USE_CAIRO]: New Xft compatibility functions.
* lwlib/xlwmenuP.h [USE_CAIRO]: Include lwlib-utils.h.
* lwlib/xlwmenu.c (display_menu_item) [USE_CAIRO]: Call
cairo_surface_mark_dirty and cairo_surface_flush.
* lwlib/lwlib-Xaw.c [USE_CAIRO]: Include stdlib.h and lwlib-utils.h.
(draw_text) [USE_CAIRO]: Call cairo_surface_flush.
* src/xsettings.c [USE_CAIRO]: Include fontconfig.h
(apply_xft_settings) [!HAVE_XFT]: Don't call XftDefaultSubstitute or
XftDefaultSet.
* lwlib/lwlib-Xaw.c:
* lwlib/lwlib-int.h:
* lwlib/xlwmenu.c:
* lwlib/xlwmenuP.h:
* src/xrdb.c:
* src/xsettings.c:
* src/xterm.c: Replace all #ifdef HAVE_XFT with #if defined USE_CAIRO ||
defined HAVE_XFT.
* src/xfns.c (x_default_font_parameter): Replace #ifdef HAVE_XFT with #if
defined	USE_CAIRO || defined HAVE_XFT.
2019-04-24 12:31:37 +09:00
Stefan Monnier
1828e9a9b7 * lisp/emacs-lisp/timer-list.el: Fix header-line alignment
Enable lexical-binding.
(cl-print-compiled, cl-print-compiled-button): Declare.
(timer-list-mode): Add spacing to align the header.
2019-04-23 17:54:13 -04:00
Philipp Stephani
3d30b651ca * src/emacs-module.c: Add an additional requirement for API changes. 2019-04-23 23:39:35 +02:00
Paul Eggert
51595f5340 Remove some unnecessary #ifdef directives
These directives are in files that are compiled only if the
symbols are defined.
* src/gfilenotify.c: Remove unnecessary ‘#ifdef HAVE_GFILENOTIFY’.
* src/inotify.c: Remove unnecessary ‘#ifdef HAVE_INOTIFY’.
* src/kqueue.c: Remove unnecessary ‘#ifdef HAVE_KQUEUE’.
2019-04-23 13:51:57 -07:00
Stefan Monnier
26f9a77f24 * etc/package-keyring.gpg: Add the 2019 key 2019-04-23 16:36:59 -04:00
Paul Eggert
64d0cd9810 Remove font.c code commented out for a decade
* src/font.c (LSTRING_HEADER_SIZE, LSTRING_GLYPH_SIZE, check_gstring)
(check_otf_features, otf_list, otf_tag_symbol, otf_open)
(font_otf_capability, generate_otf_features)
(font_otf_DeviceTable, font_otf_ValueRecord)
(font_otf_Anchor, Ffont_drive_otf, Ffont_otf_alternates)
(Fdraw_string, syms_of_font): Remove "experimental and not
tested much" code that has been "#if 0"-ed out for more than a
decade and which was getting in the way of maintenance.
2019-04-23 13:30:14 -07:00
Philipp Stephani
259dfd20b9 Use three-argument form for out-of-range errors.
This provides more debugging hints for callers.

* src/emacs-module.c (module_copy_string_contents): Use three-argument
form of args-out-of-range.
2019-04-23 16:59:46 +02:00
Philipp Stephani
eaea40b337 Use high-level integer conversion macro in a few cases.
INT_TO_INTEGER is more obviously correct and means we don’t have to
worry about data type sizes and signedness.

* src/json.c (json_parse_error): Use INT_TO_INTEGER.  The tiny
performance gain of make_fixed_natnum isn’t worth the trouble then
signaling an error.
2019-04-23 16:51:10 +02:00
Mattias Engdegård
ecab8835a0 Rename auto-revert-notify-watch-descriptor-hash-list
* lisp/autorevert.el
(auto-revert-notify-watch-descriptor-hash-list):
Rename to auto-revert--buffers-by-watch-descriptor.  Improved doc string.
(auto-revert-notify-rm-watch, auto-revert-notify-add-watch,
auto-revert-notify-handler): Use new name.
2019-04-23 16:40:51 +02:00
Michael Albinus
e8c07cae5f Remote processes cannot use a pipe process for stderr
* doc/lispref/processes.texi (Asynchronous Processes):
(Accepting Output): Remote processes cannot use a pipe process for
stderr.
2019-04-23 16:07:38 +02:00
Philipp Stephani
d9d592dd44 * src/json.c (json_make_string): Add missing cast. 2019-04-23 15:31:17 +02:00
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
Philipp Stephani
b59429a43e Small fix for a JSON unit test.
* test/src/json-tests.el (json-parse-string/null): Make JSON object
syntactically valid.  This test is supposed to check whether an
escaped null character causes an error, but without quoting the string
it would be syntactically invalid in any case.
2019-04-23 12:00:32 +02:00
Alan Mackenzie
0d5caa9a0c Optimize for typing characters into long C++ raw strings.
* lisp/progmodes/cc-fonts.el (c-font-lock-complex-decl-prepare)
(c-font-lock-objc-methods) (c-font-lock-declarations, c-font-lock-enum-tail)
(c-font-lock-cut-off-declarators, c-font-lock-enclosing-decls): If the chunk
been fontified consists entirely of comments and strings, don't attempt to
perform the function's action.

* lisp/progmodes/cc-mode.el (c-before-change-check-unbalanced-strings): Don't
expand (c-new-BEG c-new-END) unnecessarily to the entire raw string being
fontified.
(c-fl-decl-start, c-fl-decl-end): When in a (raw or otherwise) string, don't
return a position outside of the string (which used to cause unneeded
fontification).
2019-04-23 09:16:05 +00:00
YAMAMOTO Mitsuharu
085929ca93 Release xft_data in widget destroy callback to avoid visual distraction
* lwlib/lwlib-int.h (struct _widget_instance) [HAVE_XFT]: Remove nr_xft_data.
* lwlib/lwlib-Xaw.c (find_xft_data, xaw_update_one_widget) [HAVE_XFT]: Loop
while widget member is not NULL instead of using nr_xft_data.
(xaw_destroy_instance) [HAVE_XFT]: Move xft_data release code from here ...
(destroy_xft_data) [HAVE_XFT]: ... to here.
(make_dialog) [HAVE_XFT]: Add destroy_xft_data as destroy callback for dialog.
2019-04-23 17:27:04 +09:00
Paul Eggert
6fa8d3c894 Let plain ‘make’ work even not GNU Make
* Makefile.in (top_distclean): Clean makefile as well as Makefile.
* configure.ac: If not using plain ‘make’, create a makefile
so that plain ‘make’ simply calls $(MAKE).
2019-04-22 20:44:54 -07: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
27540be5c6 Improve UBSan discussion in etc/DEBUG
* etc/DEBUG: Improve -gdwarf-N documentation.
Go into more detail about UndefinedBehaviorSanitizer.
2019-04-22 17:26:25 -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