* Re: [Emacs-diffs] trunk r117982: * ses.el (ses-calculate-cell): bind row and col dynamically to
@ 2014-10-03 9:00 Vincent Belaïche
2014-10-03 12:17 ` Stefan Monnier
0 siblings, 1 reply; 3+ messages in thread
From: Vincent Belaïche @ 2014-10-03 9:00 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Vincent Belaïche, emacs-devel
Stefan Monnier a écrit :
>> + (cl-progv '(row col maxrow maxcol) (list ,row (+ ,c ,mincol) ,maxrow ,maxcol)
>> + ,@body)))))))
>
> Why use cl-progv here? It's *much* less efficient than a plain `let'.
>
Well, I can revert to let if you want, but I thought --- mistakenly? ---
that a 'let' combined with the lexical binding cookie would make a
lexical binding to what is in the body of let, and that there may be
some functions (e.g. ses-export-tab) using these row col maxrow and
maxcol without explicit argument passing. These function would then get
incorrect nil values from the defvar's.
Please let me know if the correct way forward would be to have a let
*AND* functions using explicit argument passing to get row, col, maxrow,
maxcol etc... Then I can do the changes accordingly.
Vincent.
>> + (setq newval (cl-progv '(row col)
>> + (list row col)
>
> Same here.
>
>
> Stefan
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Emacs-diffs] trunk r117982: * ses.el (ses-calculate-cell): bind row and col dynamically to
2014-10-03 9:00 [Emacs-diffs] trunk r117982: * ses.el (ses-calculate-cell): bind row and col dynamically to Vincent Belaïche
@ 2014-10-03 12:17 ` Stefan Monnier
0 siblings, 0 replies; 3+ messages in thread
From: Stefan Monnier @ 2014-10-03 12:17 UTC (permalink / raw)
To: Vincent Belaïche; +Cc: emacs-devel
>> Why use cl-progv here? It's *much* less efficient than a plain `let'.
> Well, I can revert to let if you want, but I thought --- mistakenly? ---
> that a 'let' combined with the lexical binding cookie would make a
> lexical binding to what is in the body of let, and that there may be
> some functions (e.g. ses-export-tab) using these row col maxrow and
> maxcol without explicit argument passing.
The normal way to get a dynamically-scoped let-binding is to do:
(defvar ses-foo)
...
(defun ses-bar (..)
..
(let ((ses-foo toto))
...))
> These function would then get incorrect nil values from the defvar's.
The defvar does not give any value to the variable. It only declares it
as dynamically scoped.
> Please let me know if the correct way forward would be to have a let
> *AND* functions using explicit argument passing to get row, col, maxrow,
> maxcol etc... Then I can do the changes accordingly.
Thanks. But I already changed the code in a way that makes
row/col/maxrow/maxcol statically scoped anyway.
Stefan
^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <E1XYsSM-0001rK-MF@vcs.savannah.gnu.org>]
end of thread, other threads:[~2014-10-03 12:17 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-03 9:00 [Emacs-diffs] trunk r117982: * ses.el (ses-calculate-cell): bind row and col dynamically to Vincent Belaïche
2014-10-03 12:17 ` Stefan Monnier
[not found] <E1XYsSM-0001rK-MF@vcs.savannah.gnu.org>
2014-09-30 16:00 ` Stefan Monnier
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).