lua-users home
lua-l archive

Re: Feature request: enhanced break

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Mon, Nov 24, 2014 at 2:26 AM, Dirk Laurie <dirk.laurie@gmail.com> wrote:
> 2014年11月24日 8:54 GMT+02:00 Oliver Kroth <oliver.kroth@nec-i.de>:
>
>> how do you want to pick up the value break provided?
>
> That would be hard if an expression is allowed, which is why I am
> asking for a numeric constant. At present, the compiler generates
> an invisible label "break" and actually does `goto break`. For the
> extension, it would generate an invisible label that cannot be a
> Name, e.g. `break.2`.
This got me thinking about what if the compiler made implicit labels,
e.g. "__break2". I've created an example below with them explicitly
marked:
do
 -- loop 1
 for ... do
 if ... then
 do
 -- loop 2
 for ... do
 if ... then
 goto __break2
 end
 do
 -- loop 3
 for ... do
 ::__continue1:: -- loop 3 continues loop 3
 end
 ::__break1:: -- loop 3 breaks out of loop 3
 end
 end
 if ... then
 goto __break2 -- **** Doesn't work! ****
 end
 ::__break1:: -- loop 2 breaks out of loop 2
 ::__break2:: -- loop 3 breaks out of loop 2 and 3
 end
 end
 ::__continue1:: -- loop 1 continues loop 1
 ::__continue2:: -- loop 2 continues loop 1
 ::__continue3:: -- loop 3 continues loop 1
 end
 ::__break1:: -- loop 1 breaks out of loop 1
 ::__break2:: -- loop 2 breaks out of loop 1 and 2
 ::__break3:: -- loop 3 breaks out of loop 1, 2, and 3
end
Alas, this does not work (at least, not without extra effort on the
compiler). I've marked above where it fails.
-- 
Patrick Donnelly

AltStyle によって変換されたページ (->オリジナル) /