issue #98 fix parsing of consecutive labels

pull/168/head
Dibyendu Majumdar 5 years ago
parent e0b4d65402
commit 2912415983

@ -52,3 +52,76 @@ function()
end
end
function()
return
function(
a --local symbol ?
,
b --local symbol ?
,
c --local symbol ?
,
d --local symbol ?
,
e --local symbol ?
)
if
--[binary expr start]
--[primary start]
a --local symbol ?
--[primary end]
==
--[primary start]
b --local symbol ?
--[primary end]
--[binary expr end]
then
goto l1
elseif
--[binary expr start]
--[primary start]
a --local symbol ?
--[primary end]
==
--[primary start]
c --local symbol ?
--[primary end]
--[binary expr end]
then
goto l2
elseif
--[binary expr start]
--[primary start]
a --local symbol ?
--[primary end]
==
--[primary start]
d --local symbol ?
--[primary end]
--[binary expr end]
then
goto l2
else
if
--[binary expr start]
--[primary start]
a --local symbol ?
--[primary end]
==
--[primary start]
e --local symbol ?
--[primary end]
--[binary expr end]
then
goto l3
else
goto l3
end
end
::l1::
::l2::
::l3::
::l4::
end
end

@ -19,13 +19,25 @@ local str =
return y, z
end
]]
--local y, z = x()
--print(y()())
--print(z()())
--ravi.dumplua(x)
local x, msg = ast.parse(str)
if not x then print(msg) end
print(x:tostring())
--print(x)
str =
[[return function (a, b, c, d, e)
if a == b then goto l1
elseif a == c then goto l2
elseif a == d then goto l2
else if a == e then goto l3
else goto l3
end
end
::l1:: ::l2:: ::l3:: ::l4::
end
]]
x, msg = ast.parse(str)
if not x then print(msg) end
print(x:tostring())

@ -1260,7 +1260,7 @@ static struct ast_node *parse_goto_statment(struct parser_state *parser) {
/* skip no-op statements */
static void skip_noop_statements(struct parser_state *parser) {
LexState *ls = parser->ls;
while (ls->t.token == ';' || ls->t.token == TK_DBCOLON)
while (ls->t.token == ';') // || ls->t.token == TK_DBCOLON)
parse_statement(parser);
}

Loading…
Cancel
Save