From: Stefan Monnier <monnier@IRO.UMontreal.CA>
To: Tino Calancha <tino.calancha@gmail.com>
Cc: 29866@debbugs.gnu.org
Subject: bug#29866: 27.0.50; cl-loop: Calculate the array length just once
Date: Wed, 27 Dec 2017 15:54:56 -0500 [thread overview]
Message-ID: <jwvwp17evv9.fsf-monnier+emacsbugs@gnu.org> (raw)
In-Reply-To: <87wp18179m.fsf@gmail.com> (Tino Calancha's message of "Thu, 28 Dec 2017 01:10:29 +0900")
> X-Debbugs-CC: monnier@iro.umontreal.ca
Thanks.
> It looks sensible to calculate the array length just once,
> instead of recalculate it on each iteration:
I tend to agree, but I don't know very much about the intended semantics
of Common Lisp's `loop` macro, nor about cl-loop's implementation (tho
I admit I did mess with it without being really sure what I was doing).
Stefan
> --8<-----------------------------cut here---------------start------------->8---
> commit 1175db5cf09eb39e7e70703f38578d31b0dd9398
> Author: Tino Calancha <tino.calancha@gmail.com>
> Date: Thu Dec 28 00:56:32 2017 +0900
>
> cl-loop: Calculate the array length just once
>
> * lisp/emacs-lisp/cl-macs.el (cl--parse-loop-clause):
> Dont calculate the array length on each iteration (Bug#29866).
>
> diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
> index f5311041cc..f671aea399 100644
> --- a/lisp/emacs-lisp/cl-macs.el
> +++ b/lisp/emacs-lisp/cl-macs.el
> @@ -1317,11 +1317,13 @@ cl--parse-loop-clause
>
> ((memq word '(across across-ref))
> (let ((temp-vec (make-symbol "--cl-vec--"))
> + (temp-len (make-symbol "--cl-len--"))
> (temp-idx (make-symbol "--cl-idx--")))
> (push (list temp-vec (pop cl--loop-args)) loop-for-bindings)
> + (push (list temp-len `(length ,temp-vec)) loop-for-bindings)
> (push (list temp-idx -1) loop-for-bindings)
> (push `(< (setq ,temp-idx (1+ ,temp-idx))
> - (length ,temp-vec))
> + ,temp-len)
> cl--loop-body)
> (if (eq word 'across-ref)
> (push (list var `(aref ,temp-vec ,temp-idx))
>
> --8<-----------------------------cut here---------------end--------------->8---
>
>
> In GNU Emacs 27.0.50 (build 32, x86_64-pc-linux-gnu, GTK+ Version 3.22.11)
> of 2017-12-28 built on calancha-pc
> Repository revision: da94ea92bc3ba6c236b394c00e6bbb725131a149
> Windowing system distributor 'The X.Org Foundation', version 11.0.11902000
> System Description: Debian GNU/Linux 9.3 (stretch)
next prev parent reply other threads:[~2017-12-27 20:54 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-27 16:10 bug#29866: 27.0.50; cl-loop: Calculate the array length just once Tino Calancha
2017-12-27 20:13 ` Tino Calancha
2017-12-27 20:20 ` Lars Ingebrigtsen
2017-12-27 20:54 ` Stefan Monnier [this message]
2017-12-27 21:36 ` Tino Calancha
2017-12-28 1:27 ` Drew Adams
2017-12-28 1:49 ` Noam Postavsky
2017-12-28 1:52 ` Drew Adams
2017-12-28 2:39 ` Stefan Monnier
2017-12-28 17:21 ` Tino Calancha
2018-01-07 15:39 ` Tino Calancha
2020-05-06 2:21 ` Noam Postavsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jwvwp17evv9.fsf-monnier+emacsbugs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=29866@debbugs.gnu.org \
--cc=tino.calancha@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).