ソースを参照

Support chained template literals. See #334

Dmitry Panov 4 年 前
コミット
bb5631bb91
1 ファイル変更17 行追加13 行削除
  1. 17 13
      parser/expression.go

+ 17 - 13
parser/expression.go

@@ -613,14 +613,17 @@ func (self *_parser) parseLeftHandSideExpression() ast.Expression {
 	} else {
 		left = self.parsePrimaryExpression()
 	}
-
+L:
 	for {
-		if self.token == token.PERIOD {
+		switch self.token {
+		case token.PERIOD:
 			left = self.parseDotMember(left)
-		} else if self.token == token.LEFT_BRACKET {
+		case token.LEFT_BRACKET:
 			left = self.parseBracketMember(left)
-		} else {
-			break
+		case token.BACKTICK:
+			left = self.parseTaggedTemplateLiteral(left)
+		default:
+			break L
 		}
 	}
 
@@ -641,16 +644,19 @@ func (self *_parser) parseLeftHandSideExpressionAllowCall() ast.Expression {
 	} else {
 		left = self.parsePrimaryExpression()
 	}
-
+L:
 	for {
-		if self.token == token.PERIOD {
+		switch self.token {
+		case token.PERIOD:
 			left = self.parseDotMember(left)
-		} else if self.token == token.LEFT_BRACKET {
+		case token.LEFT_BRACKET:
 			left = self.parseBracketMember(left)
-		} else if self.token == token.LEFT_PARENTHESIS {
+		case token.LEFT_PARENTHESIS:
 			left = self.parseCallExpression(left)
-		} else {
-			break
+		case token.BACKTICK:
+			left = self.parseTaggedTemplateLiteral(left)
+		default:
+			break L
 		}
 	}
 
@@ -682,8 +688,6 @@ func (self *_parser) parsePostfixExpression() ast.Expression {
 			Operand:  operand,
 			Postfix:  true,
 		}
-	case token.BACKTICK:
-		return self.parseTaggedTemplateLiteral(operand)
 	}
 
 	return operand