From unknown Sat Sep 06 02:32:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38263: Bug in srfi-11 (?) Resent-From: Tim Gesthuizen Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Mon, 18 Nov 2019 20:02:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 38263 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: 38263@debbugs.gnu.org X-Debbugs-Original-To: bug-guile@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.15741072909885 (code B ref -1); Mon, 18 Nov 2019 20:02:02 +0000 Received: (at submit) by debbugs.gnu.org; 18 Nov 2019 20:01:30 +0000 Received: from localhost ([127.0.0.1]:46287 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iWnDG-0002ZN-2P for submit@debbugs.gnu.org; Mon, 18 Nov 2019 15:01:30 -0500 Received: from lists.gnu.org ([209.51.188.17]:38771) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iWnDE-0002ZF-5n for submit@debbugs.gnu.org; Mon, 18 Nov 2019 15:01:28 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51811) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iWnDC-0001BE-LV for bug-guile@gnu.org; Mon, 18 Nov 2019 15:01: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, RCVD_IN_DNSWL_NONE,URIBL_BLOCKED autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iWnDB-0004Vb-2s for bug-guile@gnu.org; Mon, 18 Nov 2019 15:01:26 -0500 Received: from sonic313-21.consmr.mail.ir2.yahoo.com ([77.238.179.188]:36558) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iWnDA-0004Ux-K3 for bug-guile@gnu.org; Mon, 18 Nov 2019 15:01:25 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1574107281; bh=itoZtu/0AwuOMPouHshucJIkqK3Id+GmbYUmVWWCebc=; h=From:To:Subject:Date:References:From:Subject; b=bmt0EFOdg17Wxla9W5IMc9HhNQGgan+GhglfeVfu0QI8ug9KtxP77dZyQdsLtGZY29aGCbFL9ogjPRUPEiZcya+AY79/47BvbUYICAECrie3HqO6UuHEvJZoe1tw4ebYr7sJ6ha+JXY/R9zW0yYY4oy6M/+konXSQAPO16m6qTFxzUXFf0ltLp1EWEUO0iH35fU/190xFN58y42nBCjWB1uaQDWMuwZwvEU01fNwrSddFtQgKdyrMEABkYIZghTjPa6SvektolzV6BXpWlldY8tngrWITXySZDsXTokTPhNYHoQAO54kQT5GEnkwrcnqkuAZkNL2ULGPCNEENsZlpQ== X-YMail-OSG: y9ljF1wVM1n5QJaQvs_HzWUuudRDpArM.vkXq0u.Gl6d1VyPljoJRkuUbjBTlWj gcEbXoCk.oaimnY0UzYv4f.WxGG18GSAnKFQHit8LRq9hs1_5Erse67ooshVrznwM6j3sCdm68gU ZvD8Vpjw8FNDe5uhVgEfY6j2wMXzgFNgc4e8xWi0SI1z4dE6OIEeIhBb.6j1cQHKaF.9OtACngBR nnC.gV4i5o5YD.kW_EDM.bAoEfQciZXVoHoQBw9VJSfZXsTer6Petec.qd5hHttZV846fkj8aDno TjM01ZyihgLRgtGsYFUfs7QueeShzVYWxeFuX4HV2iwa2P498p.R6esOqE7NuBA55SIRo0MP2CB5 2YEtt2e1QdorwLDT74cXqzpYidtnnEeAA.cw2GC60_TgV9dAn4KwxMX7v967MR0Xhvm7o1.Cza8J Lvrvx1EcWD56lLnv0xYsXw8I3EfaprmbztdLpQstLQuOWH4x97y5ACVOL2FKTre942786sUfD3ko 80ntIJNi77CXK24iIvb9bIdNhtOIum3izyFjpt6vh9z3vy8H5sg_w5mgm8WR0MZMg2HR_ARbnFV_ .8jBiga5FvFJHCVyBmYL0Bzh00eBdhVEvWrfqhnHk.UwzVGmnD7tRHRVRDSURblf1xXg2Icl1yAK K1eNcfQs1.MCBm73sTql7i5RJnjNbArnbfPGC0NfmtV57n9zOy.cO6Na.3FWpguHFBR5Y6hgkghH CKnWB.ahDhSUFXVFeuDRkbryn4DWWe9IPuBT26HPnVixcV6qNbTXGGP0zyoGE4Cpt6lh6TKfHrfA iFy1_zhzerBrPxBM7tmugFzeuCUuRG85wTkeHDzOuaoVEm.T_kZPANRaoai4NlfZjE6ZiZF1Dm.C EIGZpe24bJkU_P7cAidYX1LhAJrofAP3y0MUScXA5g_36LG06rQGCbTNPu8VPlSS7o3Z0E6gkyjl 65NG92mcMx2U03N_bX5QmfZzV.8NGGdD.h6YiAI4GxCGAIhagBRFJKzA96hktlx7OKCtzRcy9w2O zH1VMWeVuroPnhbMnb0CsVxIpO25rBZKMtqMn8_mDWe5ZDlu1DkcNO8wfMCflAYgU8lsCeXv_hD6 TaL.koDO9f3m..cI6bQH5.ycoVc4xS_qBz0abhRG7yI4ZogrAnlUrMy2B9jjEK3QjVbKfHFyIkYz QjDerYaO61SESrIy3zgIH9HgE5vTTMgrloFJUVeQr.9daWpMNJhf9N5y8pJ2ejqtpx6qeOMOsZsZ DNuCMUubGiUTXbDgmundC8NvZSLRJQu2z98sevK5fBTwkPQ28DNxXKVnF5kqpqtg.eCnyXgatd6B rokhcU6RO_4Uju11jBY2F0RQ_ruZxwNiaCyEUxVPJS42QOCYbP9_RGRlowvOeEaPm4.8yQE2o7Ec - Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Mon, 18 Nov 2019 20:01:21 +0000 Received: by smtp429.mail.ir2.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 4d0c28c81f8920309ac1104ce581c019; Mon, 18 Nov 2019 20:01:19 +0000 (UTC) User-agent: mu4e 1.2.0; emacs 26.3 From: Tim Gesthuizen Date: Mon, 18 Nov 2019 21:01:17 +0100 Message-ID: <87r2250x9u.fsf@yahoo.de> MIME-Version: 1.0 Content-Type: text/plain References: <87r2250x9u.fsf.ref@yahoo.de> X-Mailer: WebService/1.1.14728 hermes Apache-HttpAsyncClient/4.1.4 (Java/1.8.0_181) Content-Length: 2943 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 77.238.179.188 X-Spam-Score: -1.6 (-) 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: -2.6 (--) Hi, I was tinkering with srfi-11 and was wondering whether the following is correct: > scheme@(guile-user)> ,expand (let-values (((a b c) (values 1 2 3)) > ((d . e) (values 4 5))) > (list a b c d e)) > $26 = ((@@ (srfi srfi-11) call-with-values) > (lambda () (values 1 2 3)) > (lambda (t-1dff1b83541ce327-16e > t-1dff1b83541ce327-16f > t-1dff1b83541ce327-170) > ((@@ (srfi srfi-11) call-with-values) > (lambda () (values 4 5)) > (lambda (d . e) > (let ((t-1dff1b83541ce327-171 d) > (t-1dff1b83541ce327-172 e) > (a t-1dff1b83541ce327-16e) > (b t-1dff1b83541ce327-16f) > (c t-1dff1b83541ce327-170)) > (list a b c d e)))))) This differs from what the comment above the macro definition claims to expand to. It seems like the author forgot that he matched the temporaries before the variables in srfi-11.scm:94. > diff --git a/module/srfi/srfi-11.scm b/module/srfi/srfi-11.scm > index 22bda21a2..13a2ffc4d 100644 > --- a/module/srfi/srfi-11.scm > +++ b/module/srfi/srfi-11.scm > @@ -95,13 +95,13 @@ > (let lp ((vars (syntax vars))) > (syntax-case vars () > ((id . rest) > - (acons (syntax id) > - (car > + (acons (car > (generate-temporaries (syntax (id)))) > + (syntax id) > (lp (syntax rest)))) > - (id (acons (syntax id) > - (car > + (id (acons (car > (generate-temporaries (syntax (id)))) > + (syntax id) > '()))))) > ((id ...) ids) > ((tmp ...) tmps)) The code "works" anyhow because the lambdas are all nested and the inner ones capture the parameters of the outer ones. Which got me thinking why all the messing with temporaries is neccessary at all. Why is > (define-syntax let-values > (lambda (x) > (syntax-case x () > ((_ (clauses ...) b0 b1 ...) > (let lp ((clauses #'(clauses ...))) > (if (null? clauses) > #'(begin b0 b1 ...) > (syntax-case (car clauses) () > ((args exp) > (with-syntax ((inner (lp (cdr clauses)))) > #'(call-with-values (lambda () exp) > (lambda args inner))))))))))) not sufficient? I would not consider my self a Scheme expert and it could be that I just missed something. It would be nice if someone could verify whether this is a bug or not. I am using Guile 2.2.6 on Guix. Tim. From unknown Sat Sep 06 02:32:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38263: Bug in srfi-11 In-Reply-To: <87r2250x9u.fsf@yahoo.de> Resent-From: Tim Gesthuizen Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Tue, 19 Nov 2019 15:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38263 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: 38263@debbugs.gnu.org Received: via spool by 38263-submit@debbugs.gnu.org id=B38263.157417891230154 (code B ref 38263); Tue, 19 Nov 2019 15:56:02 +0000 Received: (at 38263) by debbugs.gnu.org; 19 Nov 2019 15:55:12 +0000 Received: from localhost ([127.0.0.1]:48266 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iX5qR-0007qI-R6 for submit@debbugs.gnu.org; Tue, 19 Nov 2019 10:55:12 -0500 Received: from sonic308-18.consmr.mail.ir2.yahoo.com ([77.238.178.146]:40524) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iX5qN-0007pM-Lo for 38263@debbugs.gnu.org; Tue, 19 Nov 2019 10:55:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1574178900; bh=WVRRFd2H630S4YBY+PkMGZSJOaSrVwmzamWcAxja8nE=; h=From:To:Subject:Date:References:From:Subject; b=jk+g0KsX3IIQTkbK6Rj/xSh5eLtCogjJivbGfIi4MI9iVojRWESGBZKSqxTZLtoSP7MEgFJQ55xTgbdRvgaX62eyMfF4ge8h1uTZnRiqCQrgeTz0du4F6UdofRqk3OXLXBDy/2km+hLUzEmagBISp8dWRqKrJZJWcKpKi0K/a5Klaax7JuhMTwobKY/p+UZYwwcUhM3DWf3OCEinlpDodQOko7x5e2hT+hp6SuPXE0dLp/KyTuQrtTmlOUIJBbry1T0EsOnl8KnnZ2cxAwOjN8tGMSZzh+odM9pqtTrtbldTT6D8eRSAnLyg1Ay55Ks7EeRDT8c/EwrK0/YFlmJjvg== X-YMail-OSG: BalO2csVM1mvDsVoRnFJuQiyc8ePKlDD9Cl81J2tIbgJHDS3wTdSh_l2BENAJg5 UslpqKhEa_EQpRJ20iI3eM93Ew4UnFeVC65HdgLzsEpxj.S26y4ZpPztyX4TLUzAPDa30OxqYAiG ybk6ENCRFn09VL5OkJoGUBd56QPO3o9l.wezhNvNccpCvL34_5qnbhvIIB8kEjYA8bXfbhZNKJ3v 0pz91Om6pVuiA7BuNlxNNYe7mlzd7zxYB1H1upYFHI6dopuTqaWYKCIhIHJaTA6coLYZq2dRyZ6_ K0W4yhjq3U0ZxrKED5ymDlcO8G587aj3KV.Sr5TbSYgEUwP3iWND2vg1wLyFky.BmZ22dWGMqbr. OhDnJSGMkqdabDNias4VhPEem.XHIQqwef23JjNXkih3rb_78Xk82ZnvLqBjqLjVrxq4aWpUtR0q NRF5ACIJdWjBFl9lJQDz96fgSvqbt5bI5ZKAqPCQMAIyhvNSuDHMxULrXq.Pc3Pwrsk4jNMpGeYu h3UV1oJOKKJ22BV1ccBWcLEZKNlSQFFCjl3WB3hYV6PqYB0i_Qhz4iY3tMCWMOFQsK2fpu.Pb5fm 8OcFUbaIZJlINZFF.zZo5CboqNxqhHXKYI01oXlifz7tWbLcFvs6nhBxUQg.V6Uad3wUgjObAdu0 Sa43aK8p7GVhw7OmBe2R2PjmW8DvLoaOHWODmvRkxXP5lHcACa4QxepodoscyAI4Tk1hdALCdOWL BFSlNCyPZeHiZan8TNGls7lh2Pgolod6ee.yT0ROPqwRqUs9QeFGzELUvxIjgJRuOoGzIyBdGEYt QX5VcrQth95NPsY2AZeY5U87P_LXXmqMtcHt5MPxgpHa4znMf8JW0ELWbtW_BkgcmgrAEuGSsoSl MZR3B.d1U6DqrRjygmAxiqiJqV74tKwbFig5mzQPExutV6uQLVT9fKqXL.ckQHoIAbql9jX7XMJh gdkcubY.ypB6lsD1RSz8mmK2fPEAtx9pUfCvNFzySJm8OPSnnmlaF4kdwYx6nj2HuhKd7NoYsX7D M6Vl4PmHWni0lb6iXaHH3pF_XEeXVBaTAjrHTVYNHqVWT2xKCHVraqxB60yA_egRYc19W15Pqfhj ffa77FrkZxdbpOjmJTrxuDVODlz3CRAC6uUMbrlXKpqHn_oA8_VO4nSCNNFWJC_k1lzs.vcmDg31 igbCPrvtL0pFUswsyiaXFDJqL9BkxkMKnxcTigkldr2zx62o46_bpoP27I574.cbQijIM2.CVCi6 sCEqBG3YqNoa7MdW5edA7xQB.ktn09d65AhrIqlQnUnGMKuvZ1Q.mqvp7dzKyzgEzGs541iJmd.n hrwA_i3OXJ3xp6MfN3WwsgAy8hRSNiPKnZ3d5JcdRNBafk.TLYLTjF_xXn6770..UGwqfXScDcYG BFdBa Received: from sonic.gate.mail.ne1.yahoo.com by sonic308.consmr.mail.ir2.yahoo.com with HTTP; Tue, 19 Nov 2019 15:55:00 +0000 Received: by smtp423.mail.ir2.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID b222b96806f5152476a0a3db12115d8d; Tue, 19 Nov 2019 15:54:59 +0000 (UTC) User-agent: mu4e 1.2.0; emacs 26.3 From: Tim Gesthuizen Date: Tue, 19 Nov 2019 16:54:57 +0100 Message-ID: <87blt76eum.fsf@yahoo.de> MIME-Version: 1.0 Content-Type: text/plain References: <87blt76eum.fsf.ref@yahoo.de> X-Mailer: WebService/1.1.14728 hermes Apache-HttpAsyncClient/4.1.4 (Java/1.8.0_181) Content-Length: 400 X-Spam-Score: 0.0 (/) 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: -1.0 (-) Hi, I had a look today into the srfi-11 specificiation. It requires that the variables are bound to fresh locations so let me rephrase the bug: > (let ((a 1) > (b (let-values (((a . b) (values 2 3)) > (c (begin (set! a 9) 4))) > (list a b c)))) > (cons a b)) Evaluates to `(1 9 (3) (4))` while it should evaluate to `(9 2 (3) (4))`. Hope this helps, Tim. From unknown Sat Sep 06 02:32:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38263: Bug in srfi-11 Resent-From: Mark H Weaver Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Sun, 24 Nov 2019 08:54:16 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38263 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: Tim Gesthuizen Cc: 38263@debbugs.gnu.org Received: via spool by 38263-submit@debbugs.gnu.org id=B38263.157458557027467 (code B ref 38263); Sun, 24 Nov 2019 08:54:16 +0000 Received: (at 38263) by debbugs.gnu.org; 24 Nov 2019 08:52:50 +0000 Received: from localhost ([127.0.0.1]:58078 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iYnZa-00073c-RM for submit@debbugs.gnu.org; Sun, 24 Nov 2019 03:49:05 -0500 Received: from world.peace.net ([64.112.178.59]:35404) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iYnWZ-0006zK-3T for 38263@debbugs.gnu.org; Sun, 24 Nov 2019 03:45:46 -0500 Received: from mhw by world.peace.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1iYnWX-0007aX-KX; Sun, 24 Nov 2019 03:45:41 -0500 From: Mark H Weaver References: <87blt76eum.fsf.ref@yahoo.de> <87blt76eum.fsf@yahoo.de> Date: Sun, 24 Nov 2019 03:44:28 -0500 In-Reply-To: <87blt76eum.fsf@yahoo.de> (Tim Gesthuizen via's message of "Tue, 19 Nov 2019 16:54:57 +0100") Message-ID: <87pnhh1x4o.fsf@netris.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) 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: -1.0 (-) Hi Tim, Tim Gesthuizen wrote: > Hi, > I had a look today into the srfi-11 specificiation. It requires that the > variables are bound to fresh locations so let me rephrase the bug: > >> (let ((a 1) >> (b (let-values (((a . b) (values 2 3)) >> (c (begin (set! a 9) 4))) >> (list a b c)))) >> (cons a b)) > > Evaluates to `(1 9 (3) (4))` while it should evaluate to > `(9 2 (3) (4))`. I agree that this example indicates a bug in Guile's 'let-values' implementation (which was written by Andy Wingo in August 2009), but I disagree that it should evaluate to '(9 2 (3) (4)). I think that your example should raise an error, because at the point where (set! a 9) is found, neither of the 'a' variables are in scope. Regards, Mark From unknown Sat Sep 06 02:32:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38263: Bug in srfi-11 Resent-From: Mark H Weaver Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Mon, 25 Nov 2019 13:26:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38263 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: Tim Gesthuizen Cc: 38263@debbugs.gnu.org Received: via spool by 38263-submit@debbugs.gnu.org id=B38263.157468835524156 (code B ref 38263); Mon, 25 Nov 2019 13:26:01 +0000 Received: (at 38263) by debbugs.gnu.org; 25 Nov 2019 13:25:55 +0000 Received: from localhost ([127.0.0.1]:47937 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iZENH-0006HY-JT for submit@debbugs.gnu.org; Mon, 25 Nov 2019 08:25:55 -0500 Received: from world.peace.net ([64.112.178.59]:38646) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iZENF-0006HP-Pt for 38263@debbugs.gnu.org; Mon, 25 Nov 2019 08:25:54 -0500 Received: from mhw by world.peace.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1iYxzv-0004fa-9M; Sun, 24 Nov 2019 14:56:43 -0500 From: Mark H Weaver In-Reply-To: <87r21x9k9f.fsf@yahoo.de> References: <87blt76eum.fsf.ref@yahoo.de> <87blt76eum.fsf@yahoo.de> <87pnhh1x4o.fsf@netris.org> <87r21x9k9f.fsf@yahoo.de> Date: Sun, 24 Nov 2019 14:55:30 -0500 Message-ID: <878so5122a.fsf@netris.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.0 (/) 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: -1.0 (-) --=-=-= Content-Type: text/plain Hi Tim, > Mark H Weaver writes: >> I agree that this example indicates a bug in Guile's 'let-values' >> implementation (which was written by Andy Wingo in August 2009), but I >> disagree that it should evaluate to '(9 2 (3) (4)). I think that your >> example should raise an error, because at the point where (set! a 9) is >> found, neither of the 'a' variables are in scope. > > Oops, that `let` should have been a `let*` (Moving the first a into > scope). But if you could verify that what I described is a bug I would > like to propose a patch. I agree that it's a bug, and that if you change 'let' to 'let*' in your previous example, the result should be '(9 2 (3) (4)). I took a quick look, and I believe the fix is simply to swap 'new-var' and 'new-tmp' on line 95 of srfi-11.scm. See the attached patch. Does it fix the problems you're seeing? Thanks, Mark --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-Fix-let-values-where-formals-is-an-improper-list.patch Content-Description: [PATCH] Fix 'let-values' where is an improper list >From 4657b95713facffcde685b578ed19dbeb45624d0 Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Sun, 24 Nov 2019 14:46:45 -0500 Subject: [PATCH] Fix 'let-values' where is an improper list. Fixes . Reported by Tim Gesthuizen . * module/srfi/srfi-11.scm (let-values): Swap 'new-tmp' and 'new-var' in the pair pattern, to match the code that creates those pairs. --- module/srfi/srfi-11.scm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/module/srfi/srfi-11.scm b/module/srfi/srfi-11.scm index 22bda21a2..42b8527ba 100644 --- a/module/srfi/srfi-11.scm +++ b/module/srfi/srfi-11.scm @@ -1,6 +1,7 @@ ;;; srfi-11.scm --- let-values and let*-values -;; Copyright (C) 2000, 2001, 2002, 2004, 2006, 2009 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2001, 2002, 2004, 2006, 2009, +;; 2019 Free Software Foundation, Inc. ;; ;; This library is free software; you can redistribute it and/or ;; modify it under the terms of the GNU Lesser General Public @@ -91,7 +92,7 @@ (syntax (call-with-values (lambda () exp) (lambda (new-tmp ...) inner)))))) ((vars exp) - (with-syntax ((((new-tmp . new-var) ...) + (with-syntax ((((new-var . new-tmp) ...) (let lp ((vars (syntax vars))) (syntax-case vars () ((id . rest) -- 2.24.0 --=-=-=-- From unknown Sat Sep 06 02:32:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38263: Bug in srfi-11 Resent-From: Tim Gesthuizen Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Tue, 03 Dec 2019 18:16:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38263 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: Mark H Weaver Cc: 38263@debbugs.gnu.org Received: via spool by 38263-submit@debbugs.gnu.org id=B38263.15753969469911 (code B ref 38263); Tue, 03 Dec 2019 18:16:02 +0000 Received: (at 38263) by debbugs.gnu.org; 3 Dec 2019 18:15:46 +0000 Received: from localhost ([127.0.0.1]:41045 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1icCi9-0002Zl-So for submit@debbugs.gnu.org; Tue, 03 Dec 2019 13:15:46 -0500 Received: from sonic301-22.consmr.mail.ir2.yahoo.com ([77.238.176.99]:46595) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1icCi7-0002ZR-0B for 38263@debbugs.gnu.org; Tue, 03 Dec 2019 13:15:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1575396935; bh=LyCKylzYYhwnpHXDVnXUFTcfdU6lMneqhMZFla6/H+A=; h=References:From:To:Cc:Subject:Date:From:Subject; b=FO5yhWYCXxCXB0qNduOBfKI1RF6IFvJvlNxk1JbvE5iWgj8diKu4gPLrdYItj9KfWfmBL4tZTV2nf73rNTBySpP2ESSZ2O8L3FQ9B64vcqo/VjYC8zzusShvrMYLDTct/Wxbkd2AjfyRM3DtqsxBIGoEgk00wNNrkFUmDzbDNiFemLdyqzsXhCFjITbx9RJMsaEU37Orqk/v7Xr4r2m2mos1vMVmaOtbK7NWpKEMUUEXAAzJk3uePmgjlReARW3mF0aEjJqwZ6verf+AL9pCd5jp3PAuxwPOY/ge+Gy4BVM3l8izXw7UhEfp55nMi25ghyBrZE6Q78gdb9LHt0AyFg== X-YMail-OSG: Y.VxCSoVM1mWjQOjI7pFcfJsomvQ9IVAnLWdZQpOFlZ2Tw2NAgt_NfN8j2fV_h5 TxcTQUPCc28YJwqAGSl.2pcxxIHpZwnTKaYI2UWjGenrqNvlguWQz0pxGSp5efkUKpqd6WYMYh8X yewMKlfTC7HkLr2oDojAV9L6D6Vsc7gCiA_02tpdmIovMoYdVg4tOiANy.GHe9etnw8fk2WCtIq8 lDPHB4cfPV5zm3jdtbx7Cx_nIdnoaW.WbZi32MXfuILc8VBjsJ5HIMS_pRpB3HOL09VuJEPP8V.i XqvWTsYu9NqsSS_Icx8x22UhtAo5dMVefbOrigm.pTgBdTJTh7.Nesj08FTjb9PW7I82bLcTXtHx L5XznLsvIbJiqaaj._VybVwc4n4rz46.bleO0OIS7MXpYB4qorN2H8DrNmYXHWJ4CM90VWIWFxiA LQf2aHQodnWusoaGFofZPi8KuVbljI5UjS8Sz1UUXqAStj9N7420uPMQn0PgvLCrbr1fpfqvOc9H XSEquicENB5c1jhLPtU.ZjVjBpdPVVwRMjOGX.QeQr6bSxzCAsrl5GR8OQK91EyHghRtkIKVUQEq 03cCSVAXictzKXF62w_W8TGIWy7cZs5vxson7IbarTLq3LglKek.NkbrrlZU2BTqybfLVS9ua5Zs R9ns9U7JvJxNRduz.Lws2FVQ0OzF9baC.lT0pOar9FnJBamIpvm5bjW72KaO0IgYVQ71Kd7XuhYI PhU5GuT47Vm1D5pkYBCdHNidqhR03TmThJ5y6Uo7vHQdgaqAvgiqXKZtNWp7._ULA.srC1TpKlVw QKnZSnUzBuwna2_hElT0k9nJZIceGn6Us_FE1DE_8rawLSIvZ7SB7pI7ZOVMaIuVBhw7T.UIRMs6 2itN_i5Gx99awU84Cu1HAyLbpsvwnHDg4WzaxBrTXt.vG0N9l9IYNn3zgoLxSGxRon4ly1WIoogK ujLthMurwg.aWLeNLyGyoDRb2DM_iuOCvR5O13rJFzFL74dy2ecXyFnEy_v30AuhCkv9rsllvr1c lWNhNwjRYhkw_L.PqIEiQoHnd5TowJbgCeaY45IM2OtBl2we8QgYInbO1C1UAV2L4gKKCbFuhAiC IIZvlAnFWKD6FH_vZBtQs4fRJdYkmThdpdaeVSsSb2ZKdQhVP8jzqHYMXugFimz4hHTRwvVQaUcJ C4nqm3c_p_1ATArI2huvXMUR9lq7AVQPJjRMUmh1iiGLmS_lO1GvEUL28h.3.Qe_xlv0H3gBPkTc 45QkqHFFolVI8Bgo0r4k9a8fHczL87uZY1AYi4wl4ah_eVW1t.XZtuwI_FMdCWbotwk8HfugQmYw tzArZirEw8WeSQaZBW3cCXlrN8yFXgAALT6K3KUkw0RaW6wkm9xXxAaIgLYENpc20kWtjpxP8av5 6y0.mlNjLpaw. Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.ir2.yahoo.com with HTTP; Tue, 3 Dec 2019 18:15:35 +0000 Received: by smtp422.mail.ir2.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 38150f8377b4fb08ffe59cf03c0f404c; Tue, 03 Dec 2019 18:15:30 +0000 (UTC) References: <87blt76eum.fsf.ref@yahoo.de> <87blt76eum.fsf@yahoo.de> <87pnhh1x4o.fsf@netris.org> <87r21x9k9f.fsf@yahoo.de> <878so5122a.fsf@netris.org> <87pnhh9h45.fsf@yahoo.de> User-agent: mu4e 1.2.0; emacs 26.3 From: Tim Gesthuizen In-reply-to: <87pnhh9h45.fsf@yahoo.de> Date: Tue, 03 Dec 2019 19:15:29 +0100 Message-ID: <87o8wpz35q.fsf@yahoo.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Mailer: WebService/1.1.14728 hermes Apache-HttpAsyncClient/4.1.4 (Java/1.8.0_181) Content-Length: 2289 X-Spam-Score: -0.1 (/) 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: -1.1 (-) --=-=-= Content-Type: text/plain Hello again, the attached patch also adds a unit test. I am not into how Guile is organized: Is there anything keeping us from adding the change? Tim. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-srfi-11-Do-not-expose-variables-to-later-clauses.patch >From 99d8fb795932eb92b7d5fb09115b6691f4bfe66d Mon Sep 17 00:00:00 2001 From: Tim Gesthuizen Date: Tue, 3 Dec 2019 18:50:37 +0100 Subject: [PATCH] srfi-11: Do not expose variables to later clauses The current implementation of srfi-11s let-values allows later clauses to access and modify variables bound in earlier clauses when the clause is not a proper list. * module/srfi/srfi-11.scm (let-values): Fix switched variable names. * test-suite/tests/srfi-11.test (let-values): Add test checking that the variable cannot be changed in later clauses. --- module/srfi/srfi-11.scm | 2 +- test-suite/tests/srfi-11.test | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/module/srfi/srfi-11.scm b/module/srfi/srfi-11.scm index 22bda21a2..7afac9c5f 100644 --- a/module/srfi/srfi-11.scm +++ b/module/srfi/srfi-11.scm @@ -91,7 +91,7 @@ (syntax (call-with-values (lambda () exp) (lambda (new-tmp ...) inner)))))) ((vars exp) - (with-syntax ((((new-tmp . new-var) ...) + (with-syntax ((((new-var . new-tmp) ...) (let lp ((vars (syntax vars))) (syntax-case vars () ((id . rest) diff --git a/test-suite/tests/srfi-11.test b/test-suite/tests/srfi-11.test index 40563dc18..9bfaa4300 100644 --- a/test-suite/tests/srfi-11.test +++ b/test-suite/tests/srfi-11.test @@ -74,7 +74,14 @@ '(unbound-variable . ".*") (let-values (((x) (values 1)) ((y) (values (1+ x)))) - #f)))) + #f)) + + (pass-if "first binding with rest invisible to second expr" + (let* ((a 1) + (b (let-values (((a . b) (values 2 3)) + (c (begin (set! a 9) 4))) + (list a b c)))) + (equal? (cons a b) '(9 2 (3) (4))))))) ;; ;; let*-values -- 2.24.0 --=-=-=-- From unknown Sat Sep 06 02:32:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38263: Bug in srfi-11 Resent-From: Andy Wingo Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Sun, 12 Jan 2020 21:24:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38263 X-GNU-PR-Package: guile X-GNU-PR-Keywords: To: 38263@debbugs.gnu.org Cc: Mark H Weaver , 38263-done@debbugs.gnu.org X-Debbugs-Original-To: Tim Gesthuizen via "Bug reports for GUILE\, GNU's Ubiquitous Extension Language" Received: via spool by submit@debbugs.gnu.org id=B.1578864228677 (code B ref -1); Sun, 12 Jan 2020 21:24:02 +0000 Received: (at submit) by debbugs.gnu.org; 12 Jan 2020 21:23:48 +0000 Received: from localhost ([127.0.0.1]:58269 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iqki4-0000Ar-AK for submit@debbugs.gnu.org; Sun, 12 Jan 2020 16:23:48 -0500 Received: from lists.gnu.org ([209.51.188.17]:39337) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iqki3-0000Ak-47 for submit@debbugs.gnu.org; Sun, 12 Jan 2020 16:23:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:33599) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iqki1-0000iI-Sm for bug-guile@gnu.org; Sun, 12 Jan 2020 16:23:46 -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.0 required=5.0 tests=BAYES_20,URIBL_BLOCKED autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iqki0-0005xA-O2 for bug-guile@gnu.org; Sun, 12 Jan 2020 16:23:45 -0500 Received: from fanzine.igalia.com ([178.60.130.6]:45607) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iqki0-0005qf-43 for bug-guile@gnu.org; Sun, 12 Jan 2020 16:23:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date:References:Subject:Cc:To:From; bh=7xD9SADUnbrmPGhz1vyWwdPazBXV/RkcJ8eXUaWwuSg=; b=hcyfJ94M/wLRPfLDukARlxygUDW/hw2TEcN0PzZod6IMbvoDK4UdFtw4UdO13ilgv0fcm+dSrpZYEl7+GBNdwsVxGObvSoj+i4G7LgqSJFldZDApKTAgjYAfM5JpAtxPDAJf1cXPg01gaFmav10wXFYVjpNgPg40TefXGqA4kv7cvwFTSjMslDjnEH5w5Qh7SJkXN1B0e2j7p1thyELuCV9bFxrnSgSUEu6OHEfDwy14PDWZDS0u6dt48uxWdN161nGJRg6/vJ/qPiHB1kKO1sB8kL6UUjcDnnA7IlvAjbSA1gkkL57kIPDr0ll/RGt8x1I7B6ng0kApT34qN4jQxQ==; Received: from [88.123.12.110] (helo=sparrow) by fanzine.igalia.com with esmtpsa (Cipher TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim) id 1iqkho-0002l0-0X; Sun, 12 Jan 2020 22:23:32 +0100 From: Andy Wingo References: <87blt76eum.fsf.ref@yahoo.de> <87blt76eum.fsf@yahoo.de> <87pnhh1x4o.fsf@netris.org> <87r21x9k9f.fsf@yahoo.de> <878so5122a.fsf@netris.org> <87pnhh9h45.fsf@yahoo.de> <87o8wpz35q.fsf@yahoo.de> Date: Sun, 12 Jan 2020 22:23:21 +0100 In-Reply-To: <87o8wpz35q.fsf@yahoo.de> (Tim Gesthuizen via's message of "Tue, 03 Dec 2019 19:15:29 +0100") Message-ID: <87h810mks6.fsf@pobox.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] [fuzzy] X-Received-From: 178.60.130.6 X-Spam-Score: -1.6 (-) 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: -2.6 (--) Applied to both branches. Thanks for the patch and thanks also to Mark for the review and initial patch! In the future, Tim, if you have larger patches, we should work out copyright assignment paperwork. But less-than-10-line patches are fine without. Let me know if this is of interest to you. Cheers :) Andy On Tue 03 Dec 2019 19:15, Tim Gesthuizen via "Bug reports for GUILE, GNU's Ubiquitous Extension Language" writes: > Hello again, > > the attached patch also adds a unit test. > I am not into how Guile is organized: Is there anything keeping us from > adding the change? > > Tim. > > From 99d8fb795932eb92b7d5fb09115b6691f4bfe66d Mon Sep 17 00:00:00 2001 > From: Tim Gesthuizen > Date: Tue, 3 Dec 2019 18:50:37 +0100 > Subject: [PATCH] srfi-11: Do not expose variables to later clauses > > The current implementation of srfi-11s let-values allows later clauses > to access and modify variables bound in earlier clauses when the clause > is not a proper list. > > * module/srfi/srfi-11.scm (let-values): Fix switched variable names. > * test-suite/tests/srfi-11.test (let-values): Add test checking that the > variable cannot be changed in later clauses. > --- > module/srfi/srfi-11.scm | 2 +- > test-suite/tests/srfi-11.test | 9 ++++++++- > 2 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/module/srfi/srfi-11.scm b/module/srfi/srfi-11.scm > index 22bda21a2..7afac9c5f 100644 > --- a/module/srfi/srfi-11.scm > +++ b/module/srfi/srfi-11.scm > @@ -91,7 +91,7 @@ > (syntax (call-with-values (lambda () exp) > (lambda (new-tmp ...) inner)))))) > ((vars exp) > - (with-syntax ((((new-tmp . new-var) ...) > + (with-syntax ((((new-var . new-tmp) ...) > (let lp ((vars (syntax vars))) > (syntax-case vars () > ((id . rest) > diff --git a/test-suite/tests/srfi-11.test b/test-suite/tests/srfi-11.test > index 40563dc18..9bfaa4300 100644 > --- a/test-suite/tests/srfi-11.test > +++ b/test-suite/tests/srfi-11.test > @@ -74,7 +74,14 @@ > '(unbound-variable . ".*") > (let-values (((x) (values 1)) > ((y) (values (1+ x)))) > - #f)))) > + #f)) > + > + (pass-if "first binding with rest invisible to second expr" > + (let* ((a 1) > + (b (let-values (((a . b) (values 2 3)) > + (c (begin (set! a 9) 4))) > + (list a b c)))) > + (equal? (cons a b) '(9 2 (3) (4))))))) > > ;; > ;; let*-values From unknown Sat Sep 06 02:32:35 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Tim Gesthuizen Subject: bug#38263: closed (Re: bug#38263: Bug in srfi-11) Message-ID: References: <87h810mks6.fsf@pobox.com> <87r2250x9u.fsf@yahoo.de> X-Gnu-PR-Message: they-closed 38263 X-Gnu-PR-Package: guile Reply-To: 38263@debbugs.gnu.org Date: Sun, 12 Jan 2020 21:24:03 +0000 Content-Type: multipart/mixed; boundary="----------=_1578864243-709-1" This is a multi-part message in MIME format... ------------=_1578864243-709-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #38263: Bug in srfi-11 (?) which was filed against the guile package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 38263@debbugs.gnu.org. --=20 38263: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D38263 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1578864243-709-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 38263-done) by debbugs.gnu.org; 12 Jan 2020 21:23:44 +0000 Received: from localhost ([127.0.0.1]:58265 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iqki0-0000AZ-0L for submit@debbugs.gnu.org; Sun, 12 Jan 2020 16:23:44 -0500 Received: from fanzine.igalia.com ([178.60.130.6]:54780) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iqkhv-0000AE-PN for 38263-done@debbugs.gnu.org; Sun, 12 Jan 2020 16:23:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date:References:Subject:Cc:To:From; bh=7xD9SADUnbrmPGhz1vyWwdPazBXV/RkcJ8eXUaWwuSg=; b=hcyfJ94M/wLRPfLDukARlxygUDW/hw2TEcN0PzZod6IMbvoDK4UdFtw4UdO13ilgv0fcm+dSrpZYEl7+GBNdwsVxGObvSoj+i4G7LgqSJFldZDApKTAgjYAfM5JpAtxPDAJf1cXPg01gaFmav10wXFYVjpNgPg40TefXGqA4kv7cvwFTSjMslDjnEH5w5Qh7SJkXN1B0e2j7p1thyELuCV9bFxrnSgSUEu6OHEfDwy14PDWZDS0u6dt48uxWdN161nGJRg6/vJ/qPiHB1kKO1sB8kL6UUjcDnnA7IlvAjbSA1gkkL57kIPDr0ll/RGt8x1I7B6ng0kApT34qN4jQxQ==; Received: from [88.123.12.110] (helo=sparrow) by fanzine.igalia.com with esmtpsa (Cipher TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim) id 1iqkho-0002l0-0X; Sun, 12 Jan 2020 22:23:32 +0100 From: Andy Wingo To: Tim Gesthuizen via "Bug reports for GUILE\, GNU's Ubiquitous Extension Language" Subject: Re: bug#38263: Bug in srfi-11 References: <87blt76eum.fsf.ref@yahoo.de> <87blt76eum.fsf@yahoo.de> <87pnhh1x4o.fsf@netris.org> <87r21x9k9f.fsf@yahoo.de> <878so5122a.fsf@netris.org> <87pnhh9h45.fsf@yahoo.de> <87o8wpz35q.fsf@yahoo.de> Date: Sun, 12 Jan 2020 22:23:21 +0100 In-Reply-To: <87o8wpz35q.fsf@yahoo.de> (Tim Gesthuizen via's message of "Tue, 03 Dec 2019 19:15:29 +0100") Message-ID: <87h810mks6.fsf@pobox.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 38263-done Cc: Mark H Weaver , 38263-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: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.3 (/) Applied to both branches. Thanks for the patch and thanks also to Mark for the review and initial patch! In the future, Tim, if you have larger patches, we should work out copyright assignment paperwork. But less-than-10-line patches are fine without. Let me know if this is of interest to you. Cheers :) Andy On Tue 03 Dec 2019 19:15, Tim Gesthuizen via "Bug reports for GUILE, GNU's Ubiquitous Extension Language" writes: > Hello again, > > the attached patch also adds a unit test. > I am not into how Guile is organized: Is there anything keeping us from > adding the change? > > Tim. > > From 99d8fb795932eb92b7d5fb09115b6691f4bfe66d Mon Sep 17 00:00:00 2001 > From: Tim Gesthuizen > Date: Tue, 3 Dec 2019 18:50:37 +0100 > Subject: [PATCH] srfi-11: Do not expose variables to later clauses > > The current implementation of srfi-11s let-values allows later clauses > to access and modify variables bound in earlier clauses when the clause > is not a proper list. > > * module/srfi/srfi-11.scm (let-values): Fix switched variable names. > * test-suite/tests/srfi-11.test (let-values): Add test checking that the > variable cannot be changed in later clauses. > --- > module/srfi/srfi-11.scm | 2 +- > test-suite/tests/srfi-11.test | 9 ++++++++- > 2 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/module/srfi/srfi-11.scm b/module/srfi/srfi-11.scm > index 22bda21a2..7afac9c5f 100644 > --- a/module/srfi/srfi-11.scm > +++ b/module/srfi/srfi-11.scm > @@ -91,7 +91,7 @@ > (syntax (call-with-values (lambda () exp) > (lambda (new-tmp ...) inner)))))) > ((vars exp) > - (with-syntax ((((new-tmp . new-var) ...) > + (with-syntax ((((new-var . new-tmp) ...) > (let lp ((vars (syntax vars))) > (syntax-case vars () > ((id . rest) > diff --git a/test-suite/tests/srfi-11.test b/test-suite/tests/srfi-11.test > index 40563dc18..9bfaa4300 100644 > --- a/test-suite/tests/srfi-11.test > +++ b/test-suite/tests/srfi-11.test > @@ -74,7 +74,14 @@ > '(unbound-variable . ".*") > (let-values (((x) (values 1)) > ((y) (values (1+ x)))) > - #f)))) > + #f)) > + > + (pass-if "first binding with rest invisible to second expr" > + (let* ((a 1) > + (b (let-values (((a . b) (values 2 3)) > + (c (begin (set! a 9) 4))) > + (list a b c)))) > + (equal? (cons a b) '(9 2 (3) (4))))))) > > ;; > ;; let*-values ------------=_1578864243-709-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 18 Nov 2019 20:01:30 +0000 Received: from localhost ([127.0.0.1]:46287 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iWnDG-0002ZN-2P for submit@debbugs.gnu.org; Mon, 18 Nov 2019 15:01:30 -0500 Received: from lists.gnu.org ([209.51.188.17]:38771) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iWnDE-0002ZF-5n for submit@debbugs.gnu.org; Mon, 18 Nov 2019 15:01:28 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51811) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iWnDC-0001BE-LV for bug-guile@gnu.org; Mon, 18 Nov 2019 15:01: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, RCVD_IN_DNSWL_NONE,URIBL_BLOCKED autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iWnDB-0004Vb-2s for bug-guile@gnu.org; Mon, 18 Nov 2019 15:01:26 -0500 Received: from sonic313-21.consmr.mail.ir2.yahoo.com ([77.238.179.188]:36558) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iWnDA-0004Ux-K3 for bug-guile@gnu.org; Mon, 18 Nov 2019 15:01:25 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1574107281; bh=itoZtu/0AwuOMPouHshucJIkqK3Id+GmbYUmVWWCebc=; h=From:To:Subject:Date:References:From:Subject; b=bmt0EFOdg17Wxla9W5IMc9HhNQGgan+GhglfeVfu0QI8ug9KtxP77dZyQdsLtGZY29aGCbFL9ogjPRUPEiZcya+AY79/47BvbUYICAECrie3HqO6UuHEvJZoe1tw4ebYr7sJ6ha+JXY/R9zW0yYY4oy6M/+konXSQAPO16m6qTFxzUXFf0ltLp1EWEUO0iH35fU/190xFN58y42nBCjWB1uaQDWMuwZwvEU01fNwrSddFtQgKdyrMEABkYIZghTjPa6SvektolzV6BXpWlldY8tngrWITXySZDsXTokTPhNYHoQAO54kQT5GEnkwrcnqkuAZkNL2ULGPCNEENsZlpQ== X-YMail-OSG: y9ljF1wVM1n5QJaQvs_HzWUuudRDpArM.vkXq0u.Gl6d1VyPljoJRkuUbjBTlWj gcEbXoCk.oaimnY0UzYv4f.WxGG18GSAnKFQHit8LRq9hs1_5Erse67ooshVrznwM6j3sCdm68gU ZvD8Vpjw8FNDe5uhVgEfY6j2wMXzgFNgc4e8xWi0SI1z4dE6OIEeIhBb.6j1cQHKaF.9OtACngBR nnC.gV4i5o5YD.kW_EDM.bAoEfQciZXVoHoQBw9VJSfZXsTer6Petec.qd5hHttZV846fkj8aDno TjM01ZyihgLRgtGsYFUfs7QueeShzVYWxeFuX4HV2iwa2P498p.R6esOqE7NuBA55SIRo0MP2CB5 2YEtt2e1QdorwLDT74cXqzpYidtnnEeAA.cw2GC60_TgV9dAn4KwxMX7v967MR0Xhvm7o1.Cza8J Lvrvx1EcWD56lLnv0xYsXw8I3EfaprmbztdLpQstLQuOWH4x97y5ACVOL2FKTre942786sUfD3ko 80ntIJNi77CXK24iIvb9bIdNhtOIum3izyFjpt6vh9z3vy8H5sg_w5mgm8WR0MZMg2HR_ARbnFV_ .8jBiga5FvFJHCVyBmYL0Bzh00eBdhVEvWrfqhnHk.UwzVGmnD7tRHRVRDSURblf1xXg2Icl1yAK K1eNcfQs1.MCBm73sTql7i5RJnjNbArnbfPGC0NfmtV57n9zOy.cO6Na.3FWpguHFBR5Y6hgkghH CKnWB.ahDhSUFXVFeuDRkbryn4DWWe9IPuBT26HPnVixcV6qNbTXGGP0zyoGE4Cpt6lh6TKfHrfA iFy1_zhzerBrPxBM7tmugFzeuCUuRG85wTkeHDzOuaoVEm.T_kZPANRaoai4NlfZjE6ZiZF1Dm.C EIGZpe24bJkU_P7cAidYX1LhAJrofAP3y0MUScXA5g_36LG06rQGCbTNPu8VPlSS7o3Z0E6gkyjl 65NG92mcMx2U03N_bX5QmfZzV.8NGGdD.h6YiAI4GxCGAIhagBRFJKzA96hktlx7OKCtzRcy9w2O zH1VMWeVuroPnhbMnb0CsVxIpO25rBZKMtqMn8_mDWe5ZDlu1DkcNO8wfMCflAYgU8lsCeXv_hD6 TaL.koDO9f3m..cI6bQH5.ycoVc4xS_qBz0abhRG7yI4ZogrAnlUrMy2B9jjEK3QjVbKfHFyIkYz QjDerYaO61SESrIy3zgIH9HgE5vTTMgrloFJUVeQr.9daWpMNJhf9N5y8pJ2ejqtpx6qeOMOsZsZ DNuCMUubGiUTXbDgmundC8NvZSLRJQu2z98sevK5fBTwkPQ28DNxXKVnF5kqpqtg.eCnyXgatd6B rokhcU6RO_4Uju11jBY2F0RQ_ruZxwNiaCyEUxVPJS42QOCYbP9_RGRlowvOeEaPm4.8yQE2o7Ec - Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Mon, 18 Nov 2019 20:01:21 +0000 Received: by smtp429.mail.ir2.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 4d0c28c81f8920309ac1104ce581c019; Mon, 18 Nov 2019 20:01:19 +0000 (UTC) User-agent: mu4e 1.2.0; emacs 26.3 From: Tim Gesthuizen To: bug-guile@gnu.org Subject: Bug in srfi-11 (?) Date: Mon, 18 Nov 2019 21:01:17 +0100 Message-ID: <87r2250x9u.fsf@yahoo.de> MIME-Version: 1.0 Content-Type: text/plain References: <87r2250x9u.fsf.ref@yahoo.de> X-Mailer: WebService/1.1.14728 hermes Apache-HttpAsyncClient/4.1.4 (Java/1.8.0_181) Content-Length: 2943 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 77.238.179.188 X-Spam-Score: -1.6 (-) 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: -2.6 (--) Hi, I was tinkering with srfi-11 and was wondering whether the following is correct: > scheme@(guile-user)> ,expand (let-values (((a b c) (values 1 2 3)) > ((d . e) (values 4 5))) > (list a b c d e)) > $26 = ((@@ (srfi srfi-11) call-with-values) > (lambda () (values 1 2 3)) > (lambda (t-1dff1b83541ce327-16e > t-1dff1b83541ce327-16f > t-1dff1b83541ce327-170) > ((@@ (srfi srfi-11) call-with-values) > (lambda () (values 4 5)) > (lambda (d . e) > (let ((t-1dff1b83541ce327-171 d) > (t-1dff1b83541ce327-172 e) > (a t-1dff1b83541ce327-16e) > (b t-1dff1b83541ce327-16f) > (c t-1dff1b83541ce327-170)) > (list a b c d e)))))) This differs from what the comment above the macro definition claims to expand to. It seems like the author forgot that he matched the temporaries before the variables in srfi-11.scm:94. > diff --git a/module/srfi/srfi-11.scm b/module/srfi/srfi-11.scm > index 22bda21a2..13a2ffc4d 100644 > --- a/module/srfi/srfi-11.scm > +++ b/module/srfi/srfi-11.scm > @@ -95,13 +95,13 @@ > (let lp ((vars (syntax vars))) > (syntax-case vars () > ((id . rest) > - (acons (syntax id) > - (car > + (acons (car > (generate-temporaries (syntax (id)))) > + (syntax id) > (lp (syntax rest)))) > - (id (acons (syntax id) > - (car > + (id (acons (car > (generate-temporaries (syntax (id)))) > + (syntax id) > '()))))) > ((id ...) ids) > ((tmp ...) tmps)) The code "works" anyhow because the lambdas are all nested and the inner ones capture the parameters of the outer ones. Which got me thinking why all the messing with temporaries is neccessary at all. Why is > (define-syntax let-values > (lambda (x) > (syntax-case x () > ((_ (clauses ...) b0 b1 ...) > (let lp ((clauses #'(clauses ...))) > (if (null? clauses) > #'(begin b0 b1 ...) > (syntax-case (car clauses) () > ((args exp) > (with-syntax ((inner (lp (cdr clauses)))) > #'(call-with-values (lambda () exp) > (lambda args inner))))))))))) not sufficient? I would not consider my self a Scheme expert and it could be that I just missed something. It would be nice if someone could verify whether this is a bug or not. I am using Guile 2.2.6 on Guix. Tim. ------------=_1578864243-709-1--