| Index: src/preparser.h
|
| diff --git a/src/preparser.h b/src/preparser.h
|
| index f9a3fbea0bde935f3e50121eae7c935bcaa70fba..bdcc42ba16c87336dfc300b176d5ca2bd4ac0ed1 100644
|
| --- a/src/preparser.h
|
| +++ b/src/preparser.h
|
| @@ -64,7 +64,6 @@ class ParserBase : public Traits {
|
| typedef typename Traits::Type::Expression ExpressionT;
|
| typedef typename Traits::Type::Identifier IdentifierT;
|
| typedef typename Traits::Type::FunctionLiteral FunctionLiteralT;
|
| - typedef typename Traits::Type::ClassLiteral ClassLiteralT;
|
| typedef typename Traits::Type::Literal LiteralT;
|
| typedef typename Traits::Type::ObjectLiteralProperty ObjectLiteralPropertyT;
|
|
|
| @@ -502,10 +501,10 @@ class ParserBase : public Traits {
|
| bool* ok);
|
| ExpressionT ParseArrowFunctionLiteral(int start_pos, ExpressionT params_ast,
|
| bool* ok);
|
| - ClassLiteralT ParseClassLiteral(IdentifierT name,
|
| - Scanner::Location function_name_location,
|
| - bool name_is_strict_reserved, int pos,
|
| - bool* ok);
|
| + ExpressionT ParseClassLiteral(IdentifierT name,
|
| + Scanner::Location function_name_location,
|
| + bool name_is_strict_reserved, int pos,
|
| + bool* ok);
|
|
|
| // Checks if the expression is a valid reference expression (e.g., on the
|
| // left-hand side of assignments). Although ruled out by ECMA as early errors,
|
| @@ -1087,7 +1086,6 @@ class PreParserFactory {
|
| PreParserExpression extends,
|
| PreParserExpression constructor,
|
| PreParserExpressionList properties,
|
| - AstValueFactory* ast_value_factory,
|
| int position) {
|
| return PreParserExpression::Default();
|
| }
|
| @@ -1287,9 +1285,6 @@ class PreParserTraits {
|
| static PreParserExpression EmptyFunctionLiteral() {
|
| return PreParserExpression::Default();
|
| }
|
| - static PreParserExpression EmptyClassLiteral() {
|
| - return PreParserExpression::Default();
|
| - }
|
| static PreParserExpressionList NullExpressionList() {
|
| return PreParserExpressionList();
|
| }
|
| @@ -1318,6 +1313,15 @@ class PreParserTraits {
|
| return PreParserExpression::Super();
|
| }
|
|
|
| + static PreParserExpression ClassLiteral(PreParserIdentifier name,
|
| + PreParserExpression extends,
|
| + PreParserExpression constructor,
|
| + PreParserExpressionList properties,
|
| + int position,
|
| + PreParserFactory* factory) {
|
| + return PreParserExpression::Default();
|
| + }
|
| +
|
| static PreParserExpression ExpressionFromLiteral(
|
| Token::Value token, int pos, Scanner* scanner,
|
| PreParserFactory* factory) {
|
| @@ -2713,21 +2717,19 @@ typename ParserBase<Traits>::ExpressionT ParserBase<
|
|
|
|
|
| template <class Traits>
|
| -typename ParserBase<Traits>::ClassLiteralT
|
| -ParserBase<Traits>::ParseClassLiteral(IdentifierT name,
|
| - Scanner::Location class_name_location,
|
| - bool name_is_strict_reserved, int pos,
|
| - bool* ok) {
|
| +typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseClassLiteral(
|
| + IdentifierT name, Scanner::Location class_name_location,
|
| + bool name_is_strict_reserved, int pos, bool* ok) {
|
| // All parts of a ClassDeclaration or a ClassExpression are strict code.
|
| if (name_is_strict_reserved) {
|
| ReportMessageAt(class_name_location, "unexpected_strict_reserved");
|
| *ok = false;
|
| - return this->EmptyClassLiteral();
|
| + return this->EmptyExpression();
|
| }
|
| if (this->IsEvalOrArguments(name)) {
|
| ReportMessageAt(class_name_location, "strict_eval_arguments");
|
| *ok = false;
|
| - return this->EmptyClassLiteral();
|
| + return this->EmptyExpression();
|
| }
|
|
|
| // TODO(arv): Implement scopes and name binding in class body only.
|
| @@ -2742,8 +2744,7 @@ ParserBase<Traits>::ParseClassLiteral(IdentifierT name,
|
|
|
| ExpressionT extends = this->EmptyExpression();
|
| if (Check(Token::EXTENDS)) {
|
| - extends =
|
| - this->ParseLeftHandSideExpression(CHECK_OK_CUSTOM(EmptyClassLiteral));
|
| + extends = this->ParseLeftHandSideExpression(CHECK_OK);
|
| }
|
|
|
| ObjectLiteralChecker checker(this, STRICT);
|
| @@ -2751,15 +2752,15 @@ ParserBase<Traits>::ParseClassLiteral(IdentifierT name,
|
| this->NewPropertyList(4, zone_);
|
| FunctionLiteralT constructor = this->EmptyFunctionLiteral();
|
|
|
| - Expect(Token::LBRACE, CHECK_OK_CUSTOM(EmptyClassLiteral));
|
| + Expect(Token::LBRACE, CHECK_OK);
|
| while (peek() != Token::RBRACE) {
|
| if (Check(Token::SEMICOLON)) continue;
|
| if (fni_ != NULL) fni_->Enter();
|
|
|
| const bool in_class = true;
|
| const bool is_static = false;
|
| - ObjectLiteralPropertyT property = this->ParsePropertyDefinition(
|
| - &checker, in_class, is_static, CHECK_OK_CUSTOM(EmptyClassLiteral));
|
| + ObjectLiteralPropertyT property =
|
| + this->ParsePropertyDefinition(&checker, in_class, is_static, CHECK_OK);
|
|
|
| properties->Add(property, zone());
|
|
|
| @@ -2768,10 +2769,10 @@ ParserBase<Traits>::ParseClassLiteral(IdentifierT name,
|
| fni_->Leave();
|
| }
|
| }
|
| - Expect(Token::RBRACE, CHECK_OK_CUSTOM(EmptyClassLiteral));
|
| + Expect(Token::RBRACE, CHECK_OK);
|
|
|
| - return factory()->NewClassLiteral(name, extends, constructor, properties,
|
| - this->ast_value_factory(), pos);
|
| + return this->ClassLiteral(name, extends, constructor, properties, pos,
|
| + factory());
|
| }
|
|
|
|
|
|
|