mirror of
https://github.com/Reuh/candran.git
synced 2025-10-27 17:59:30 +00:00
Implicit returns
This commit is contained in:
parent
025a55f708
commit
1d5390d0a7
2 changed files with 9 additions and 8 deletions
File diff suppressed because one or more lines are too long
|
|
@ -273,11 +273,11 @@ local G = { V"Lua",
|
||||||
Lua = V"Shebang"^-1 * V"Skip" * V"Block" * expect(P(-1), "Extra");
|
Lua = V"Shebang"^-1 * V"Skip" * V"Block" * expect(P(-1), "Extra");
|
||||||
Shebang = P"#!" * (P(1) - P"\n")^0;
|
Shebang = P"#!" * (P(1) - P"\n")^0;
|
||||||
|
|
||||||
Block = tagC("Block", V"Stat"^0 * V"RetStat"^-1);
|
Block = tagC("Block", V"Stat"^0 * (V"RetStat" + V"ImplicitRetStat")^-1);
|
||||||
Stat = V"IfStat" + V"DoStat" + V"WhileStat" + V"RepeatStat" + V"ForStat"
|
Stat = V"IfStat" + V"DoStat" + V"WhileStat" + V"RepeatStat" + V"ForStat"
|
||||||
+ V"LocalStat" + V"LetStat" + V"FuncStat" + V"BreakStat" + V"ContinueStat" + V"LabelStat" + V"GoToStat"
|
+ V"LocalStat" + V"LetStat" + V"FuncStat" + V"BreakStat" + V"ContinueStat" + V"LabelStat" + V"GoToStat"
|
||||||
+ V"FuncCall" + V"Assignment" + sym(";") + -V"BlockEnd" * throw("InvalidStat");
|
+ V"FuncCall" + V"Assignment" + sym(";") + -V"BlockEnd" * throw("InvalidStat");
|
||||||
BlockEnd = P"return" + "end" + "elseif" + "else" + "until" + -1;
|
BlockEnd = P"return" + "end" + "elseif" + "else" + "until" + -1 + V"ImplicitRetStat";
|
||||||
|
|
||||||
IfStat = tagC("If", V"IfPart" * V"ElseIfPart"^0 * V"ElsePart"^-1 * expect(kw("end"), "EndIf"));
|
IfStat = tagC("If", V"IfPart" * V"ElseIfPart"^0 * V"ElsePart"^-1 * expect(kw("end"), "EndIf"));
|
||||||
IfPart = kw("if") * expect(V"Expr", "ExprIf") * expect(kw("then"), "ThenIf") * V"Block";
|
IfPart = kw("if") * expect(V"Expr", "ExprIf") * expect(kw("then"), "ThenIf") * V"Block";
|
||||||
|
|
@ -319,11 +319,12 @@ local G = { V"Lua",
|
||||||
+ V"Id";
|
+ V"Id";
|
||||||
ParKey = V"Id" * #("=" * -P"=");
|
ParKey = V"Id" * #("=" * -P"=");
|
||||||
|
|
||||||
LabelStat = tagC("Label", sym("::") * expect(V"Name", "Label") * expect(sym("::"), "CloseLabel"));
|
LabelStat = tagC("Label", sym("::") * expect(V"Name", "Label") * expect(sym("::"), "CloseLabel"));
|
||||||
GoToStat = tagC("Goto", kw("goto") * expect(V"Name", "Goto"));
|
GoToStat = tagC("Goto", kw("goto") * expect(V"Name", "Goto"));
|
||||||
BreakStat = tagC("Break", kw("break"));
|
BreakStat = tagC("Break", kw("break"));
|
||||||
ContinueStat = tagC("Continue", kw("continue"));
|
ContinueStat = tagC("Continue", kw("continue"));
|
||||||
RetStat = tagC("Return", kw("return") * commaSep(V"Expr", "RetList")^-1 * sym(";")^-1);
|
RetStat = tagC("Return", kw("return") * commaSep(V"Expr", "RetList")^-1 * sym(";")^-1);
|
||||||
|
ImplicitRetStat = tagC("Return", commaSep(V"Expr", "RetList") * sym(";")^-1);
|
||||||
|
|
||||||
NameList = tagC("NameList", commaSep(V"Id"));
|
NameList = tagC("NameList", commaSep(V"Id"));
|
||||||
VarList = tagC("VarList", commaSep(V"VarExpr", "VarList"));
|
VarList = tagC("VarList", commaSep(V"VarExpr", "VarList"));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue