From unknown Thu Aug 14 21:45:20 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#25289 <25289@debbugs.gnu.org> To: bug#25289 <25289@debbugs.gnu.org> Subject: Status: Simplify calls to setjmp for condition case Reply-To: bug#25289 <25289@debbugs.gnu.org> Date: Fri, 15 Aug 2025 04:45:20 +0000 retitle 25289 Simplify calls to setjmp for condition case reassign 25289 emacs submitter 25289 Chris Gregory severity 25289 wishlist tag 25289 patch thanks From debbugs-submit-bounces@debbugs.gnu.org Wed Dec 28 19:32:34 2016 Received: (at submit) by debbugs.gnu.org; 29 Dec 2016 00:32:34 +0000 Received: from localhost ([127.0.0.1]:58360 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cMOe2-0002Ce-9c for submit@debbugs.gnu.org; Wed, 28 Dec 2016 19:32:34 -0500 Received: from eggs.gnu.org ([208.118.235.92]:40948) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cMOe0-0002CQ-VP for submit@debbugs.gnu.org; Wed, 28 Dec 2016 19:32:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cMOdu-0007fi-Ek for submit@debbugs.gnu.org; Wed, 28 Dec 2016 19:32:27 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:34882) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cMOdu-0007fe-C1 for submit@debbugs.gnu.org; Wed, 28 Dec 2016 19:32:26 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60152) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cMOdt-0005XF-1V for bug-gnu-emacs@gnu.org; Wed, 28 Dec 2016 19:32:26 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cMOdr-0007fE-Pq for bug-gnu-emacs@gnu.org; Wed, 28 Dec 2016 19:32:25 -0500 Received: from mail-io0-x241.google.com ([2607:f8b0:4001:c06::241]:33823) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cMOdr-0007fA-JB for bug-gnu-emacs@gnu.org; Wed, 28 Dec 2016 19:32:23 -0500 Received: by mail-io0-x241.google.com with SMTP id n85so18207219ioi.1 for ; Wed, 28 Dec 2016 16:32:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version; bh=l/41xoy1wonBg4hsVpn75iWN5gmJGuGUfpUpgRkbg0Y=; b=FbzQCYE8ekiijHoiCusZNpMcKVjPmPcviR7AT5EsJ2LpBrjOQDFywJQTXQsLOWcen0 Hw0SC5z6UvNfK8S1MswGOwHLWDUzcPsCJF9spwNp3vNlqxrNIa2UbSpDMI+bXzvDh9vY 8G1Q+BhCeLkwPuNSmsMkqeR2vZxtdbl63Ben33YyvZN3HwfZVxv+2bMzLHVherrKwz4i iOBuO/ZHe2qkknceVXXvl8utRzeDHSebHOtvPWmNPx2Th+fwx0EbDt8HGZW2jPjrExOs k86TOyOqOVH5Nbpio9XyBojbcx5Hfv4vvBjFnsNdUzjDEkGxgMOHd1X+EfWzivZ5v5nC fQrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version; bh=l/41xoy1wonBg4hsVpn75iWN5gmJGuGUfpUpgRkbg0Y=; b=KDwTUECsusdUy9f/CFfj6g9no9ILxZgd1yFzgNb745u4W2lqmd+JE9BK+/IwrxR7bD 7chZFlOVyLQlJggsV7/wQ7S+DSkoncOaNBBx6xFW2yZOn8rQbFsaHH9JiVOmKAEpTF36 dzN5HpKW9ZProh0ZgNfGdRucUhnEyVkTI/8gLwj/TVcnoJS9m9l7w9+z+wODh5HRdV46 N1uiJEJagMzxU1XMCkJLNk8WbzQqbFNdgo9JFtOVmvx0MTr8jQ62IU8cRE8ABfV1W6pi r6vIL/I9YSJvNH/gvzbRXQJr/se3ciJYqOEITtlAdd6jJvQ4OxPHg8YskZnquTxLra4y jHkg== X-Gm-Message-State: AIkVDXKcd/QEiiQFuQlfIZxGKN4U8pEZNR2PKOW587usziorsx23T5DinvR8FPMMoiBp1g== X-Received: by 10.107.138.106 with SMTP id m103mr11138426iod.214.1482971542537; Wed, 28 Dec 2016 16:32:22 -0800 (PST) Received: from CzipperZag ([2604:2d80:8039:81de:a0b5:3d06:3bb2:d546]) by smtp.gmail.com with ESMTPSA id m9sm24311393ioa.12.2016.12.28.16.32.21 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Dec 2016 16:32:21 -0800 (PST) From: Chris Gregory To: bug-gnu-emacs@gnu.org Subject: Simplify calls to setjmp for condition case Date: Wed, 28 Dec 2016 18:32:18 -0600 Message-ID: <874m1n60dp.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) This patch simplifies calls to setjmp, while keeping the semantics of setjmp valid (it must be called in an if statement or some loop with a comparison operator). This takes the common bodies out of the branches. -- Chris Gregory diff --git a/src/eval.c b/src/eval.c index e50e26a..6d50b98 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1084,22 +1084,19 @@ internal_catch (Lisp_Object tag, { /* This structure is made part of the chain `catchlist'. */ struct handler *c = push_handler (tag, CATCHER); + Lisp_Object val; - /* Call FUNC. */ - if (! sys_setjmp (c->jmp)) - { - Lisp_Object val = func (arg); - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return val; - } + // This if statement is not redundant. setjmp must be called in an + // if statement. + if (sys_setjmp (c->jmp) != 0) + /* Throw works by a longjmp that comes right here. */ + val = handlerlist->val; else - { /* Throw works by a longjmp that comes right here. */ - Lisp_Object val = handlerlist->val; - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return val; - } + val = func (arg); + + clobbered_eassert (handlerlist == c); + handlerlist = handlerlist->next; + return val; } /* Unwind the specbind, catch, and handler stacks back to CATCH, and @@ -1313,20 +1310,24 @@ internal_condition_case (Lisp_Object (*bfun) (void), Lisp_Object handlers, Lisp_Object (*hfun) (Lisp_Object)) { struct handler *c = push_handler (handlers, CONDITION_CASE); - if (sys_setjmp (c->jmp)) + Lisp_Object val; + bool is_recursive; + + // This if statement is not redundant. setjmp must be called in an + // if statement. + if (sys_setjmp (c->jmp) != 0) { - Lisp_Object val = handlerlist->val; - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return hfun (val); + is_recursive = true; + val = handlerlist->val; } else { - Lisp_Object val = bfun (); - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return val; + is_recursive = false; + val = bfun (); } + clobbered_eassert (handlerlist == c); + handlerlist = handlerlist->next; + return is_recursive ? hfun (val) : val; } /* Like internal_condition_case but call BFUN with ARG as its argument. */ @@ -1337,20 +1338,24 @@ internal_condition_case_1 (Lisp_Object (*bfun) (Lisp_Object), Lisp_Object arg, Lisp_Object (*hfun) (Lisp_Object)) { struct handler *c = push_handler (handlers, CONDITION_CASE); - if (sys_setjmp (c->jmp)) + Lisp_Object val; + bool is_recursive; + + // This if statement is not redundant. setjmp must be called in an + // if statement. + if (sys_setjmp (c->jmp) != 0) { - Lisp_Object val = handlerlist->val; - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return hfun (val); + is_recursive = true; + val = handlerlist->val; } else { - Lisp_Object val = bfun (arg); - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return val; + is_recursive = false; + val = bfun (arg); } + clobbered_eassert (handlerlist == c); + handlerlist = handlerlist->next; + return is_recursive ? hfun (val) : val; } /* Like internal_condition_case_1 but call BFUN with ARG1 and ARG2 as @@ -1364,20 +1369,24 @@ internal_condition_case_2 (Lisp_Object (*bfun) (Lisp_Object, Lisp_Object), Lisp_Object (*hfun) (Lisp_Object)) { struct handler *c = push_handler (handlers, CONDITION_CASE); - if (sys_setjmp (c->jmp)) + Lisp_Object val; + bool is_recursive; + + // This if statement is not redundant. setjmp must be called in an + // if statement. + if (sys_setjmp (c->jmp) != 0) { - Lisp_Object val = handlerlist->val; - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return hfun (val); + is_recursive = true; + val = handlerlist->val; } else { - Lisp_Object val = bfun (arg1, arg2); - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return val; + is_recursive = false; + val = bfun (arg1, arg2); } + clobbered_eassert (handlerlist == c); + handlerlist = handlerlist->next; + return is_recursive ? hfun (val) : val; } /* Like internal_condition_case but call BFUN with NARGS as first, @@ -1393,20 +1402,24 @@ internal_condition_case_n (Lisp_Object (*bfun) (ptrdiff_t, Lisp_Object *), Lisp_Object *args)) { struct handler *c = push_handler (handlers, CONDITION_CASE); - if (sys_setjmp (c->jmp)) + Lisp_Object val; + bool is_recursive; + + // This if statement is not redundant. setjmp must be called in an + // if statement. + if (sys_setjmp (c->jmp) != 0) { - Lisp_Object val = handlerlist->val; - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return hfun (val, nargs, args); + is_recursive = true; + val = handlerlist->val; } else { - Lisp_Object val = bfun (nargs, args); - clobbered_eassert (handlerlist == c); - handlerlist = handlerlist->next; - return val; + is_recursive = false; + val = bfun (nargs, args); } + clobbered_eassert (handlerlist == c); + handlerlist = handlerlist->next; + return is_recursive ? hfun (val, nargs, args) : val; } struct handler * From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 31 06:38:37 2016 Received: (at 25289-done) by debbugs.gnu.org; 31 Dec 2016 11:38:37 +0000 Received: from localhost ([127.0.0.1]:60890 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cNHzg-0007Q9-9T for submit@debbugs.gnu.org; Sat, 31 Dec 2016 06:38:36 -0500 Received: from eggs.gnu.org ([208.118.235.92]:39415) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cNHze-0007Pw-BB for 25289-done@debbugs.gnu.org; Sat, 31 Dec 2016 06:38:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cNHzW-0001Ys-10 for 25289-done@debbugs.gnu.org; Sat, 31 Dec 2016 06:38:29 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_40,RP_MATCHES_RCVD autolearn=disabled version=3.3.2 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:45494) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cNHzV-0001Yo-Tv; Sat, 31 Dec 2016 06:38:25 -0500 Received: from 84.94.185.246.cable.012.net.il ([84.94.185.246]:4672 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1cNHzV-0001cK-05; Sat, 31 Dec 2016 06:38:25 -0500 Date: Sat, 31 Dec 2016 13:38:26 +0200 Message-Id: <83r34ogwgd.fsf@gnu.org> From: Eli Zaretskii To: Chris Gregory In-reply-to: <874m1n60dp.fsf@gmail.com> (message from Chris Gregory on Wed, 28 Dec 2016 18:32:18 -0600) Subject: Re: bug#25289: Simplify calls to setjmp for condition case References: <874m1n60dp.fsf@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-Spam-Score: -8.2 (--------) X-Debbugs-Envelope-To: 25289-done Cc: 25289-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Eli Zaretskii Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -8.2 (--------) > From: Chris Gregory > Date: Wed, 28 Dec 2016 18:32:18 -0600 > > This patch simplifies calls to setjmp, while keeping the semantics of > setjmp valid (it must be called in an if statement or some loop with > a comparison operator). > > This takes the common bodies out of the branches. Thanks, installed on the master branch. I'm afraid this is the last change we can accept from you before your legal paperwork is completed. From unknown Thu Aug 14 21:45:20 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 28 Jan 2017 12:24:03 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator