From a5b0adea005a9804c5da138813dc16f35f83978e Mon Sep 17 00:00:00 2001 From: Steven Hartland Date: Mon, 28 Nov 2022 11:25:15 +0000 Subject: [PATCH] Allow semicolon in nested do-while statements. (#463) In nested do-while statements, a semicolon after the inner `while` threw a parsing error. This change checks for the optional semicolon. Co-authored-by: Brian Graham --- parser/parser_test.go | 2 ++ parser/statement.go | 3 +++ 2 files changed, 5 insertions(+) diff --git a/parser/parser_test.go b/parser/parser_test.go index 4471b2c..94132a7 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -617,6 +617,8 @@ func TestParser(t *testing.T) { } while (0) `, nil) + test(`do do; while(0); while(0);`, nil) + test(` (function(){ try { diff --git a/parser/statement.go b/parser/statement.go index d4f7224..12d2716 100644 --- a/parser/statement.go +++ b/parser/statement.go @@ -694,6 +694,9 @@ func (self *_parser) parseDoWhileStatement() ast.Statement { node.Test = self.parseExpression() self.expect(token.RIGHT_PARENTHESIS) + self.implicitSemicolon = true + self.optionalSemicolon() + if self.mode&StoreComments != 0 { self.comments.CommentMap.AddComments(node, comments, ast.LEADING) self.comments.CommentMap.AddComments(node, doComments, ast.DO)