lua-users home
lua-l archive

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




On 2018-01-28 02:48 PM, Paige DePol wrote:
Soni They/Them L. <fakedme@gmail.com> wrote:

On 2018-01-28 01:58 PM, Paige DePol wrote:
I suppose one fix to the issue would be to simply disallow fallthrough and
force a break for switch constructs that have non-constant case values.
Can you use goto across elseif yet?

if x then
   goto ::y::
elseif y then
   ::y::
end

If not, that could be an interesting syntax extension. Only across a single elseif tho.
No, and this would potentially be quite a bit harder to implement with Lua's
single pass compiler. I assume you mention this as a way of implementing a
fallthrough for non-constant case blocks.

However, in a switch/case with a mix of constant and non-constant case blocks
the constant ones would be checked first via lookup table, and if that failed
then the non-constant blocks would be checked via if/else, and if all blocks
failed the 'else' block would be executed.

Forbidding fallthrough in switch/case constructs with non-constant case blocks
would be the easiest implementation, simply because the bytecode could wind up
being out-of-order from how the source code was written and jumping into an
elseif/else block via goto is currently not supported.

However, the PC of each case or if block could be recorded at compile time
and direct OP_JMPs could be added to jump around to support fallthrough.
This would effectively give the ability to "goto" into an else block, albeit
only when compiling switch/case blocks and not via a 'goto' statement.

~Paige



But what if a non-constant case comes first, and the constant case has the same value? Shouldn't the non-constant case run, rather than the constant case? I think it should.

--
Disclaimer: these emails may be made public at any given time, with or without reason. If you don't agree with this, DO NOT REPLY.