1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-15 03:11:54 -07:00
Commit graph

47962 commits

Author SHA1 Message Date
Gregory Heytings
aef803d6c3 Merge master into feature/improved-locked-narrowing. 2022-10-30 17:00:35 +01:00
Eli Zaretskii
cb8918d7cc ; Fix unclean code in w32fns.c
* src/w32fns.c (setup_w32_kbdhook): Fix a typo and check errors
from the call to StringFromGUID2.  Reported by Juanma Barranquero
<lekktu@gmail.com>.
2022-10-30 14:45:18 +02:00
Eli Zaretskii
3ceaa91829 ; * src/sqlite.c (Fsqlite_select): Doc fix. (Bug#58885) 2022-10-30 10:31:00 +02:00
Po Lu
ae0ec1eede Plug big leaks upon display IO error
Frame GCs are still leaked, but there is nothing that can be
done in that case because the display connection is dead.

* src/xterm.c (x_delete_terminal): Always free xkb desc and
modmap.
2022-10-30 13:13:28 +08:00
Alan Mackenzie
31e7b9c073 Fix the subr-arity returned by native compiled functions with lots of args
This fixes bug #58739.  Make subr-arity return, e.g., (12 . 12) rather than
(12 . many) for a function with a fixed number of arguments more than 8.

* lisp/emacs-lisp/comp.el (comp-prepare-args-for-top-level): Only return a cdr
of 'many when there are &rest arguments.

* src/eval.c (eval_sub): Also check for a fixed number of args over 8 when
using the nargs + *args calling convention.
(funcall_subr): Also check numargs <= 8 before using the fixed args calling
convention.  Include the case numargs > 8 in the aMany calling convention.

* src/lisp.h (DEFUN): Amend the comment about MANY.
2022-10-29 13:21:39 +00:00
Po Lu
f826f56a41 Fix another GCC warning
* src/nsterm.m (ns_draw_glyphless_glyph_string_foreground): Fix
another compiler warning.
2022-10-29 18:22:28 +08:00
Po Lu
6f3d8ec4f5 Fix crash destroying NS frame tool bar
* src/nsterm.m (ns_draw_glyphless_glyph_string_foreground): Work
around silly GCC bug causing splurious warnings.
([EmacsWindow dealloc]): Detach tool bar before dealloc'ing
window.  (bug#58857)
2022-10-29 18:22:28 +08:00
Po Lu
6fca31fdb8 Fix last change
* src/itree.c (struct itree_iterator):
(itree_iterator_next): Fix some fields and const confusion.
2022-10-29 08:55:40 +08:00
Po Lu
fbf2bfba07 Fix function declarations in itree headers
* src/itree.h: Make all declarations `extern'.
2022-10-29 08:48:58 +08:00
Po Lu
7ca456da7f Fix coding style of latest feature branch merge
* src/itree.c (interval_stack_ensure_space)
(interval_stack_push_flagged, struct itree_iterator)
(struct check_subtree_result, check_subtree, check_tree)
(itree_newlimit, interval_tree_inherit_offset)
(interval_tree_propagate_limit, itree_node_init, itree_node_begin)
(itree_node_end, itree_create, interval_tree_rotate_left)
(interval_tree_rotate_right, interval_tree_insert_fix)
(interval_tree_insert, itree_insert, itree_node_set_region)
(interval_tree_contains, interval_tree_subtree_min)
(interval_tree_remove_fix, interval_tree_replace_child)
(interval_tree_transplant, itree_remove, itree_iterator_start)
(itree_insert_gap, itree_delete_gap, interval_node_intersects)
(itree_iterator_next, itree_iterator_narrow): Tabify.  Fix
comment and code coding style.
2022-10-29 08:47:16 +08:00
Po Lu
8562a23fc6 Include Cairo FreeType header when available
* src/xsettings.c: Include cairo-ft.h if CAIRO_HAS_FT_FONT.
(bug#58830)
2022-10-29 08:38:43 +08:00
Yuan Fu
434fc2a22e
Make Emacs compile without tree-sitter library
* lisp/treesit.el: Add function declaration forms.
* src/emacs.c: Always include syms_of_treesit.
2022-10-28 16:46:10 -07:00
Stefan Monnier
71589b101c Merge remote-tracking branch 'origin/feature/noverlay' 2022-10-28 17:44:44 -04:00
Stefan Kangas
69121c33e4 Fix warning in xsettings.c
* src/xsettings.c [USE_CAIRO]: Include cairo-ft.h.
Thanks to Vincent Bernat <bernat@luffy.cx>.
2022-10-28 23:09:49 +02:00
Stefan Monnier
d79cdcd4ff cconv.el: Fix regression in cconv-tests-interactive-closure-bug51695
The new code to make interpreted closures safe-for-space introduced
a regression in `cconv-tests-interactive-closure-bug51695`, only seen
when using TEST_LOAD_EL.
A few other issues were found and fixed along the way.

* lisp/emacs-lisp/cconv.el (cconv-fv): Change calling convention and
focus on finding the free variables.
(cconv-make-interpreted-closure): New function.

* lisp/loadup.el: Use `compiled-function-p` rather than
`byte-code-function-p` so we also use safe-for-space interpreted
closures when we build with native compilation.
(internal-make-interpreted-closure-function):
Use `cconv-make-interpreted-closure`.

* src/eval.c (syms_of_eval): Rename `internal-filter-closure-env-function`
to `internal-make-interpreted-closure-function`.
(Ffunction): Let that new var build the actual closure.

* test/lisp/emacs-lisp/cconv-tests.el
(cconv-tests-interactive-closure-bug51695): Test specifically the
interpreted case.
2022-10-28 11:33:24 -04:00
Jonas Bernoulli
1073e16960 Include more information in error data for sqlite errors
Introduce a new 'sqlite-error' and use it for all errors signaled in
'src/sqlite.c', except those that already used 'sqlite-locked-error'.
Include the values of 'sqlite3_errcode', 'sqlite3_extended_errcode',
'sqlite3_errstr' and 'sqlite3_errmsg' in the error data.

* src/sqlite.c (load_dll_functions): Load 'sqlite3_extended_errcode'.
(sqlite-load-extension): Use 'xsignal1' as required by argument type.
(syms_of_sqlite): Introduce a new error type 'sqlite-error'.
(check_sqlite, sqlite-open, bind_values, sqlite-execute)
(sqlite-select, sqlite-load-extension, sqlite-next): Use it.
(sqlite_prepare_errdata): New function.
(sqlite_prepare_errmsg): Remove function.
(sqlite-execute, sqlite-select): Use new function.
(sqlite-locked-error): Derive from 'sqlite-error'.
2022-10-28 14:33:49 +02:00
Po Lu
879c65a5fc Simplify scroll valuator reset handling
* src/xterm.c (xi_populate_device_from_info)
(xi_reset_scroll_valuators_for_device_id, xi_handle_device_changed)
(handle_one_xevent):
* src/xterm.h (struct xi_scroll_valuator_t): Get rid of
`pending_enter_reset', which was extremely convoluted and kept
hitting server bugs.  Now, valuators are reset upon all crossing
events.
2022-10-28 20:06:06 +08:00
Po Lu
90caddc986 Clean up some xwidgets code
* src/xterm.c (handle_one_xevent): [HAVE_XWIDGETS]: Fix coding
style and remove extra ifdefs.  Also avoid redundant frame
lookups in some cases.
2022-10-28 19:55:18 +08:00
Po Lu
93aff6e533 Fix Haiku subprocess support
* src/callproc.c: Disable posix_spawn on Haiku until some things
are fixed.
2022-10-28 11:41:08 +00:00
Po Lu
36ca409d72 Fix build without Cairo FreeType and fontconfig support
* src/xsettings.c (apply_xft_settings): Don't enable Xft code
unless Cairo FreeType support is present.  (bug#58830)
2022-10-28 19:35:39 +08:00
Vincent Bernat
52d4c98cec Fix detection of DPI changes in builds without Xft
* src/xsettings.c (apply_xft_settings) [!HAVE_XFT]: Support
XSETTINGS changes in non-XFT builds.  (Bug#43128)

Copyright-paperwork-exempt: yes
2022-10-28 10:27:47 +03:00
Eli Zaretskii
877f706c86 ; * src/keyboard.c (command_loop_1): Remove unused variable. 2022-10-27 15:29:46 +03:00
Eli Zaretskii
93fb14d0c8 Avoid recentering when point enters invisible text at BOL
* src/xdisp.c (try_cursor_movement): Don't say we must scroll when
point is inside invisible text at beginning of a glyph row.
(Bug#58793)
2022-10-27 15:24:53 +03:00
Po Lu
af46d8a7ec Fix reporting of iconic state on old window managers
* src/xterm.c (x_handle_wm_state): Handle IconicState if the
window manager does not support _NET_WM_STATE_HIDDEN.
2022-10-27 19:15:50 +08:00
Stefan Kangas
092776c7eb ; Update copyright years
* doc/lispref/parsing.texi:
* src/treesit.h:
* test/src/treesit-tests.el: Update copyright years.
2022-10-27 12:15:32 +02:00
Stefan Kangas
7e36fd64d2 ; Fix typos and formatting in treesit.[ch]
* src/treesit.c:
* src/treesit.h: Fix typos and formatting.
2022-10-27 12:15:18 +02:00
Stefan Kangas
53584db07e ; * src/treesit.c: Fix typos. 2022-10-27 08:22:16 +02:00
Eli Zaretskii
d6e08ff459 Fix rare problems with current-column when text is invisible
* src/indent.c (scan_for_column, compute_motion): Don't miss
compositions when the position to check for composition happens to
be inside invisible text.  (Bug#58791)
2022-10-26 17:21:45 +03:00
Po Lu
4a1e77ced6 Prevent gui_consider_frame_title from restoring dead top frames
* src/xdisp.c (unwind_format_mode_line): Check that
old_top_frame is live before selecting it.  It could have been
deleted, which leads to signals when the post-command-hook
installed by xterm-set-window-title runs upon the last frame of
a terminal being deleted.
(gui_consider_frame_title): Rearrange code to be more
understandable.
2022-10-26 21:46:58 +08:00
Po Lu
32dd769ca4 Clean up some event handling code
* src/xterm.c (handle_one_xevent): Use dpyinfo where
FRAME_DISPLAY_INFO could be substituted for it.
2022-10-26 20:38:05 +08:00
Po Lu
832bd2dfe5 Fix Haiku build for recent changes to system headers
* src/callproc.c (emacs_posix_spawn_init_actions): Do not use
posix_spawn_file_actions_addchdir on Haiku; it links but does
not work.
2022-10-26 15:00:35 +08:00
Andrea Corallo
5ad5b797f7 Set `comp-no-spawn' earlier using -no-comp-spawn
* src/emacs.c (standard_args): Add '-no-comp-spawn' cmd line option.
* lisp/startup.el (command-line): Parse '-no-comp-spawn' cmd line
option.
* lisp/emacs-lisp/comp.el (comp-run-async-workers, comp-final):
Use '-no-comp-spawn'.
2022-10-26 08:30:09 +02:00
Yuan Fu
e868955bff
* src/treesit.c (treesit_search_dfs): Fix traverse algorithm. 2022-10-25 22:48:30 -07:00
Yuan Fu
5c1b9e65b9
; * src/treesit.c (treesit_search_forward): Fix comment. 2022-10-25 20:28:40 -07:00
Yuan Fu
c9df4cace0
* src/treesit.c (treesit_search_forward): Fix traverses algorithm. 2022-10-25 19:49:03 -07:00
Andreas Schwab
33647b6d63 Ignore non-base64 junk when decoding MIME
* src/fns.c (Fbase64_decode_region): Add optional argument
IGNORE-INVALID and pass down to base64_decode_1.
(Fbase64_decode_string): Likewise.
(base64_decode_1): Add argument IGNORE_INVALID.
* doc/lispref/text.texi (Base 64): Document them.
* lisp/gnus/mm-bodies.el (mm-decode-content-transfer-encoding):
Ignore any junk when decoding base64.
2022-10-25 21:47:18 +02:00
Stefan Monnier
1b1ffe0789 (Ffunction): Make interpreted closures safe for space
Interpreted closures currently just grab a reference to the complete
lexical environment, so (lambda (x) (+ x y)) can end up looking like

    (closure ((foo ...) (y 7) (bar ...) ...)
             (x) (+ x y))

where the foo/bar/... bindings are not only useless but can prevent
the GC from collecting that memory (i.e. it's a representation that is
not "safe for space") and it can also make that closure "unwritable"
(or more specifically, it can cause the closure's print
representation to be u`read`able).

Compiled closures don't suffer from this problem because `cconv.el`
actually looks at the code and only stores in the compiled closure
those variables which are actually used.

So, we fix this discrepancy by letting the existing code in `cconv.el` tell
`Ffunction` which variables are actually used by the body of the
function such that it can filter out the irrelevant elements and
return a closure of the form:

    (closure ((y 7)) (x) (+ x y))

* lisp/loadup.el: Preload `cconv` and set
`internal-filter-closure-env-function` once we have a usable `cconv-fv`.

* lisp/emacs-lisp/bytecomp.el (byte-compile-preprocess): Adjust to new
calling convention of `cconv-closure-convert`.
(byte-compile-not-lexical-var-p): Delete function, moved to `cconv.el`.
(byte-compile-bind): Use `cconv--not-lexical-var-p`.

* lisp/emacs-lisp/cconv.el (cconv--dynbound-variables): New var.
(cconv-closure-convert): New arg `dynbound-vars`
(cconv--warn-unused-msg): Remove special case for `ignored`,
so we don't get confused when a function uses an argument called
`ignored`, e.g. holding a list of things that it should ignore.
(cconv--not-lexical-var-p): New function, moved from `bytecomp.el`.
Don't special case keywords and `nil` and `t` since they are already
`special-variable-p`.
(cconv--analyze-function): Use `cconv--not-lexical-var-p`.
(cconv--dynbindings): New dynbound var.
(cconv-analyze-form): Use `cconv--not-lexical-var-p`.
Remember in `cconv--dynbindings` the vars for which we used
dynamic scoping.
(cconv-analyze-form): Use `cconv--dynbound-variables` rather than
`byte-compile-bound-variables`.
(cconv-fv): New function.

* src/eval.c (Fsetq, eval_sub): Remove optimization designed when
`lexical-binding == nil` was the common case.
(Ffunction): Use `internal-filter-closure-env-function` when available.
(eval_sub, Ffuncall): Improve error info for `excessive_lisp_nesting`.
(internal-filter-closure-env-function): New defvar.
2022-10-25 14:24:54 -04:00
Eli Zaretskii
92ec31a48c Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs 2022-10-25 14:59:39 +03:00
Lin Sun
095dadf277 lisp.h: Remove unnecessary preprocessor conditions
This removes the HAVE_PDUMPER || HAVE_UNEXEC condition
of gflags.will_dump_, which gets in the way when Emacs
is built without any dumping method.  (Bug#58708)
2022-10-25 14:53:01 +03:00
Po Lu
b6097fe279 Fix drag-and-drop bugs on Lucid build
Also, optimize Fx_translate_coordinates to avoid excessive calls
to _XReply.

* lisp/x-dnd.el (x-dnd-get-drop-rectangle): Return empty drop
rectangle if posn-area.
* src/xfns.c (Fx_translate_coordinates): Accept arg
`require_child'.  If not set, allow optimizations based on
cached position data.
* src/xselect.c (x_handle_dnd_message): Use
x_translate_coordinates.
* src/xterm.c (x_translate_coordinates): Export function.
(x_handle_translate_coordinates): New function.
(handle_one_xevent): Fix coding style.
* src/xterm.h: Update prototypes.
2022-10-25 19:51:08 +08:00
Po Lu
eb3f8d1b64 Fix focus stealing in the Emacs server for old window managers
* src/xterm.c (x_focus_frame): Apply focus stealing preference
to non-EWMH focus as well.  Otherwise frames get raised but not
focused.
2022-10-24 19:18:49 +08:00
Mattias Engdegård
36f5a1a7e7 Fix regexp matching with atomic strings and optimised backtracking
This bug occurs when an atomic pattern is matched at the end of
a string and the on-failure-keep-string-jump optimisation is
in effect, as in:

  (string-match "\\'\\(?:ab\\)*\\'" "a")

which succeeded but clearly should not (bug#58726).

Reported by Michael Heerdegen.

* src/regex-emacs.c (PREFETCH): Add reset parameter.
(re_match_2_internal): Use it for proper atomic pattern treatment.
* test/src/regex-emacs-tests.el (regexp-atomic-failure): New test.
2022-10-24 11:50:13 +02:00
Yuan Fu
591759d508
Make treesit-node-child and fiends accept negative index
* doc/lispref/parsing.texi (Retrieving Node): Update manual.
* src/treesit.c (Ftreesit_node_child)
(Ftreesit_node_field_name_for_child): Accept and process negative
index.
2022-10-23 18:05:10 -07:00
Yuan Fu
fa9bede36c
Change function signiture of treesit search functions
Justification: We want to make the SIDE argument in
treesit-search-forward-goto optional, so I changed it to START.
It makes more sense for BACKWARD to follow START so two common
case, search for end forward and beginning backwards are

(treesit-search-forward-goto node pred)
(treesit-search-forward-goto node pred t t)

Then since we swapped BACKWARD and ALL for
treesit-search-forward-goto, it's best to swap them for
treesit-search-forward and treesit-search-subtree, too.  And BACKWARD
will probably be used more frequently than ALL anyway.

* doc/lispref/parsing.texi (Retrieving Node): Resolve FIXME and update
function signitures.
* lisp/treesit.el (treesit-search-forward-goto): Change SIDE to
START, swap BACKWARD and ALL.
(treesit-beginning-of-defun)
(treesit-end-of-defun): Update use of treesit-search-forward-goto
* src/treesit.c (Ftreesit_search_subtree)
(Ftreesit_search_forward): Swap BACKWARD and ALL.
2022-10-23 15:19:00 -07:00
Yuan Fu
6a2399c55e
; Resolve FIXME's in tree-sitter manual sections
* doc/lispref/modes.texi (Parser-based Indentation):
* doc/lispref/parsing.texi (Retrieving Node): Resolve FIXME's.
* src/treesit.c: Update tree graph in docstring.
2022-10-23 14:30:14 -07:00
Matt Armstrong
9d7ba2b199 Fix compiler warning about possible null pointer dereference
* src/itree.c (interval_tree_remove_fix): Use 'eassert' to both check
for non-null and suppress a compiler warning.
2022-10-23 09:00:01 -07:00
Po Lu
a01bd1a208 Reduce duplicate code for creating "special windows"
* src/xterm.c (x_create_special_window): Define on all non-GTK
builds and all builds with XFixes.
(x_update_frame_user_time_window): Use x_create_special_window.
Also write a comment explaining what user time windows are.
* src/xterm.h: Fix style of `x_parse_color' prototype.
2022-10-23 14:13:19 +08:00
Yuan Fu
57b904f4ba
Fix infinite loop in treesit-search-forward-goto
* lisp/treesit.el (treesit-search-forward-goto): Remove UP argument.
* src/treesit.c (treesit_traverse_child_helper): New function.
(treesit_search_forward): Remove UP_ONLY and SKIP_START argument.
Don't traverse subtree of START.  And after we've found the next
sibling/parent, go down to the first leaf node.  Also change recursion
to loop.
(Ftreesit_search_forward): Change docstring, remove UP argument.
2022-10-22 22:50:56 -07:00
Matt Armstrong
b78be2bf7a Fix `get-pos-property' for the new overlay implementation.
Some of the trickier edge cases weren't handled properly.  See
bug#58706.

* src/editfns.c (overlays_around): Extend the search range past POS by
one to fetch overlays beginning at POS.  Fetch empty overlays, as they
may be extended by an insertion and thus be relevant to
`get-pos-property'.  Make a note that the function now, unfortunately,
may return out of range overlays.
(Fget_pos_property): Deal with 'overlays_around' returning out of
range overlays.
2022-10-22 20:58:21 -07:00
Basil L. Contovounesios
9da2efb670 Audit some plist uses with new predicate argument
* doc/lispref/lists.texi (Plist Access): Improve description of
default predicate.
* lisp/emacs-lisp/cl-extra.el (cl-getf, cl--set-getf): Assume
plist-member always returns a cons.
* lisp/emacs-lisp/gv.el (plist-get): Support new optional predicate
argument (bug#47425#91).
* lisp/emacs-lisp/map.el: Bump minor version.
(map--dispatch): Remove now that bug#58563 is fixed.  Break two
remaining uses out into corresponding cl-defmethods.
(map--plist-p): Add docstring.
(map--plist-has-predicate, map--plist-member-1, map--plist-member)
(map--plist-put-1, map--plist-put): New definitions for supporting
predicate argument backward compatibly.
(map-elt): Fix generalized variable getter under a
predicate (bug#58531).  Use predicate when given a plist.
(map-put): Avoid gratuitous warnings when called without the hidden
predicate argument.  Improve obsoletion message.
(map-put!): Use predicate when given a plist.
(map-contains-key): Ditto.  Declare forgotten
advertised-calling-convention (bug#58531#19).
(map--put): Group definition in file together with that of map-put!.
* lisp/files-x.el (connection-local-normalize-criteria): Simplify
using mapcan + plist-get.
* lisp/net/eudc.el (eudc--plist-member): New convenience function.
(eudc-plist-member, eudc-plist-get, eudc-lax-plist-get): Use it
instead of open-coding plist-member.
* src/fns.c (Fplist_get, plist_get, Fplist_put, plist_put): Pass the
plist element as the first argument to the predicate, for
consistency with assoc + alist-get.
(Fplist_member, plist_member): Move from widget to plist section.
Open-code the EQ case in plist_member, and call it from
Fplist_member in that case, rather than the other way around.

* test/lisp/apropos-tests.el (apropos-tests-format-plist): Avoid
polluting obarray.
* test/lisp/emacs-lisp/cl-extra-tests.el (cl-getf): Extend test with
generalized variables, degenerate plists, and improper lists.
* test/lisp/emacs-lisp/gv-tests.el: Byte-compile file; in the
meantime bug#24402 seems to have been fixed or worked around.
(gv-setter-edebug): Inhibit printing messages.
(gv-plist-get): Avoid modifying constant literals.  Also test with a
predicate argument.
* test/lisp/emacs-lisp/map-tests.el (with-maps-do): Simplify
docstring.
(test-map-elt-testfn): Rename...
(test-map-elt-testfn-alist): ...to this.  Also test with a predicate
argument.
(test-map-elt-testfn-plist, test-map-elt-gv, test-map-elt-signature)
(test-map-put!-plist, test-map-put!-signature)
(test-map-contains-key-signature, test-map-plist-member)
(test-map-plist-put): New tests.
(test-map-contains-key-testfn): Also test with a predicate argument.
(test-map-setf-alist-overwrite-key, test-map-setf-plist-insert-key)
(test-map-setf-plist-overwrite-key): Avoid modifying constant
literals.
(test-hash-table-setf-insert-key)
(test-hash-table-setf-overwrite-key): Fix indentation.
(test-setf-map-with-function): Make test more precise.
* test/lisp/net/eudc-tests.el: New file.
* test/lisp/subr-tests.el (test-plistp): Extend test with circular
list.
* test/src/fns-tests.el (test-cycle-equal, test-cycle-nconc): Move
from plist section to circular list section.
(plist-put/odd-number-of-elements): Avoid modifying constant
literals.
(plist-member/improper-list): Simplify.
(test-plist): Move to plist section.  Also test with a predicate
argument.
2022-10-22 19:33:12 +03:00