From a1e615618dfef25c7fd14cbe1a16bdacca1148f4 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Wed, 29 Aug 2018 22:47:00 -0400 Subject: [PATCH 1/3] * test/lisp/calc/calc-tests.el (calc-imaginary-i): New test. --- test/lisp/calc/calc-tests.el | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/lisp/calc/calc-tests.el b/test/lisp/calc/calc-tests.el index fbd5f0e3a1d..101786c30e3 100644 --- a/test/lisp/calc/calc-tests.el +++ b/test/lisp/calc/calc-tests.el @@ -86,6 +86,13 @@ An existing calc stack is reused, otherwise a new one is created." (math-read-expr "1m") "cm") '(* -100 (var cm var-cm))))) +(ert-deftest calc-imaginary-i () + "Test `math-imaginary-i' for non-special-const values." + (let ((var-i (calcFunc-polar (calcFunc-sqrt -1)))) + (should (math-imaginary-i))) + (let ((var-i (calcFunc-sqrt -1))) + (should (math-imaginary-i)))) + (ert-deftest test-calc-23889 () "Test for https://debbugs.gnu.org/23889 and 25652." (skip-unless (>= math-bignum-digit-length 9)) From 3d09d533d15eae2974f3858df43746cf6e8f897b Mon Sep 17 00:00:00 2001 From: Miciah Masters Date: Sun, 10 Dec 2017 19:56:48 -0500 Subject: [PATCH 2/3] rcirc: Document /reconnect as a built-in command (Bug#29656) The change "New command rcirc-cmd-reconnect" from 2014-04-09 (shipped in Emacs 25.1) added a /reconnect command to rcirc but did not document it and did not delete the example /reconnect command definition in the manual. * doc/misc/rcirc.texi (rcirc commands): Document the built-in /reconnect command. (Hacking and Tweaking): Delete example reconnect command. Copyright-paperwork-exempt: yes --- doc/misc/rcirc.texi | 60 +++++++++++++-------------------------------- 1 file changed, 17 insertions(+), 43 deletions(-) diff --git a/doc/misc/rcirc.texi b/doc/misc/rcirc.texi index 2437e020eee..0287054b1d2 100644 --- a/doc/misc/rcirc.texi +++ b/doc/misc/rcirc.texi @@ -88,7 +88,6 @@ Hacking and Tweaking * Scrolling conservatively:: * Changing the time stamp format:: * Defining a new command:: -* Reconnecting after you have lost the connection:: @end detailmenu @end menu @@ -401,6 +400,23 @@ This disconnects from the server and parts all channels. You can optionally provide a reason for quitting. When you kill the server buffer, you automatically quit the server and part all channels. (Also @code{/quit ZZZzzz...}.) + +@item /reconnect +@cindex /reconnect +@cindex reconnect +@cindex lost connection +@cindex disconnecting servers, reconnecting +This reconnects after you have lost the connection. + +If you're chatting from a laptop, then you might be familiar with this +problem: When your laptop falls asleep and wakes up later, your IRC +client doesn't realize that it has been disconnected. It takes several +minutes until the client decides that the connection has in fact been +lost. The simple solution is to use @kbd{M-x rcirc}. The problem is +that this opens an @emph{additional} connection, so you'll have two +copies of every channel buffer, one dead and one live. + +The real answer, therefore, is the @code{/reconnect} command. @end table @node Useful IRC commands @@ -787,7 +803,6 @@ Here are some examples of stuff you can do to configure @code{rcirc}. * Scrolling conservatively:: * Changing the time stamp format:: * Defining a new command:: -* Reconnecting after you have lost the connection:: @end menu @node Skipping /away messages using handlers @@ -888,47 +903,6 @@ because @code{defun-rcirc-command} is not yet available, and without (concat "I use " rcirc-id-string)))) @end smallexample -@node Reconnecting after you have lost the connection -@section Reconnecting after you have lost the connection -@cindex reconnecting -@cindex disconnecting servers, reconnecting - -If you're chatting from a laptop, then you might be familiar with this -problem: When your laptop falls asleep and wakes up later, your IRC -client doesn't realize that it has been disconnected. It takes several -minutes until the client decides that the connection has in fact been -lost. The simple solution is to use @kbd{M-x rcirc}. The problem is -that this opens an @emph{additional} connection, so you'll have two -copies of every channel buffer, one dead and one live. - -The real answer, therefore, is a @code{/reconnect} command: - -@smallexample -(with-eval-after-load 'rcirc - (defun-rcirc-command reconnect (arg) - "Reconnect the server process." - (interactive "i") - (unless process - (error "There's no process for this target")) - (let* ((server (car (process-contact process))) - (port (process-contact process :service)) - (nick (rcirc-nick process)) - channels query-buffers) - (dolist (buf (buffer-list)) - (with-current-buffer buf - (when (eq process (rcirc-buffer-process)) - (remove-hook 'change-major-mode-hook - 'rcirc-change-major-mode-hook) - (if (rcirc-channel-p rcirc-target) - (setq channels (cons rcirc-target channels)) - (setq query-buffers (cons buf query-buffers)))))) - (delete-process process) - (rcirc-connect server port nick - rcirc-default-user-name - rcirc-default-full-name - channels)))) -@end smallexample - @node GNU Free Documentation License @appendix GNU Free Documentation License @include doclicense.texi From ac7936cb8f4d4d6706535bfcea0d97741c2ca15f Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 31 Aug 2018 10:47:03 +0200 Subject: [PATCH 3/3] Rename thread-alive-p to thread-live-p * doc/lispref/threads.texi (Basic Thread Functions): Use thread-live-p. * etc/NEWS: 'thread-alive-p' has been renamed to 'thread-live-p'. * src/thread.c (thread_live_p): Rename from thread_alive_p. Adapt all callees. (Fthread_live_p): Rename from Fthread_alive_p. (syms_of_threads): Make thread-alive-p an alias of thread-live-p. * test/src/thread-tests.el (all): Replace `thread-alive-p' by `thread-live-p'. (threads-live): Rename from `threads-alive'. --- doc/lispref/threads.texi | 2 +- etc/NEWS | 5 +++++ src/thread.c | 17 ++++++++++------- test/src/thread-tests.el | 16 ++++++++-------- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/doc/lispref/threads.texi b/doc/lispref/threads.texi index f05af496188..ddeb2e923fc 100644 --- a/doc/lispref/threads.texi +++ b/doc/lispref/threads.texi @@ -97,7 +97,7 @@ Yield execution to the next runnable thread. Return the name of @var{thread}, as specified to @code{make-thread}. @end defun -@defun thread-alive-p thread +@defun thread-live-p thread Return @code{t} if @var{thread} is alive, or @code{nil} if it is not. A thread is alive as long as its function is still executing. @end defun diff --git a/etc/NEWS b/etc/NEWS index ffea247dd5a..f575d4dd005 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -112,6 +112,11 @@ option 'vc-hg-symbolic-revision-styles' to the value '("{rev}")'. Existing files "~/.emacs.d/shadows" and "~/.emacs.d/shadow_todo" must be removed prior using the changed 'shadow-*' commands. ++++ +** 'thread-alive-p' has been renamed to 'thread-live-p'. +The old name is an alias of the new name. Future Emacs version will +obsolete it. + * Lisp Changes in Emacs 26.2 diff --git a/src/thread.c b/src/thread.c index 04c2808e5c4..9b450ee0a45 100644 --- a/src/thread.c +++ b/src/thread.c @@ -41,7 +41,7 @@ extern volatile int interrupt_input_blocked; /* m_specpdl is set when the thread is created and cleared when the thread dies. */ -#define thread_alive_p(STATE) ((STATE)->m_specpdl != NULL) +#define thread_live_p(STATE) ((STATE)->m_specpdl != NULL) @@ -884,7 +884,7 @@ or `thread-join' in the target thread. */) return Qnil; } -DEFUN ("thread-alive-p", Fthread_alive_p, Sthread_alive_p, 1, 1, 0, +DEFUN ("thread-live-p", Fthread_live_p, Sthread_live_p, 1, 1, 0, doc: /* Return t if THREAD is alive, or nil if it has exited. */) (Lisp_Object thread) { @@ -893,7 +893,7 @@ DEFUN ("thread-alive-p", Fthread_alive_p, Sthread_alive_p, 1, 1, 0, CHECK_THREAD (thread); tstate = XTHREAD (thread); - return thread_alive_p (tstate) ? Qt : Qnil; + return thread_live_p (tstate) ? Qt : Qnil; } DEFUN ("thread--blocker", Fthread_blocker, Sthread_blocker, 1, 1, 0, @@ -923,7 +923,7 @@ thread_join_callback (void *arg) XSETTHREAD (thread, tstate); self->event_object = thread; self->wait_condvar = &tstate->thread_condvar; - while (thread_alive_p (tstate) && NILP (self->error_symbol)) + while (thread_live_p (tstate) && NILP (self->error_symbol)) sys_cond_wait (self->wait_condvar, &global_lock); self->wait_condvar = NULL; @@ -946,7 +946,7 @@ It is an error for a thread to try to join itself. */) if (tstate == current_thread) error ("Cannot join current thread"); - if (thread_alive_p (tstate)) + if (thread_live_p (tstate)) flush_stack_call_func (thread_join_callback, tstate); return Qnil; @@ -961,7 +961,7 @@ DEFUN ("all-threads", Fall_threads, Sall_threads, 0, 0, 0, for (iter = all_threads; iter; iter = iter->next_thread) { - if (thread_alive_p (iter)) + if (thread_live_p (iter)) { Lisp_Object thread; @@ -1051,7 +1051,7 @@ syms_of_threads (void) defsubr (&Scurrent_thread); defsubr (&Sthread_name); defsubr (&Sthread_signal); - defsubr (&Sthread_alive_p); + defsubr (&Sthread_live_p); defsubr (&Sthread_join); defsubr (&Sthread_blocker); defsubr (&Sall_threads); @@ -1069,6 +1069,9 @@ syms_of_threads (void) staticpro (&last_thread_error); last_thread_error = Qnil; + Fdefalias (intern_c_string ("thread-alive-p"), + intern_c_string ("thread-live-p"), Qnil); + Fprovide (intern_c_string ("threads"), Qnil); } diff --git a/test/src/thread-tests.el b/test/src/thread-tests.el index a00a9c84bd6..e721e0f9621 100644 --- a/test/src/thread-tests.el +++ b/test/src/thread-tests.el @@ -32,7 +32,7 @@ (declare-function mutex-lock "thread.c" (mutex)) (declare-function mutex-unlock "thread.c" (mutex)) (declare-function thread--blocker "thread.c" (thread)) -(declare-function thread-alive-p "thread.c" (thread)) +(declare-function thread-live-p "thread.c" (thread)) (declare-function thread-join "thread.c" (thread)) (declare-function thread-last-error "thread.c" ()) (declare-function thread-name "thread.c" (thread)) @@ -60,11 +60,11 @@ (should (string= "hi bob" (thread-name (make-thread #'ignore "hi bob"))))) -(ert-deftest threads-alive () +(ert-deftest threads-live () "Test for thread liveness." (skip-unless (featurep 'threads)) (should - (thread-alive-p (make-thread #'ignore)))) + (thread-live-p (make-thread #'ignore)))) (ert-deftest threads-all-threads () "Simple test for all-threads." @@ -96,7 +96,7 @@ (let ((thread (make-thread #'threads-test-thread1))) (thread-join thread) (and threads-test-global - (not (thread-alive-p thread))))))) + (not (thread-live-p thread))))))) (ert-deftest threads-join-self () "Cannot `thread-join' the current thread." @@ -271,7 +271,7 @@ (let (th1 th2) (setq th1 (make-thread #'threads-call-error "call-error")) (should (threadp th1)) - (while (thread-alive-p th1) + (while (thread-live-p th1) (thread-yield)) (should (equal (thread-last-error) '(error "Error is called"))) @@ -297,7 +297,7 @@ (while t (thread-yield)))))) (thread-signal thread 'error nil) (sit-for 1) - (should-not (thread-alive-p thread)) + (should-not (thread-live-p thread)) (should (equal (thread-last-error) '(error))))) (defvar threads-condvar nil) @@ -323,7 +323,7 @@ (setq new-thread (make-thread #'threads-test-condvar-wait)) ;; Make sure new-thread is alive. - (should (thread-alive-p new-thread)) + (should (thread-live-p new-thread)) (should (= (length (all-threads)) 2)) ;; Wait for new-thread to become blocked on the condvar. (while (not (eq (thread--blocker new-thread) threads-condvar)) @@ -336,7 +336,7 @@ (sleep-for 0.1) ;; Make sure the thread is still there. This used to fail due to ;; a bug in thread.c:condition_wait_callback. - (should (thread-alive-p new-thread)) + (should (thread-live-p new-thread)) (should (= (length (all-threads)) 2)) (should (eq (thread--blocker new-thread) threads-condvar))