|
Excerpt from the Lua grammar:
block : {stat} [retstat] ; stat : break | ... ; retstat : return [explist] [';'] ;"return" is the only "retstat" and thus the only statement that is syntactically only allowed at the end of the block:
(function() return; a = 1 end)()Is rejected by all Lua versions with the syntax error
'end' expected near ...Why is this not extended to "break", which is a normal statement and thus allowed to precede arbitrary other statements?
Currently, Lua 5.2 to Lua 5.4 happily allow abominations such as
while true do break break break end while true do break a = 1 endand just execute them as expected; Lua 5.1 & LuaJIT however used to throw the syntax error
'end' expected near ...Is this change in behavior an oversight (regression?) or an intentional change (assuming the latter since the grammar indicates it)? Why should "break" statements be allowed before the end of a block?