summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--script/parser/ast.lua4
-rw-r--r--script/parser/grammar.lua18
2 files changed, 14 insertions, 8 deletions
diff --git a/script/parser/ast.lua b/script/parser/ast.lua
index 2fdb99ef..9f5d853f 100644
--- a/script/parser/ast.lua
+++ b/script/parser/ast.lua
@@ -1197,7 +1197,7 @@ local Defs = {
return
end
if not name then
- return nil
+ return
end
name.type = 'label'
return name
@@ -1216,7 +1216,7 @@ local Defs = {
return
end
if not name then
- return nil
+ return
end
name.type = 'goto'
return name
diff --git a/script/parser/grammar.lua b/script/parser/grammar.lua
index ad107ef5..fb68d5b9 100644
--- a/script/parser/grammar.lua
+++ b/script/parser/grammar.lua
@@ -58,6 +58,12 @@ end
defs.None = function () end
defs.np = m.Cp() / function (n) return n+1 end
defs.NameBody = m.R('az', 'AZ', '__', '\x80\xff') * m.R('09', 'az', 'AZ', '__', '\x80\xff')^0
+defs.NoNil = function (o)
+ if o == nil then
+ return
+ end
+ return o
+end
m.setmaxstack(1000)
@@ -321,7 +327,7 @@ Single <- FreeName
Suffix <- SuffixWithoutCall
/ ({} PL SuffixCall DirtyPR {})
-> Call
-SuffixCall <- Sp ({} {| (COMMA / Exp)+ |} {})
+SuffixCall <- Sp ({} {| (COMMA / Exp->NoNil)+ |} {})
-> PackExpList
/ %nil
SuffixWithoutCall
@@ -359,7 +365,7 @@ TableField <- COMMA
/ SEMICOLON
/ NewIndex
/ NewField
- / Exp
+ / Exp->NoNil
Index <- BL DirtyExp DirtyBR
NewIndex <- Sp ({} Index NeedAssign DirtyExp {})
-> NewIndex
@@ -428,7 +434,7 @@ Break <- Sp ({} BREAK {})
Return <- Sp ({} RETURN ReturnExpList {})
-> Return
ReturnExpList
- <- Sp {| Exp (Sp ',' MaybeExp)* |}
+ <- Sp {| Exp->NoNil (Sp ',' MaybeExp)* |}
/ Sp {| !Exp !',' |}
/ ExpList
@@ -461,7 +467,7 @@ LoopBody <- FOR LoopArgs NeedDo
{} {| (!END Action)* |}
NeedEnd
LoopArgs <- MustName AssignOrEQ
- ({} {| (COMMA / !DO !END Exp)* |} {})
+ ({} {| (COMMA / !DO !END Exp->NoNil)* |} {})
-> PackLoopArgs
In <- InBody
@@ -469,9 +475,9 @@ In <- InBody
InBody <- FOR InNameList NeedIn InExpList NeedDo
{} {| (!END Action)* |}
NeedEnd
-InNameList <- ({} {| (COMMA / !IN !DO !END Name)* |} {})
+InNameList <- ({} {| (COMMA / !IN !DO !END Name->NoNil)* |} {})
-> PackInNameList
-InExpList <- ({} {| (COMMA / !DO !DO !END Exp)* |} {})
+InExpList <- ({} {| (COMMA / !DO !DO !END Exp->NoNil)* |} {})
-> PackInExpList
While <- WhileBody