From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: lloda Newsgroups: gmane.lisp.guile.bugs Subject: bug#61660: [feature request] optimization of case-lambda Date: Fri, 24 Feb 2023 18:26:29 +0100 Message-ID: References: Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.7\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_7C794E26-F35A-419F-96FB-E226E971EBDC" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="19423"; mail-complaints-to="usenet@ciao.gmane.io" To: 61660@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Fri Feb 24 18:27:19 2023 Return-path: Envelope-to: guile-bugs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pVbqn-0004p4-5O for guile-bugs@m.gmane-mx.org; Fri, 24 Feb 2023 18:27:17 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pVbqZ-0006Up-W6; Fri, 24 Feb 2023 12:27:04 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pVbqY-0006U1-KD for bug-guile@gnu.org; Fri, 24 Feb 2023 12:27:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pVbqY-0000Fr-Ad for bug-guile@gnu.org; Fri, 24 Feb 2023 12:27:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pVbqX-0004Z3-U6 for bug-guile@gnu.org; Fri, 24 Feb 2023 12:27:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: lloda Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Fri, 24 Feb 2023 17:27:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61660 X-GNU-PR-Package: guile Original-Received: via spool by 61660-submit@debbugs.gnu.org id=B61660.167725960117512 (code B ref 61660); Fri, 24 Feb 2023 17:27:01 +0000 Original-Received: (at 61660) by debbugs.gnu.org; 24 Feb 2023 17:26:41 +0000 Original-Received: from localhost ([127.0.0.1]:38184 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVbqC-0004YN-PG for submit@debbugs.gnu.org; Fri, 24 Feb 2023 12:26:41 -0500 Original-Received: from mta-14-4.privateemail.com ([198.54.118.206]:5090) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pVbqB-0004Y2-J0 for 61660@debbugs.gnu.org; Fri, 24 Feb 2023 12:26:40 -0500 Original-Received: from mta-14.privateemail.com (localhost [127.0.0.1]) by mta-14.privateemail.com (Postfix) with ESMTP id 7289618000A1 for <61660@debbugs.gnu.org>; Fri, 24 Feb 2023 12:26:32 -0500 (EST) Original-Received: from [192.168.1.105] (unknown [51.154.167.214]) by mta-14.privateemail.com (Postfix) with ESMTPA id E2F4418000A2 for <61660@debbugs.gnu.org>; Fri, 24 Feb 2023 12:26:31 -0500 (EST) In-Reply-To: X-Mailer: Apple Mail (2.3608.120.23.2.7) X-Virus-Scanned: ClamAV using ClamSMTP X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Original-Sender: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.bugs:10554 Archived-At: --Apple-Mail=_7C794E26-F35A-419F-96FB-E226E971EBDC Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii Fixed patch handling rest & #:optional, with test cases. --Apple-Mail=_7C794E26-F35A-419F-96FB-E226E971EBDC Content-Disposition: attachment; filename=0001-peval-reduces-some-inlined-case-lambda-calls.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-peval-reduces-some-inlined-case-lambda-calls.patch" Content-Transfer-Encoding: quoted-printable =46rom=2061ed612fb36108e395bdee4b1bbb46b49ef017b3=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Daniel=20Llorens=20=0ADate:=20= Thu,=2023=20Feb=202023=2017:38:10=20+0100=0ASubject:=20[PATCH]=20peval=20= reduces=20some=20inlined=20case-lambda=20calls=0A=0A*=20= module/language/tree-il/peval.scm=20(peval):=20Reduce=20multiple=20case=20= lambda=0A=20=20in=20=20trees=20according=20to=20the=20number=20of=20= arguments.=20Do=20not=20try=20to=0A=20=20reduce=20case-lambda=20using=20= keyword=20arguments.=0A*=20test-suite/tests/peval.test:=20Tests.=0A---=0A= =20module/language/tree-il/peval.scm=20|=2023=20++++++++++=0A=20= test-suite/tests/peval.test=20=20=20=20=20=20=20|=2072=20= +++++++++++++++++++++++++++++++=0A=202=20files=20changed,=2095=20= insertions(+)=0A=0Adiff=20--git=20a/module/language/tree-il/peval.scm=20= b/module/language/tree-il/peval.scm=0Aindex=207945fd9b9..7c05e9a2e=20= 100644=0A---=20a/module/language/tree-il/peval.scm=0A+++=20= b/module/language/tree-il/peval.scm=0A@@=20-1668,6=20+1668,29=20@@=20= top-level=20bindings=20from=20ENV=20and=20return=20the=20resulting=20= expression."=0A=20=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(log=20'inline-end=20result=20exp)=0A=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20result)))))=0A+=20=20=20=20=20=20=20=20=20=20=20= (($=20=20src-proc=20meta=20orig-body)=0A+=20=20=20=20=20=20=20=20= =20=20=20=20;;=20If=20there=20are=20multiple=20cases=20and=20one=20= matches=20nargs,=20omit=20all=20the=20others.=0A+=20=20=20=20=20=20=20=20= =20=20=20=20(or=20(and=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(lambda-case-alternate=20orig-body)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(let=20((nargs=20(length=20orig-args)))=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20loop=20((body=20= orig-body))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20(match=20body=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20(#f=20#f)=20;;=20No=20matching=20case;=20an=20error.=0A+=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(($=20= =20src-case=20req=20opt=20rest=20kw=20inits=20gensyms=20= case-body=20alt)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20(cond=20(kw=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20FIXME:=20Not=20= handling=20keyword=20cases.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#f)=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= ((let=20((nreq=20(length=20req)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20= rest=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20(<=3D=20nreq=20nargs)=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20(<=3D=20nreq=20nargs=20(+=20nreq=20(if=20opt=20= (length=20opt)=200)))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Keep=20only=20this=20= case.=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20(revisit-proc=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (make-lambda=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20src-proc=20meta=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20(make-lambda-case=20src-case=20req=20opt=20rest=20kw=20inits=20= gensyms=20case-body=20#f))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(else=20(loop=20= alt))))))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= (make-call=20src=20(for-call=20orig-proc)=20(map=20for-value=20= orig-args))))=0A=20=20=20=20=20=20=20=20=20=20=20=20(($=20=20_=20_=20= _=20vals=20_)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20;;=20Attempt=20to=20= inline=20`let'=20in=20the=20operator=20position.=0A=20=20=20=20=20=20=20=20= =20=20=20=20=20;;=0Adiff=20--git=20a/test-suite/tests/peval.test=20= b/test-suite/tests/peval.test=0Aindex=20a2e4975d9..8a8f0124a=20100644=0A= ---=20a/test-suite/tests/peval.test=0A+++=20= b/test-suite/tests/peval.test=0A@@=20-1456,6=20+1456,78=20@@=0A=20=20=20=20= =20;;=20.=0A=20=20=20=20=20(primcall=20= make-vector)))=0A=20=0A+(with-test-prefix=20"case-lambda"=0A+=20=20;;=20= one=20case=0A+=20=20(pass-if-peval=0A+=20=20=20((case-lambda=20(()=20= 0)))=0A+=20=20=20(const=200))=0A+=0A+=20=20;;=20middle=0A+=20=20= (pass-if-peval=0A+=20=20=20((case-lambda=20(()=200)=20((a=20b)=201)=20= ((a)=202))=201=202)=0A+=20=20=20(const=201))=0A+=0A+=20=20;;=20last=0A+=20= =20(pass-if-peval=0A+=20=20=20((case-lambda=20((a=20b)=200)=20((a)=201)=20= (()=202)))=0A+=20=20=20(const=202))=0A+=0A+=20=20;;=20first=0A+=20=20= (pass-if-peval=0A+=20=20=20((case-lambda=20((a)=200)=20(()=201)=20((a=20= b)=202))=201)=0A+=20=20=20(const=200))=0A+=0A+=20=20;;=20rest=20arg=0A+=20= =20(pass-if-peval=0A+=20=20=20((case-lambda=20(args=200)=20((a=20b)=201)=20= ((a)=202))=201=202)=0A+=20=20=20(const=200))=0A+=0A+=20=20;;=20req=20= before=20rest=20I=0A+=20=20(pass-if-peval=0A+=20=20=20((case-lambda=20= ((a=20b)=200)=20(args=201)=20((a)=201))=201=202)=0A+=20=20=20(const=20= 0))=0A+=0A+=20=20;;=20req=20before=20rest=20II=0A+=20=20(pass-if-peval=0A= +=20=20=20((case-lambda=20((a)=200)=20(args=201)=20((a=20b)=202))=201=20= 2)=0A+=20=20=20(const=201))=0A+=0A+=20=20;;=20optional=0A+=20=20= (pass-if-peval=0A+=20=20=20((case-lambda*=20((a=20#:optional=20x)=200)=20= (args=201)=20((a)=202))=201=202)=0A+=20=20=20(const=200))=0A+=0A+=20=20= ;;=20optional=20and=20rest,=20no=20match=20I=0A+=20=20(pass-if-peval=0A+=20= =20=20((case-lambda*=20((a=20#:optional=20x=20.=20rest)=200)=20(args=20= 1)=20((a)=202)))=0A+=20=20=20(const=201))=0A+=0A+=20=20;;=20optional=20= and=20rest,=20match=20I=0A+=20=20(pass-if-peval=0A+=20=20=20= ((case-lambda*=20(()=200)=20((a=20#:optional=20x=20.=20rest)=201)=20((a)=20= 2))=201)=0A+=20=20=20(const=201))=0A+=0A+=20=20;;=20optional=20and=20= rest,=20match=20II=0A+=20=20(pass-if-peval=0A+=20=20=20((case-lambda*=20= ((a=20#:optional=20x=20.=20rest)=200)=20(args=201)=20((a)=202))=201)=0A+=20= =20=20(const=200))=0A+=0A+=20=20;;=20optional=20and=20rest,=20match=20= III=0A+=20=20(pass-if-peval=0A+=20=20=20((case-lambda*=20((a=20= #:optional=20x=20.=20rest)=200)=20(args=201)=20((a)=202))=201=202)=0A+=20= =20=20(const=200))=0A+=0A+=20=20;;=20optional=20and=20rest,=20match=20IV=0A= +=20=20(pass-if-peval=0A+=20=20=20((case-lambda*=20((a=20#:optional=20x=20= .=20rest)=200)=20(args=201)=20((a)=202))=201=202=203)=0A+=20=20=20(const=20= 0))=0A+=0A+=20=20;;=20keyword=20cases=20survive=0A+=20=20(pass-if=20(=3D=20= 1=20((case-lambda*=20((a=20b)=200)=20((a=20#:key=20x)=201))=200=20#:x=20= 1)))=0A+=20=20(pass-if=20(=3D=200=20((case-lambda*=20((a=20b=20c)=200)=20= ((a=20#:key=20x)=201))=200=20#:x=201)))=0A+=20=20(pass-if=20(=3D=200=20= ((case-lambda*=20((a=20#:key=20x)=200)=20((a=20b)=200))=200=20#:x=201)))=0A= +=20=20(pass-if=20(=3D=201=20((case-lambda*=20((a=20#:key=20x)=200)=20= ((a=20b=20c)=201))=200=201=202))))=0A+=0A=20(with-test-prefix=20"eqv?"=0A= =20=20=20(pass-if-peval=20(eqv?=20x=20#f)=0A=20=20=20=20=20(primcall=20= eq?=20(toplevel=20x)=20(const=20#f)))=0A--=20=0A2.30.2=0A=0A= --Apple-Mail=_7C794E26-F35A-419F-96FB-E226E971EBDC--