Răsfoiți Sursa

Merge remote-tracking branch 'keysolutions/devel'

Dmitry Panov 7 ani în urmă
părinte
comite
c7a914b982
3 a modificat fișierele cu 8 adăugiri și 2 ștergeri
  1. 1 2
      parser/expression.go
  2. 4 0
      parser/parser_test.go
  3. 3 0
      parser/statement.go

+ 1 - 2
parser/expression.go

@@ -1,7 +1,6 @@
 package parser
 
 import (
-
 	"github.com/dop251/goja/ast"
 	"github.com/dop251/goja/file"
 	"github.com/dop251/goja/token"
@@ -399,7 +398,7 @@ func (self *_parser) parseLeftHandSideExpression() ast.Expression {
 	for {
 		if self.token == token.PERIOD {
 			left = self.parseDotMember(left)
-		} else if self.token == token.LEFT_BRACE {
+		} else if self.token == token.LEFT_BRACKET {
 			left = self.parseBracketMember(left)
 		} else {
 			break

+ 4 - 0
parser/parser_test.go

@@ -356,6 +356,10 @@ func TestParserErr(t *testing.T) {
 
 		test("abc: while (true) { abc: while (true) {} }", "(anonymous): Line 1:21 Label 'abc' already exists")
 
+		test(`if(0) { do { } while(0) } else { do { } while(0) }`, nil)
+
+		test(`if(0) do { } while(0); else do { } while(0)`, nil)
+
 		if false {
 			// TODO When strict mode is implemented
 			test("(function () { 'use strict'; delete abc; }())", "")

+ 3 - 0
parser/statement.go

@@ -483,6 +483,9 @@ func (self *_parser) parseDoWhileStatement() ast.Statement {
 	self.expect(token.LEFT_PARENTHESIS)
 	node.Test = self.parseExpression()
 	self.expect(token.RIGHT_PARENTHESIS)
+	if self.token == token.SEMICOLON {
+		self.next()
+	}
 
 	return node
 }