diff --git a/admin/notes/emba b/admin/notes/emba new file mode 100644 index 00000000000..cb0dbc48095 --- /dev/null +++ b/admin/notes/emba @@ -0,0 +1,64 @@ +-*- mode: outline; coding: utf-8 -*- + +Copyright (C) 2019 Free Software Foundation, Inc. +See the end of the file for license conditions. + +NOTES FOR EMACS CONTINUOUS BUILD ON EMBA + +A continuous build for Emacs can be found at +, a Gitlab instance. It watches the +Emacs git repository and starts a pipeline (jobset) if there are new +changes. This happens for all Emacs branches. + +* Mail notifications + +In addition to the web interface, emba can send notifications by email +when a job fails. It sends notifications about test status to +. + +If you want to receive these notifications, please subscribe at +. + +Alternatively, these notifications can be read via gmane at +. + +The messages contain a URL to the log file of the failed job, like +. + +* Emacs jobset + +The Emacs jobset is defined in the Emacs source tree, file +'.gitlab-ci.yml'. It could be adapted for every Emacs branch, see +. + +Every job runs in a Debian docker container. It uses the local clone +of the Emacs git repository to perform a bootstrap and test of Emacs. +This could happen for several jobs with changed configuration, compile +and test parameters. + +* Emba configuration + +The emba configuration files are hosted on +. + +* Identifying emba + +Lisp packages, Makefiles, scripts, and other software could determine +whether they run on emba by checking for the environment variable +EMACS_EMBA_CI. + + +This file is part of GNU Emacs. + +GNU Emacs is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +GNU Emacs is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Emacs. If not, see . diff --git a/doc/lispref/syntax.texi b/doc/lispref/syntax.texi index a960eeac7e8..25b9b35250f 100644 --- a/doc/lispref/syntax.texi +++ b/doc/lispref/syntax.texi @@ -556,8 +556,8 @@ the current syntax table in the usual way. @defvar parse-sexp-lookup-properties If this is non-@code{nil}, the syntax scanning functions, like -@code{forward-sexp}, pay attention to syntax text properties. -Otherwise they use only the current syntax table. +@code{forward-sexp}, pay attention to @code{syntax-table} text +properties. Otherwise they use only the current syntax table. @end defvar @defvar syntax-propertize-function @@ -927,9 +927,9 @@ nicely. @defvar multibyte-syntax-as-symbol If this variable is non-@code{nil}, @code{scan-sexps} treats all -non-@acronym{ASCII} characters as symbol constituents regardless -of what the syntax table says about them. (However, text properties -can still override the syntax.) +non-@acronym{ASCII} characters as symbol constituents regardless of +what the syntax table says about them. (However, @code{syntax-table +}text properties can still override the syntax.) @end defvar @defopt parse-sexp-ignore-comments @@ -939,7 +939,6 @@ whitespace by the functions in this section and by @code{forward-sexp}, @code{scan-lists} and @code{scan-sexps}. @end defopt -@vindex parse-sexp-lookup-properties The behavior of @code{parse-partial-sexp} is also affected by @code{parse-sexp-lookup-properties} (@pxref{Syntax Properties}). diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index f3436c6c6c4..cc8ec2652f7 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -1107,12 +1107,19 @@ dictionary from that list was found." null-device t nil + "-D" + ;; Use -a to prevent Hunspell from + ;; trying to initialize its + ;; curses/termcap UI, which causes it + ;; to crash or fail to start in some + ;; MS-Windows ports. + "-a" ;; Hunspell 1.7.0 (and later?) won't ;; show LOADED DICTIONARY unless ;; there's at least one file argument ;; on the command line. So we feed ;; it with the null device. - "-D" null-device) + null-device) (buffer-string)) "[\n\r]+" t)) diff --git a/src/data.c b/src/data.c index 92a1062280e..65f2b0f2f1b 100644 --- a/src/data.c +++ b/src/data.c @@ -1958,6 +1958,16 @@ Instead, use `add-hook' and specify t for the LOCAL argument. */) (current_buffer, Fcons (Fcons (variable, XCDR (blv->defcell)), BVAR (current_buffer, local_var_alist))); + + /* If the symbol forwards into a C variable, then load the binding + for this buffer now, to preserve the invariant that forwarded + variables must always hold the value corresponding to the + current buffer (they are swapped eagerly). + Otherwise, if C code modifies the variable before we load the + binding in, then that new value would clobber the default binding + the next time we unload it. See bug#34318. */ + if (blv->fwd) + swap_in_symval_forwarding (sym, blv); } return variable; diff --git a/test/src/data-tests.el b/test/src/data-tests.el index bc77a7be94e..a9d48e29a8a 100644 --- a/test/src/data-tests.el +++ b/test/src/data-tests.el @@ -669,4 +669,22 @@ comparing the subr with a much slower lisp implementation." (should (= (lsh -1 -1) most-positive-fixnum)) (should-error (lsh (1- most-negative-fixnum) -1))) +(ert-deftest data-tests-make-local-forwarded-var () ;bug#34318 + ;; Boy, this bug is tricky to trigger. You need to: + ;; - call make-local-variable on a forwarded var (i.e. one that + ;; has a corresponding C var linked via DEFVAR_(LISP|INT|BOOL)) + ;; - cause the C code to modify this variable from the C side of the + ;; forwarding, but this needs to happen before the var is accessed + ;; from the Lisp side and before we switch to another buffer. + ;; The trigger in bug#34318 doesn't exist any more because the C code has + ;; changes. Instead I found the trigger below. + (with-temp-buffer + (setq last-coding-system-used 'bug34318) + (make-local-variable 'last-coding-system-used) + ;; This should set last-coding-system-used to `no-conversion'. + (decode-coding-string "hello" nil) + (should (equal (list last-coding-system-used + (default-value 'last-coding-system-used)) + '(no-conversion bug34318))))) + ;;; data-tests.el ends here