[squeak-dev] Re: Serious bug in 3.10
ramon.leon at allresnet.com
Fri Aug 1 06:23:33 UTC 2008
> > And you'll see that likely, to:do: is being inlined by the
> compiler and
> > causing something funny like allowing you to increment the
> loops index var
> > causing it to skip a number each iteration.
> > Ramon Leon
> > http://onsmalltalk.com
> Yes but:
> block := [:f | Transcript cr; show: f].
> (1 to: 10) do: [:f | block value: f+1. block value: f].
> does not behave much better...
> the 10 loops are performed, but since the blocks share same
> temporary f, things
> are still a bit strange.
> You need to use different argument names, NewCompiler or
> Eliot's closures.
Oh I agree, I wasn't suggesting a solution, I know the scope of the args is
shared because of the lack of real closures. I was more inquiring why the
behavioral difference between (to:) do: and to:do: since the latter is
inlined but normally you'd expect them to be equivalent.
More information about the Squeak-dev