What would Squeak be like without non-local returns
Andreas Raab
andreas.raab at gmx.de
Wed Nov 7 05:38:17 UTC 2007
Rob Withers wrote:
> Well, now I can't find that statement, but I was sure I had read it on
> erights or Mark's thesis. I searched and found nothing. It may have
> been a statement regarding eventual-sending specifically with non-local
> return. It IS strange thinking about the correct behavior of an
> expression:
>
> object eventual ifTrue: [^3].
> ^4
>
> What should be the result?
Without any question, 4. Since ifTrue:[] is sent eventual it will return
immediately (answering a promise), and the method will continue and
return 4. There is absolutely no question about it.
When the eventual ifTrue: is executed it will barf because it will try
to return from a method with no home but that's the way out-of-scope
blocks go. It's just as well-defined as a non-local return from an
out-of-scope block today, e.g.,
Foo>>createBlock
^[^self]
Foo>>callBlock
self createBlock value.
This will simply signal BlockCannotReturn and the eventual ifTrue:[]
will - and should - do the same.
Cheers,
- Andreas
More information about the Squeak-dev
mailing list
|