aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPo Lu2024-08-07 09:21:27 +0800
committerPo Lu2024-08-07 09:21:27 +0800
commit1a4c26d413f06342fc7fa9230f9312a95a37dae3 (patch)
tree26a1bde5bef543ea897022c1e44f807adfd040de
parentaa5c725fe7ba0a5e67ce1029061b2d887ddeb949 (diff)
parent679f7ccc49f6300681309029f4e58cffe3e9ff1a (diff)
downloademacs-1a4c26d413f06342fc7fa9230f9312a95a37dae3.tar.gz
emacs-1a4c26d413f06342fc7fa9230f9312a95a37dae3.zip
Merge from savannah/emacs-30
679f7ccc49f Prevent accesses to /content files without a GUI connection f0a7eec5a7d * lisp/net/tramp-integration.el (shortdoc): Use `tramp--w... fb642d9cf54 Merge branch 'emacs-30' of git.savannah.gnu.org:/srv/git/... f1e37ae423f Avoid crashes in very large buffers with long lines 4dc9e99349d Update description of string comparison functions 3817355aed5 Add sanity check when adding Tramp functions to shortdoc 1bbb3220179 ; * lisp/erc/erc-fill.el (erc-fill-wrap-mode): Doc fix. 3f6e7e1da68 js-ts-mode: Make jsdoc's "description" block a comment (b... 1c7e00f4f65 Also condition cjk-misc font-spec on Android b89d65df5fa ; * etc/PROBLEMS: How to install sources on SUSE Linux (b... 729b17c2026 ; * src/lread.c (Fload): Add comment. (Bug#72433) bfb1aee9989 Fix ':defer nil' in 'use-package' d787817076e Document unsupported color Emoji on OpenBSD db1f749db55 Fix regressions in Customize caused by 'widget-unselected... f94d58008eb Avoid inserting extra space in SVG data 292fcd20099 Fix c-ts-common filling function (bug#71760) e50d597f450 Fix missing type checks before specbind # Conflicts: # lisp/progmodes/c-ts-common.el
-rw-r--r--doc/lispref/sequences.texi5
-rw-r--r--doc/lispref/strings.texi45
-rw-r--r--etc/PROBLEMS41
-rw-r--r--lisp/erc/erc-fill.el20
-rw-r--r--lisp/international/fontset.el4
-rw-r--r--lisp/net/tramp-integration.el61
-rw-r--r--lisp/progmodes/c-ts-common.el5
-rw-r--r--lisp/progmodes/js.el4
-rw-r--r--lisp/svg.el1
-rw-r--r--lisp/use-package/use-package-core.el6
-rw-r--r--lisp/wid-edit.el5
-rw-r--r--src/androidvfs.c5
-rw-r--r--src/eval.c22
-rw-r--r--src/lread.c3
-rw-r--r--src/xdisp.c12
-rw-r--r--test/src/eval-tests.el8
16 files changed, 157 insertions, 90 deletions
diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi
index 9b0a0d74f30..079fc6094c3 100644
--- a/doc/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -468,8 +468,9 @@ Specifically:
468@item 468@item
469Numbers are compared using @code{<} (@pxref{definition of <}). 469Numbers are compared using @code{<} (@pxref{definition of <}).
470@item 470@item
471Strings are compared using @code{string<} (@pxref{definition of 471Strings are compared using @code{string-lessp} (@pxref{definition of
472string<}) and symbols are compared by comparing their names as strings. 472string-lessp}) and symbols are compared by comparing their names as
473strings.
473@item 474@item
474Conses, lists, vectors and records are compared lexicographically. This 475Conses, lists, vectors and records are compared lexicographically. This
475means that the two sequences are compared element-wise from left to 476means that the two sequences are compared element-wise from left to
diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi
index 06094e45aad..5da9acd4eb5 100644
--- a/doc/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -502,7 +502,7 @@ in case if @code{case-fold-search} is non-@code{nil}.
502@end example 502@end example
503@end defun 503@end defun
504 504
505@defun string= string1 string2 505@defun string-equal string1 string2
506This function returns @code{t} if the characters of the two strings 506This function returns @code{t} if the characters of the two strings
507match exactly. Symbols are also allowed as arguments, in which case 507match exactly. Symbols are also allowed as arguments, in which case
508the symbol names are used. Case is always significant, regardless of 508the symbol names are used. Case is always significant, regardless of
@@ -513,25 +513,25 @@ This function is equivalent to @code{equal} for comparing two strings
513the two strings are ignored; use @code{equal-including-properties} if 513the two strings are ignored; use @code{equal-including-properties} if
514you need to distinguish between strings that differ only in their text 514you need to distinguish between strings that differ only in their text
515properties. However, unlike @code{equal}, if either argument is not a 515properties. However, unlike @code{equal}, if either argument is not a
516string or symbol, @code{string=} signals an error. 516string or symbol, @code{string-equal} signals an error.
517 517
518@example 518@example
519(string= "abc" "abc") 519(string-equal "abc" "abc")
520 @result{} t 520 @result{} t
521(string= "abc" "ABC") 521(string-equal "abc" "ABC")
522 @result{} nil 522 @result{} nil
523(string= "ab" "ABC") 523(string-equal "ab" "ABC")
524 @result{} nil 524 @result{} nil
525@end example 525@end example
526 526
527A unibyte and a multibyte string are equal in the sense of 527A unibyte and a multibyte string are equal in the sense of
528@code{string=} if and only if they contain the same sequence of 528@code{string-equal} if and only if they contain the same sequence of
529character codes all being in the range 0--127 (@acronym{ASCII}). 529character codes all being in the range 0--127 (@acronym{ASCII}).
530@xref{Text Representations}. 530@xref{Text Representations}.
531@end defun 531@end defun
532 532
533@defun string-equal string1 string2 533@defun string= string1 string2
534@code{string-equal} is another name for @code{string=}. 534@code{string=} is another name for @code{string-equal}.
535@end defun 535@end defun
536 536
537@defun string-equal-ignore-case string1 string2 537@defun string-equal-ignore-case string1 string2
@@ -597,9 +597,8 @@ that collation implements.
597@end defun 597@end defun
598 598
599@cindex lexical comparison of strings 599@cindex lexical comparison of strings
600@anchor{definition of string<} 600@anchor{definition of string-lessp}
601@defun string< string1 string2 601@defun string-lessp string1 string2
602@c (findex string< causes problems for permuted index!!)
603This function compares two strings a character at a time. It 602This function compares two strings a character at a time. It
604scans both the strings at the same time to find the first pair of corresponding 603scans both the strings at the same time to find the first pair of corresponding
605characters that do not match. If the lesser character of these two is 604characters that do not match. If the lesser character of these two is
@@ -618,11 +617,11 @@ multibyte non-@acronym{ASCII} character (@pxref{Text Representations}).
618 617
619@example 618@example
620@group 619@group
621(string< "abc" "abd") 620(string-lessp "abc" "abd")
622 @result{} t 621 @result{} t
623(string< "abd" "abc") 622(string-lessp "abd" "abc")
624 @result{} nil 623 @result{} nil
625(string< "123" "abc") 624(string-lessp "123" "abc")
626 @result{} t 625 @result{} t
627@end group 626@end group
628@end example 627@end example
@@ -634,15 +633,15 @@ no characters is less than any other string.
634 633
635@example 634@example
636@group 635@group
637(string< "" "abc") 636(string-lessp "" "abc")
638 @result{} t 637 @result{} t
639(string< "ab" "abc") 638(string-lessp "ab" "abc")
640 @result{} t 639 @result{} t
641(string< "abc" "") 640(string-lessp "abc" "")
642 @result{} nil 641 @result{} nil
643(string< "abc" "ab") 642(string-lessp "abc" "ab")
644 @result{} nil 643 @result{} nil
645(string< "" "") 644(string-lessp "" "")
646 @result{} nil 645 @result{} nil
647@end group 646@end group
648@end example 647@end example
@@ -651,8 +650,8 @@ Symbols are also allowed as arguments, in which case their print names
651are compared. 650are compared.
652@end defun 651@end defun
653 652
654@defun string-lessp string1 string2 653@defun string< string1 string2
655@code{string-lessp} is another name for @code{string<}. 654@code{string<} is another name for @code{string-lessp}.
656@end defun 655@end defun
657 656
658@defun string-greaterp string1 string2 657@defun string-greaterp string1 string2
@@ -661,6 +660,10 @@ This function returns the result of comparing @var{string1} and
661@code{(string-lessp @var{string2} @var{string1})}. 660@code{(string-lessp @var{string2} @var{string1})}.
662@end defun 661@end defun
663 662
663@defun string> string1 string2
664@code{string>} is another name for @code{string-greaterp}.
665@end defun
666
664@cindex locale-dependent string comparison 667@cindex locale-dependent string comparison
665@defun string-collate-lessp string1 string2 &optional locale ignore-case 668@defun string-collate-lessp string1 string2 &optional locale ignore-case
666This function returns @code{t} if @var{string1} is less than 669This function returns @code{t} if @var{string1} is less than
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index c1ad8321fa6..7d7c9ab5f27 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -456,6 +456,26 @@ However, the exact directory name will depend on the system, and you
456will need to both upgrade source and debug info when your system 456will need to both upgrade source and debug info when your system
457upgrades or patches Emacs, and change your startup file accordingly. 457upgrades or patches Emacs, and change your startup file accordingly.
458 458
459** SUSE based distributions (openSUSE, SUSE Linux Enterprise)
460
461On systems with distributions, you can install source and debug info via
462superuser commands like the following:
463
464 # Install Emacs source and debuginfo by using --plus-content
465 zypper --plus-content debug,source install \
466 emacs-debuginfo emacs-debugsource
467
468To get describe-function and similar commands to work, you can then add
469something like the following to your startup file:
470
471 (setq find-function-C-source-directory
472 "/usr/src/debug/emacs-27.1-1/src/")
473
474The line above should work for all systems using zypper besides SUSE
475based ones, however it could be that you have to adjust the path to the
476sources slightly depending on the version of the distribution you have
477installed.
478
459** Source and debuginfo for other systems 479** Source and debuginfo for other systems
460 480
461If your system follows neither the Debian nor the Red Hat patterns, 481If your system follows neither the Debian nor the Red Hat patterns,
@@ -1274,6 +1294,27 @@ Emacs will select some other font instead.
1274The only workaround is not to choose such font variants as the default 1294The only workaround is not to choose such font variants as the default
1275font when running Emacs on MS-Windows. 1295font when running Emacs on MS-Windows.
1276 1296
1297** On OpenBSD, color Emoji are not supported by default.
1298
1299The system's FreeType library is not built with libpng support, so it
1300can't display color emoji. This is due to the fact that, on OpenBSD,
1301libpng is provided through ports and that a base component cannot depend
1302on that.
1303
1304However, you can add support for PNG in the system's FreeType library by
1305following those steps:
1306 1. Install the 'png' package.
1307 2. Read the release(8) man page for how to get Xenocara sources.
1308 3. Patch the file
1309 "/usr/xenocara/lib/freetype/include/freetype/config/ftoption.h"
1310 by uncommenting the "#define FT_CONFIG_OPTION_USE_PNG" line.
1311 4. Patch the file "/usr/xenocara/lib/freetype/Makefile" by
1312 appending "-L/usr/local/lib -lpng" to LDADD and appending
1313 "-I/usr/local/include" to CPPFLAGS.
1314 5. Build and install Xenocara (also, see release(8)).
1315
1316Note that this support will be gone after each OpenBSD's system upgrade.
1317
1277* Internationalization problems 1318* Internationalization problems
1278 1319
1279** M-{ does not work on a Spanish PC keyboard. 1320** M-{ does not work on a Spanish PC keyboard.
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el
index defef6fe414..c863d99a339 100644
--- a/lisp/erc/erc-fill.el
+++ b/lisp/erc/erc-fill.el
@@ -490,16 +490,15 @@ option `erc-fill-wrap-margin-width'. To use it, either include
490`erc-fill-wrap'. 490`erc-fill-wrap'.
491 491
492Once enabled, use \\[erc-fill-wrap-nudge] to adjust the width of 492Once enabled, use \\[erc-fill-wrap-nudge] to adjust the width of
493the indent and the stamp margin. And For cycling between 493the indent and the stamp margin. For cycling between
494logical- and screen-line oriented command movement, see 494logical- and screen-line oriented command movement, see
495\\[erc-fill-wrap-toggle-truncate-lines]. Similarly, use 495\\[erc-fill-wrap-toggle-truncate-lines]. Similarly, use
496\\[erc-fill-wrap-refill-buffer] to fix alignment problems after 496\\[erc-fill-wrap-refill-buffer] to fix alignment problems after
497running certain commands, like `text-scale-adjust'. Also see 497running certain commands, like `text-scale-adjust'. Also see
498related stylistic options `erc-fill-wrap-merge', and 498related stylistic options `erc-fill-wrap-merge' and
499`erc-fill-wrap-merge-indicator'. (Hint: in narrow windows, try 499`erc-fill-wrap-merge-indicator'. (Hint: in narrow windows, try
500setting `erc-fill-static-center' to 1, and if you use 500setting `erc-fill-static-center' to 1 and choosing \"Leading
501`erc-fill-wrap-merge-indicator', choose \"Leading MIDDLE DOT sans 501MIDDLE DOT sans gap\" for `erc-fill-wrap-merge-indicator'.)
502gap\" or one of the \"trailing\" items from the Customize menu.)
503 502
504This module imposes various restrictions on the appearance of 503This module imposes various restrictions on the appearance of
505timestamps. Most notably, it insists on displaying them in the 504timestamps. Most notably, it insists on displaying them in the
@@ -510,12 +509,11 @@ Additionally, this module assumes that users providing their own
510`erc-insert-timestamp-function' have also customized the option 509`erc-insert-timestamp-function' have also customized the option
511`erc-fill-wrap-margin-side' to an explicit side. When stamps 510`erc-fill-wrap-margin-side' to an explicit side. When stamps
512appear in the right margin, which they do by default, users may 511appear in the right margin, which they do by default, users may
513find that ERC actually appends them to copy-as-killed messages 512find that ERC actually appends them to copy-as-killed messages.
514without an intervening space. This normally poses at most a 513This normally poses at most a minor inconvenience. Users of the
515minor inconvenience, however users of the `log' module may prefer 514`log' module wanting to avoid this effect in logs should see
516a workaround provided by `erc-stamp-prefix-log-filter', which 515`erc-stamp-prefix-log-filter', which strips trailing stamps from
517strips trailing stamps from logged messages and instead prepends 516logged messages and instead prepends them to every line.
518them to every line.
519 517
520A so-called \"local\" module, `fill-wrap' depends on the global 518A so-called \"local\" module, `fill-wrap' depends on the global
521modules `fill', `stamp', `button', and `scrolltobottom'. It 519modules `fill', `stamp', `button', and `scrolltobottom'. It
diff --git a/lisp/international/fontset.el b/lisp/international/fontset.el
index c9b60418b22..a4456d31cf9 100644
--- a/lisp/international/fontset.el
+++ b/lisp/international/fontset.el
@@ -726,7 +726,9 @@
726 ;; This is required, as otherwise many TrueType fonts 726 ;; This is required, as otherwise many TrueType fonts
727 ;; with CJK characters but no corresponding ``design 727 ;; with CJK characters but no corresponding ``design
728 ;; language'' declaration can't be found. 728 ;; language'' declaration can't be found.
729 ,(font-spec :registry "iso10646-1" :script 'cjk-misc)) 729 ,@(and (featurep 'android)
730 (list (font-spec :registry "iso10646-1"
731 :script 'cjk-misc))))
730 732
731 (hangul (nil . "KSC5601.1987-0") 733 (hangul (nil . "KSC5601.1987-0")
732 ,(font-spec :registry "iso10646-1" :lang 'ko)) 734 ,(font-spec :registry "iso10646-1" :lang 'ko))
diff --git a/lisp/net/tramp-integration.el b/lisp/net/tramp-integration.el
index 56deaf9066b..8d039c25eae 100644
--- a/lisp/net/tramp-integration.el
+++ b/lisp/net/tramp-integration.el
@@ -274,35 +274,38 @@ NAME must be equal to `tramp-current-connection'."
274 274
275;;; Integration of shortdoc.el: 275;;; Integration of shortdoc.el:
276 276
277(with-eval-after-load 'shortdoc 277(tramp--with-startup
278 (dolist (elem `((file-remote-p 278 (with-eval-after-load 'shortdoc
279 :eval (file-remote-p "/ssh:user@host:/tmp/foo") 279 ;; Some packages deactivate Tramp. They don't deserve a shortdoc entry then.
280 :eval (file-remote-p "/ssh:user@host:/tmp/foo" 'method) 280 (when (file-remote-p "/ssh:user@host:/tmp/foo")
281 :eval (file-remote-p "/ssh:user@[::1]#1234:/tmp/foo" 'host) 281 (dolist (elem `((file-remote-p
282 ;; We don't want to see the text properties. 282 :eval (file-remote-p "/ssh:user@host:/tmp/foo")
283 :no-eval (file-remote-p "/sudo::/tmp/foo" 'user) 283 :eval (file-remote-p "/ssh:user@host:/tmp/foo" 'method)
284 :result ,(substring-no-properties 284 :eval (file-remote-p "/ssh:user@[::1]#1234:/tmp/foo" 'host)
285 (file-remote-p "/sudo::/tmp/foo" 'user))) 285 ;; We don't want to see the text properties.
286 (file-local-name 286 :no-eval (file-remote-p "/sudo::/tmp/foo" 'user)
287 :eval (file-local-name "/ssh:user@host:/tmp/foo")) 287 :result ,(substring-no-properties
288 (file-local-copy 288 (file-remote-p "/sudo::/tmp/foo" 'user)))
289 :no-eval (file-local-copy "/ssh:user@host:/tmp/foo") 289 (file-local-name
290 :eg-result "/tmp/tramp.8ihLbO" 290 :eval (file-local-name "/ssh:user@host:/tmp/foo"))
291 :eval (file-local-copy "/tmp/foo")))) 291 (file-local-copy
292 (unless (assoc (car elem) 292 :no-eval (file-local-copy "/ssh:user@host:/tmp/foo")
293 (member "Remote Files" (assq 'file shortdoc--groups))) 293 :eg-result "/tmp/tramp.8ihLbO"
294 (shortdoc-add-function 'file "Remote Files" elem))) 294 :eval (file-local-copy "/tmp/foo"))))
295 295 (unless (assoc (car elem)
296 (add-hook 296 (member "Remote Files" (assq 'file shortdoc--groups)))
297 'tramp-integration-unload-hook 297 (shortdoc-add-function 'file "Remote Files" elem)))
298 (lambda () 298
299 (let ((glist (assq 'file shortdoc--groups))) 299 (add-hook
300 (while (and (consp glist) 300 'tramp-integration-unload-hook
301 (not (and (stringp (cadr glist)) 301 (lambda ()
302 (string-equal (cadr glist) "Remote Files")))) 302 (let ((glist (assq 'file shortdoc--groups)))
303 (setq glist (cdr glist))) 303 (while (and (consp glist)
304 (when (consp glist) 304 (not (and (stringp (cadr glist))
305 (setcdr glist nil)))))) 305 (string-equal (cadr glist) "Remote Files"))))
306 (setq glist (cdr glist)))
307 (when (consp glist)
308 (setcdr glist nil))))))))
306 309
307;;; Integration of compile.el: 310;;; Integration of compile.el:
308 311
diff --git a/lisp/progmodes/c-ts-common.el b/lisp/progmodes/c-ts-common.el
index 674623a5e61..7d51d2434e6 100644
--- a/lisp/progmodes/c-ts-common.el
+++ b/lisp/progmodes/c-ts-common.el
@@ -151,7 +151,9 @@ comment."
151 (orig-point (point-marker)) 151 (orig-point (point-marker))
152 (start-marker (point-marker)) 152 (start-marker (point-marker))
153 (end-marker nil) 153 (end-marker nil)
154 (end-len 0)) 154 (end-len 0)
155 (start-mask-done nil)
156 (end-mask-done nil))
155 (move-marker start-marker start) 157 (move-marker start-marker start)
156 ;; If the first line is /* followed by non-text, exclude this line 158 ;; If the first line is /* followed by non-text, exclude this line
157 ;; from filling. 159 ;; from filling.
@@ -179,6 +181,7 @@ comment."
179 (goto-char (match-beginning 1)) 181 (goto-char (match-beginning 1))
180 (setq end-marker (point-marker)) 182 (setq end-marker (point-marker))
181 (setq end-len (- (match-end 1) (match-beginning 1))) 183 (setq end-len (- (match-end 1) (match-beginning 1)))
184 (setq end-mask-done t)
182 (replace-match (make-string end-len ?x) 185 (replace-match (make-string end-len ?x)
183 nil nil nil 1)) 186 nil nil nil 1))
184 187
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index f8140c14a49..75c8111035c 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -3946,7 +3946,9 @@ See `treesit-thing-settings' for more information.")
3946 :embed 'jsdoc 3946 :embed 'jsdoc
3947 :host 'javascript 3947 :host 'javascript
3948 :local t 3948 :local t
3949 `(((comment) @capture (:match ,js--treesit-jsdoc-beginning-regexp @capture)))))) 3949 `(((comment) @capture (:match ,js--treesit-jsdoc-beginning-regexp @capture)))))
3950
3951 (setq c-ts-common--comment-regexp (rx (or "comment" "line_comment" "block_comment" "description"))))
3950 3952
3951 ;; Imenu 3953 ;; Imenu
3952 (setq-local treesit-simple-imenu-settings 3954 (setq-local treesit-simple-imenu-settings
diff --git a/lisp/svg.el b/lisp/svg.el
index f2eb2ec66dd..f5c76145136 100644
--- a/lisp/svg.el
+++ b/lisp/svg.el
@@ -331,7 +331,6 @@ If the SVG is later changed, the image will also be updated."
331 (insert (format " %s=\"%s\"" (car attr) (cdr attr))))) 331 (insert (format " %s=\"%s\"" (car attr) (cdr attr)))))
332 (insert ">") 332 (insert ">")
333 (dolist (elem (nthcdr 2 dom)) 333 (dolist (elem (nthcdr 2 dom))
334 (insert " ")
335 (svg-print elem)) 334 (svg-print elem))
336 (insert (format "</%s>" (car dom))))) 335 (insert (format "</%s>" (car dom)))))
337 336
diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el
index dd4efd3831d..8c3241d5ee0 100644
--- a/lisp/use-package/use-package-core.el
+++ b/lisp/use-package/use-package-core.el
@@ -726,9 +726,9 @@ extending any keys already present."
726 726
727 ;; If at this point no :load, :defer or :no-require has been seen, then 727 ;; If at this point no :load, :defer or :no-require has been seen, then
728 ;; :load the package itself. 728 ;; :load the package itself.
729 (when (and (not (plist-member args :load)) 729 (when (and (not (plist-get args :load))
730 (not (plist-member args :defer)) 730 (not (plist-get args :defer))
731 (not (plist-member args :no-require))) 731 (not (plist-get args :no-require)))
732 (setq args (append args `(:load (,name))))) 732 (setq args (append args `(:load (,name)))))
733 733
734 ;; Sort the list of keywords based on the order of `use-package-keywords'. 734 ;; Sort the list of keywords based on the order of `use-package-keywords'.
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index 693991a6f3e..e7e6351fcab 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -2549,7 +2549,10 @@ If the item is checked, CHOSEN is a cons whose cdr is the value."
2549 (t 2549 (t
2550 (widget-create-child-value 2550 (widget-create-child-value
2551 widget type (car (cdr chosen))) 2551 widget type (car (cdr chosen)))
2552 (widget-specify-selected child))))) 2552 ;; This somehow breaks :options and other
2553 ;; Custom features.
2554 ;; (widget-specify-selected child)
2555 ))))
2553 (t 2556 (t
2554 (error "Unknown escape `%c'" escape))))) 2557 (error "Unknown escape `%c'" escape)))))
2555 ;; Update properties. 2558 ;; Update properties.
diff --git a/src/androidvfs.c b/src/androidvfs.c
index bb855099c77..14da8eed37e 100644
--- a/src/androidvfs.c
+++ b/src/androidvfs.c
@@ -2599,9 +2599,10 @@ android_content_name (struct android_vnode *vnode, char *name,
2599 component_end++; 2599 component_end++;
2600 2600
2601 /* Now, find out if the first component is a special vnode; if so, 2601 /* Now, find out if the first component is a special vnode; if so,
2602 call its root lookup function with the rest of NAME there. */ 2602 call its root lookup function with the rest of NAME there. What is
2603 more, content files are inaccessible in the absence of a GUI. */
2603 2604
2604 if (api < 19) 2605 if (api < 19 || !android_init_gui)
2605 i = 3; 2606 i = 3;
2606 else if (api < 21) 2607 else if (api < 21)
2607 i = 1; 2608 i = 1;
diff --git a/src/eval.c b/src/eval.c
index 2161ab1e1ea..16ece744f42 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1018,8 +1018,8 @@ usage: (let* VARLIST BODY...) */)
1018 } 1018 }
1019 1019
1020 var = maybe_remove_pos_from_symbol (var); 1020 var = maybe_remove_pos_from_symbol (var);
1021 if (!NILP (lexenv) && BARE_SYMBOL_P (var) 1021 CHECK_TYPE (BARE_SYMBOL_P (var), Qsymbolp, var);
1022 && !XBARE_SYMBOL (var)->u.s.declared_special 1022 if (!NILP (lexenv) && !XBARE_SYMBOL (var)->u.s.declared_special
1023 && NILP (Fmemq (var, Vinternal_interpreter_environment))) 1023 && NILP (Fmemq (var, Vinternal_interpreter_environment)))
1024 /* Lexically bind VAR by adding it to the interpreter's binding 1024 /* Lexically bind VAR by adding it to the interpreter's binding
1025 alist. */ 1025 alist. */
@@ -1090,10 +1090,10 @@ usage: (let VARLIST BODY...) */)
1090 varlist = XCDR (varlist); 1090 varlist = XCDR (varlist);
1091 Lisp_Object var = maybe_remove_pos_from_symbol (SYMBOLP (elt) ? elt 1091 Lisp_Object var = maybe_remove_pos_from_symbol (SYMBOLP (elt) ? elt
1092 : Fcar (elt)); 1092 : Fcar (elt));
1093 CHECK_TYPE (BARE_SYMBOL_P (var), Qsymbolp, var);
1093 tem = temps[argnum]; 1094 tem = temps[argnum];
1094 1095
1095 if (!NILP (lexenv) && SYMBOLP (var) 1096 if (!NILP (lexenv) && !XBARE_SYMBOL (var)->u.s.declared_special
1096 && !XSYMBOL (var)->u.s.declared_special
1097 && NILP (Fmemq (var, Vinternal_interpreter_environment))) 1097 && NILP (Fmemq (var, Vinternal_interpreter_environment)))
1098 /* Lexically bind VAR by adding it to the lexenv alist. */ 1098 /* Lexically bind VAR by adding it to the lexenv alist. */
1099 lexenv = Fcons (Fcons (var, tem), lexenv); 1099 lexenv = Fcons (Fcons (var, tem), lexenv);
@@ -1492,7 +1492,7 @@ internal_lisp_condition_case (Lisp_Object var, Lisp_Object bodyform,
1492 ptrdiff_t CACHEABLE clausenb = 0; 1492 ptrdiff_t CACHEABLE clausenb = 0;
1493 1493
1494 var = maybe_remove_pos_from_symbol (var); 1494 var = maybe_remove_pos_from_symbol (var);
1495 CHECK_SYMBOL (var); 1495 CHECK_TYPE (BARE_SYMBOL_P (var), Qsymbolp, var);
1496 1496
1497 Lisp_Object success_handler = Qnil; 1497 Lisp_Object success_handler = Qnil;
1498 1498
@@ -3272,18 +3272,18 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, Lisp_Object *arg_vector)
3272 { 3272 {
3273 maybe_quit (); 3273 maybe_quit ();
3274 3274
3275 Lisp_Object next = XCAR (syms_left); 3275 Lisp_Object next = maybe_remove_pos_from_symbol (XCAR (syms_left));
3276 if (!SYMBOLP (next)) 3276 if (!BARE_SYMBOL_P (next))
3277 xsignal1 (Qinvalid_function, fun); 3277 xsignal1 (Qinvalid_function, fun);
3278 3278
3279 if (EQ (next, Qand_rest)) 3279 if (BASE_EQ (next, Qand_rest))
3280 { 3280 {
3281 if (rest || previous_rest) 3281 if (rest || previous_rest)
3282 xsignal1 (Qinvalid_function, fun); 3282 xsignal1 (Qinvalid_function, fun);
3283 rest = 1; 3283 rest = 1;
3284 previous_rest = true; 3284 previous_rest = true;
3285 } 3285 }
3286 else if (EQ (next, Qand_optional)) 3286 else if (BASE_EQ (next, Qand_optional))
3287 { 3287 {
3288 if (optional || rest || previous_rest) 3288 if (optional || rest || previous_rest)
3289 xsignal1 (Qinvalid_function, fun); 3289 xsignal1 (Qinvalid_function, fun);
@@ -3305,12 +3305,12 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, Lisp_Object *arg_vector)
3305 arg = Qnil; 3305 arg = Qnil;
3306 3306
3307 /* Bind the argument. */ 3307 /* Bind the argument. */
3308 if (!NILP (lexenv) && SYMBOLP (next)) 3308 if (!NILP (lexenv))
3309 /* Lexically bind NEXT by adding it to the lexenv alist. */ 3309 /* Lexically bind NEXT by adding it to the lexenv alist. */
3310 lexenv = Fcons (Fcons (next, arg), lexenv); 3310 lexenv = Fcons (Fcons (next, arg), lexenv);
3311 else 3311 else
3312 /* Dynamically bind NEXT. */ 3312 /* Dynamically bind NEXT. */
3313 specbind (maybe_remove_pos_from_symbol (next), arg); 3313 specbind (next, arg);
3314 previous_rest = false; 3314 previous_rest = false;
3315 } 3315 }
3316 } 3316 }
diff --git a/src/lread.c b/src/lread.c
index ace7abd80c8..2e8ac37c1ff 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -1748,6 +1748,9 @@ Return t if the file exists and loads successfully. */)
1748 saved_strings[i].size = 0; 1748 saved_strings[i].size = 0;
1749 } 1749 }
1750 1750
1751 /* The "...done" messages are shown only in interactive mode, because
1752 the echo-area can display only the last message, and we want to
1753 avoid the impression that the load is still in progress. */
1751 if (!noninteractive && (NILP (nomessage) || force_load_messages)) 1754 if (!noninteractive && (NILP (nomessage) || force_load_messages))
1752 { 1755 {
1753 if (is_module) 1756 if (is_module)
diff --git a/src/xdisp.c b/src/xdisp.c
index 6f29f159d16..30771a1c83d 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -3647,14 +3647,14 @@ get_narrowed_len (struct window *w)
3647static ptrdiff_t 3647static ptrdiff_t
3648get_medium_narrowing_begv (struct window *w, ptrdiff_t pos) 3648get_medium_narrowing_begv (struct window *w, ptrdiff_t pos)
3649{ 3649{
3650 int len = get_narrowed_len (w); 3650 ptrdiff_t len = get_narrowed_len (w);
3651 return max ((pos / len - 1) * len, BEGV); 3651 return max ((pos / len - 1) * len, BEGV);
3652} 3652}
3653 3653
3654static ptrdiff_t 3654static ptrdiff_t
3655get_medium_narrowing_zv (struct window *w, ptrdiff_t pos) 3655get_medium_narrowing_zv (struct window *w, ptrdiff_t pos)
3656{ 3656{
3657 int len = get_narrowed_len (w); 3657 ptrdiff_t len = get_narrowed_len (w);
3658 return min ((pos / len + 1) * len, ZV); 3658 return min ((pos / len + 1) * len, ZV);
3659} 3659}
3660 3660
@@ -3704,9 +3704,9 @@ get_large_narrowing_begv (ptrdiff_t pos)
3704{ 3704{
3705 if (long_line_optimizations_region_size <= 0) 3705 if (long_line_optimizations_region_size <= 0)
3706 return BEGV; 3706 return BEGV;
3707 int len = long_line_optimizations_region_size / 2; 3707 ptrdiff_t len = long_line_optimizations_region_size / 2;
3708 int begv = max (pos - len, BEGV); 3708 ptrdiff_t begv = max (pos - len, BEGV);
3709 int limit = long_line_optimizations_bol_search_limit; 3709 ptrdiff_t limit = long_line_optimizations_bol_search_limit;
3710 while (limit > 0) 3710 while (limit > 0)
3711 { 3711 {
3712 if (begv == BEGV || FETCH_BYTE (CHAR_TO_BYTE (begv) - 1) == '\n') 3712 if (begv == BEGV || FETCH_BYTE (CHAR_TO_BYTE (begv) - 1) == '\n')
@@ -3722,7 +3722,7 @@ get_large_narrowing_zv (ptrdiff_t pos)
3722{ 3722{
3723 if (long_line_optimizations_region_size <= 0) 3723 if (long_line_optimizations_region_size <= 0)
3724 return ZV; 3724 return ZV;
3725 int len = long_line_optimizations_region_size / 2; 3725 ptrdiff_t len = long_line_optimizations_region_size / 2;
3726 return min (pos + len, ZV); 3726 return min (pos + len, ZV);
3727} 3727}
3728 3728
diff --git a/test/src/eval-tests.el b/test/src/eval-tests.el
index 187dc2f34d5..e1663f489c5 100644
--- a/test/src/eval-tests.el
+++ b/test/src/eval-tests.el
@@ -362,5 +362,13 @@ expressions works for identifiers starting with period."
362 (error err)))) 362 (error err))))
363 (should (eq inner-error outer-error)))) 363 (should (eq inner-error outer-error))))
364 364
365(ert-deftest eval-bad-specbind ()
366 (should-error (eval '(let (((a b) 23)) (+ 1 2)) t)
367 :type 'wrong-type-argument)
368 (should-error (eval '(let* (((a b) 23)) (+ 1 2)) t)
369 :type 'wrong-type-argument)
370 (should-error (eval '(condition-case (a b) (+ 1 2) (:success 'ok)))
371 :type 'wrong-type-argument)
372 (should-error (eval '(funcall '(lambda ((a b) 3.15) 84) 5 4))))
365 373
366;;; eval-tests.el ends here 374;;; eval-tests.el ends here