Chromium Code Reviews| Index: src/preparser.h |
| diff --git a/src/preparser.h b/src/preparser.h |
| index 562d20979dd53b7831412240cb8c16c8fca545e9..4109b7446b23ef6d2e8420b8ad963085799653bf 100644 |
| --- a/src/preparser.h |
| +++ b/src/preparser.h |
| @@ -81,6 +81,10 @@ namespace internal { |
| template <typename Traits> |
| class ParserBase : public Traits { |
| public: |
| + // Shorten type names defined by Traits. |
| + typedef typename Traits::Type::Expression ExpressionT; |
|
marja
2014/03/18 16:01:06
Had to use ExpressionT. If this is Expression ever
|
| + typedef typename Traits::Type::Identifier IdentifierT; |
| + |
| ParserBase(Scanner* scanner, uintptr_t stack_limit, |
| v8::Extension* extension, |
| typename Traits::Type::Zone* zone, |
| @@ -363,36 +367,36 @@ class ParserBase : public Traits { |
| // allow_eval_or_arguments is kAllowEvalOrArguments, we allow "eval" or |
| // "arguments" as identifier even in strict mode (this is needed in cases like |
| // "var foo = eval;"). |
| - typename Traits::Type::Identifier ParseIdentifier( |
| + IdentifierT ParseIdentifier( |
| AllowEvalOrArgumentsAsIdentifier, |
| bool* ok); |
| // Parses an identifier or a strict mode future reserved word, and indicate |
| // whether it is strict mode future reserved. |
| - typename Traits::Type::Identifier ParseIdentifierOrStrictReservedWord( |
| + IdentifierT ParseIdentifierOrStrictReservedWord( |
| bool* is_strict_reserved, |
| bool* ok); |
| - typename Traits::Type::Identifier ParseIdentifierName(bool* ok); |
| + IdentifierT ParseIdentifierName(bool* ok); |
| // Parses an identifier and determines whether or not it is 'get' or 'set'. |
| - typename Traits::Type::Identifier ParseIdentifierNameOrGetOrSet(bool* is_get, |
| - bool* is_set, |
| - bool* ok); |
| + IdentifierT ParseIdentifierNameOrGetOrSet(bool* is_get, |
| + bool* is_set, |
| + bool* ok); |
| - typename Traits::Type::Expression ParseRegExpLiteral(bool seen_equal, |
| - bool* ok); |
| + ExpressionT ParseRegExpLiteral(bool seen_equal, |
|
Michael Starzinger
2014/03/18 16:12:48
nit: Several occurrences here (above and below) sh
marja
2014/03/18 16:17:39
Done.
|
| + bool* ok); |
| - typename Traits::Type::Expression ParsePrimaryExpression(bool* ok); |
| - typename Traits::Type::Expression ParseExpression(bool accept_IN, bool* ok); |
| - typename Traits::Type::Expression ParseArrayLiteral(bool* ok); |
| - typename Traits::Type::Expression ParseObjectLiteral(bool* ok); |
| + ExpressionT ParsePrimaryExpression(bool* ok); |
| + ExpressionT ParseExpression(bool accept_IN, bool* ok); |
| + ExpressionT ParseArrayLiteral(bool* ok); |
| + ExpressionT ParseObjectLiteral(bool* ok); |
| typename Traits::Type::ExpressionList ParseArguments(bool* ok); |
| - typename Traits::Type::Expression ParseAssignmentExpression(bool accept_IN, |
| - bool* ok); |
| - typename Traits::Type::Expression ParseYieldExpression(bool* ok); |
| - typename Traits::Type::Expression ParseConditionalExpression(bool accept_IN, |
| - bool* ok); |
| - typename Traits::Type::Expression ParseBinaryExpression(int prec, |
| - bool accept_IN, |
| - bool* ok); |
| + ExpressionT ParseAssignmentExpression(bool accept_IN, |
| + bool* ok); |
| + ExpressionT ParseYieldExpression(bool* ok); |
| + ExpressionT ParseConditionalExpression(bool accept_IN, |
| + bool* ok); |
| + ExpressionT ParseBinaryExpression(int prec, |
| + bool accept_IN, |
| + bool* ok); |
| // Used to detect duplicates in object literals. Each of the values |
| // kGetterProperty, kSetterProperty and kValueProperty represents |
| @@ -1179,12 +1183,12 @@ void ParserBase<Traits>::ReportUnexpectedToken(Token::Value token) { |
| template<class Traits> |
| -typename Traits::Type::Identifier ParserBase<Traits>::ParseIdentifier( |
| +typename ParserBase<Traits>::IdentifierT ParserBase<Traits>::ParseIdentifier( |
| AllowEvalOrArgumentsAsIdentifier allow_eval_or_arguments, |
| bool* ok) { |
| Token::Value next = Next(); |
| if (next == Token::IDENTIFIER) { |
| - typename Traits::Type::Identifier name = this->GetSymbol(scanner()); |
| + IdentifierT name = this->GetSymbol(scanner()); |
| if (allow_eval_or_arguments == kDontAllowEvalOrArguments && |
| strict_mode() == STRICT && this->IsEvalOrArguments(name)) { |
| ReportMessageAt(scanner()->location(), "strict_eval_arguments"); |
| @@ -1204,7 +1208,7 @@ typename Traits::Type::Identifier ParserBase<Traits>::ParseIdentifier( |
| template <class Traits> |
| -typename Traits::Type::Identifier ParserBase< |
| +typename ParserBase<Traits>::IdentifierT ParserBase< |
| Traits>::ParseIdentifierOrStrictReservedWord(bool* is_strict_reserved, |
| bool* ok) { |
| Token::Value next = Next(); |
| @@ -1223,8 +1227,8 @@ typename Traits::Type::Identifier ParserBase< |
| template <class Traits> |
| -typename Traits::Type::Identifier ParserBase<Traits>::ParseIdentifierName( |
| - bool* ok) { |
| +typename ParserBase<Traits>::IdentifierT |
| +ParserBase<Traits>::ParseIdentifierName(bool* ok) { |
| Token::Value next = Next(); |
| if (next != Token::IDENTIFIER && next != Token::FUTURE_RESERVED_WORD && |
| next != Token::FUTURE_STRICT_RESERVED_WORD && !Token::IsKeyword(next)) { |
| @@ -1237,11 +1241,11 @@ typename Traits::Type::Identifier ParserBase<Traits>::ParseIdentifierName( |
| template <class Traits> |
| -typename Traits::Type::Identifier |
| +typename ParserBase<Traits>::IdentifierT |
| ParserBase<Traits>::ParseIdentifierNameOrGetOrSet(bool* is_get, |
| bool* is_set, |
| bool* ok) { |
| - typename Traits::Type::Identifier result = ParseIdentifierName(ok); |
| + IdentifierT result = ParseIdentifierName(ok); |
| if (!*ok) return Traits::EmptyIdentifier(); |
| scanner()->IsGetOrSet(is_get, is_set); |
| return result; |
| @@ -1249,8 +1253,8 @@ ParserBase<Traits>::ParseIdentifierNameOrGetOrSet(bool* is_get, |
| template <class Traits> |
| -typename Traits::Type::Expression |
| -ParserBase<Traits>::ParseRegExpLiteral(bool seen_equal, bool* ok) { |
| +typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseRegExpLiteral( |
| + bool seen_equal, bool* ok) { |
| int pos = peek_position(); |
| if (!scanner()->ScanRegExpPattern(seen_equal)) { |
| Next(); |
| @@ -1261,16 +1265,14 @@ ParserBase<Traits>::ParseRegExpLiteral(bool seen_equal, bool* ok) { |
| int literal_index = function_state_->NextMaterializedLiteralIndex(); |
| - typename Traits::Type::Identifier js_pattern = |
| - this->NextLiteralString(scanner(), TENURED); |
| + IdentifierT js_pattern = this->NextLiteralString(scanner(), TENURED); |
| if (!scanner()->ScanRegExpFlags()) { |
| Next(); |
| ReportMessageAt(scanner()->location(), "invalid_regexp_flags"); |
| *ok = false; |
| return Traits::EmptyExpression(); |
| } |
| - typename Traits::Type::Identifier js_flags = |
| - this->NextLiteralString(scanner(), TENURED); |
| + IdentifierT js_flags = this->NextLiteralString(scanner(), TENURED); |
| Next(); |
| return factory()->NewRegExpLiteral(js_pattern, js_flags, literal_index, pos); |
| } |
| @@ -1282,7 +1284,7 @@ ParserBase<Traits>::ParseRegExpLiteral(bool seen_equal, bool* ok) { |
| #define DUMMY ) // to make indentation work |
| #undef DUMMY |
| -// Used in functions where the return type is not Traits::Type::Expression. |
| +// Used in functions where the return type is not ExpressionT. |
| #define CHECK_OK_CUSTOM(x) ok); \ |
| if (!*ok) return this->x(); \ |
| ((void)0 |
| @@ -1290,8 +1292,8 @@ ParserBase<Traits>::ParseRegExpLiteral(bool seen_equal, bool* ok) { |
| #undef DUMMY |
| template <class Traits> |
| -typename Traits::Type::Expression ParserBase<Traits>::ParsePrimaryExpression( |
| - bool* ok) { |
| +typename ParserBase<Traits>::ExpressionT |
| +ParserBase<Traits>::ParsePrimaryExpression(bool* ok) { |
| // PrimaryExpression :: |
| // 'this' |
| // 'null' |
| @@ -1306,7 +1308,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParsePrimaryExpression( |
| // '(' Expression ')' |
| int pos = peek_position(); |
| - typename Traits::Type::Expression result = this->EmptyExpression(); |
| + ExpressionT result = this->EmptyExpression(); |
| Token::Value token = peek(); |
| switch (token) { |
| case Token::THIS: { |
| @@ -1327,10 +1329,8 @@ typename Traits::Type::Expression ParserBase<Traits>::ParsePrimaryExpression( |
| case Token::YIELD: |
| case Token::FUTURE_STRICT_RESERVED_WORD: { |
| // Using eval or arguments in this context is OK even in strict mode. |
| - typename Traits::Type::Identifier name = |
| - ParseIdentifier(kAllowEvalOrArguments, CHECK_OK); |
| - result = |
| - this->ExpressionFromIdentifier(name, pos, scope_, factory()); |
| + IdentifierT name = ParseIdentifier(kAllowEvalOrArguments, CHECK_OK); |
| + result = this->ExpressionFromIdentifier(name, pos, scope_, factory()); |
| break; |
| } |
| @@ -1385,19 +1385,17 @@ typename Traits::Type::Expression ParserBase<Traits>::ParsePrimaryExpression( |
| // Precedence = 1 |
| template <class Traits> |
| -typename Traits::Type::Expression ParserBase<Traits>::ParseExpression( |
| +typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseExpression( |
| bool accept_IN, bool* ok) { |
| // Expression :: |
| // AssignmentExpression |
| // Expression ',' AssignmentExpression |
| - typename Traits::Type::Expression result = |
| - this->ParseAssignmentExpression(accept_IN, CHECK_OK); |
| + ExpressionT result = this->ParseAssignmentExpression(accept_IN, CHECK_OK); |
| while (peek() == Token::COMMA) { |
| Expect(Token::COMMA, CHECK_OK); |
| int pos = position(); |
| - typename Traits::Type::Expression right = |
| - this->ParseAssignmentExpression(accept_IN, CHECK_OK); |
| + ExpressionT right = this->ParseAssignmentExpression(accept_IN, CHECK_OK); |
| result = factory()->NewBinaryOperation(Token::COMMA, result, right, pos); |
| } |
| return result; |
| @@ -1405,7 +1403,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseExpression( |
| template <class Traits> |
| -typename Traits::Type::Expression ParserBase<Traits>::ParseArrayLiteral( |
| +typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseArrayLiteral( |
| bool* ok) { |
| // ArrayLiteral :: |
| // '[' Expression? (',' Expression?)* ']' |
| @@ -1415,7 +1413,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseArrayLiteral( |
| this->NewExpressionList(4, zone_); |
| Expect(Token::LBRACK, CHECK_OK); |
| while (peek() != Token::RBRACK) { |
| - typename Traits::Type::Expression elem = this->EmptyExpression(); |
| + ExpressionT elem = this->EmptyExpression(); |
| if (peek() == Token::COMMA) { |
| elem = this->GetLiteralTheHole(peek_position(), factory()); |
| } else { |
| @@ -1436,7 +1434,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseArrayLiteral( |
| template <class Traits> |
| -typename Traits::Type::Expression ParserBase<Traits>::ParseObjectLiteral( |
| +typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseObjectLiteral( |
| bool* ok) { |
| // ObjectLiteral :: |
| // '{' (( |
| @@ -1468,7 +1466,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseObjectLiteral( |
| case Token::IDENTIFIER: { |
| bool is_getter = false; |
| bool is_setter = false; |
| - typename Traits::Type::Identifier id = |
| + IdentifierT id = |
| ParseIdentifierNameOrGetOrSet(&is_getter, &is_setter, CHECK_OK); |
| if (fni_ != NULL) this->PushLiteralName(fni_, id); |
| @@ -1490,7 +1488,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseObjectLiteral( |
| // Validate the property. |
| PropertyKind type = is_getter ? kGetterProperty : kSetterProperty; |
| checker.CheckProperty(next, type, CHECK_OK); |
| - typename Traits::Type::Identifier name = this->GetSymbol(scanner_); |
| + IdentifierT name = this->GetSymbol(scanner_); |
| typename Traits::Type::FunctionLiteral value = |
| this->ParseFunctionLiteral( |
| name, scanner()->location(), |
| @@ -1524,7 +1522,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseObjectLiteral( |
| } |
| case Token::STRING: { |
| Consume(Token::STRING); |
| - typename Traits::Type::Identifier string = this->GetSymbol(scanner_); |
| + IdentifierT string = this->GetSymbol(scanner_); |
| if (fni_ != NULL) this->PushLiteralName(fni_, string); |
| uint32_t index; |
| if (this->IsArrayIndex(string, &index)) { |
| @@ -1543,7 +1541,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseObjectLiteral( |
| default: |
| if (Token::IsKeyword(next)) { |
| Consume(next); |
| - typename Traits::Type::Identifier string = this->GetSymbol(scanner_); |
| + IdentifierT string = this->GetSymbol(scanner_); |
| key = factory()->NewLiteral(string, next_pos); |
| } else { |
| Token::Value next = Next(); |
| @@ -1557,8 +1555,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseObjectLiteral( |
| checker.CheckProperty(next, kValueProperty, CHECK_OK); |
| Expect(Token::COLON, CHECK_OK); |
| - typename Traits::Type::Expression value = |
| - this->ParseAssignmentExpression(true, CHECK_OK); |
| + ExpressionT value = this->ParseAssignmentExpression(true, CHECK_OK); |
| typename Traits::Type::ObjectLiteralProperty property = |
| factory()->NewObjectLiteralProperty(key, value); |
| @@ -1610,9 +1607,8 @@ typename Traits::Type::ExpressionList ParserBase<Traits>::ParseArguments( |
| Expect(Token::LPAREN, CHECK_OK_CUSTOM(NullExpressionList)); |
| bool done = (peek() == Token::RPAREN); |
| while (!done) { |
| - typename Traits::Type::Expression argument = |
| - this->ParseAssignmentExpression(true, |
| - CHECK_OK_CUSTOM(NullExpressionList)); |
| + ExpressionT argument = this->ParseAssignmentExpression( |
| + true, CHECK_OK_CUSTOM(NullExpressionList)); |
| result->Add(argument, zone_); |
| if (result->length() > Code::kMaxArguments) { |
| ReportMessageAt(scanner()->location(), "too_many_arguments"); |
| @@ -1631,8 +1627,8 @@ typename Traits::Type::ExpressionList ParserBase<Traits>::ParseArguments( |
| // Precedence = 2 |
| template <class Traits> |
| -typename Traits::Type::Expression ParserBase<Traits>::ParseAssignmentExpression( |
| - bool accept_IN, bool* ok) { |
| +typename ParserBase<Traits>::ExpressionT |
| +ParserBase<Traits>::ParseAssignmentExpression(bool accept_IN, bool* ok) { |
| // AssignmentExpression :: |
| // ConditionalExpression |
| // YieldExpression |
| @@ -1645,7 +1641,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseAssignmentExpression( |
| } |
| if (fni_ != NULL) fni_->Enter(); |
| - typename Traits::Type::Expression expression = |
| + ExpressionT expression = |
| this->ParseConditionalExpression(accept_IN, CHECK_OK); |
| if (!Token::IsAssignmentOp(peek())) { |
| @@ -1668,8 +1664,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseAssignmentExpression( |
| Token::Value op = Next(); // Get assignment operator. |
| int pos = position(); |
| - typename Traits::Type::Expression right = |
| - this->ParseAssignmentExpression(accept_IN, CHECK_OK); |
| + ExpressionT right = this->ParseAssignmentExpression(accept_IN, CHECK_OK); |
| // TODO(1231235): We try to estimate the set of properties set by |
| // constructors. We define a new property whenever there is an |
| @@ -1701,17 +1696,17 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseAssignmentExpression( |
| } |
| template <class Traits> |
| -typename Traits::Type::Expression ParserBase<Traits>::ParseYieldExpression( |
| - bool* ok) { |
| +typename ParserBase<Traits>::ExpressionT |
| +ParserBase<Traits>::ParseYieldExpression(bool* ok) { |
| // YieldExpression :: |
| // 'yield' '*'? AssignmentExpression |
| int pos = peek_position(); |
| Expect(Token::YIELD, CHECK_OK); |
| Yield::Kind kind = |
| Check(Token::MUL) ? Yield::DELEGATING : Yield::SUSPEND; |
| - typename Traits::Type::Expression generator_object = |
| + ExpressionT generator_object = |
| factory()->NewVariableProxy(function_state_->generator_object_variable()); |
| - typename Traits::Type::Expression expression = |
| + ExpressionT expression = |
| ParseAssignmentExpression(false, CHECK_OK); |
| typename Traits::Type::YieldExpression yield = |
| factory()->NewYield(generator_object, expression, kind, pos); |
| @@ -1724,7 +1719,7 @@ typename Traits::Type::Expression ParserBase<Traits>::ParseYieldExpression( |
| // Precedence = 3 |
| template <class Traits> |
| -typename Traits::Type::Expression |
| +typename ParserBase<Traits>::ExpressionT |
| ParserBase<Traits>::ParseConditionalExpression(bool accept_IN, bool* ok) { |
| // ConditionalExpression :: |
| // LogicalOrExpression |
| @@ -1732,35 +1727,31 @@ ParserBase<Traits>::ParseConditionalExpression(bool accept_IN, bool* ok) { |
| int pos = peek_position(); |
| // We start using the binary expression parser for prec >= 4 only! |
| - typename Traits::Type::Expression expression = |
| - this->ParseBinaryExpression(4, accept_IN, CHECK_OK); |
| + ExpressionT expression = this->ParseBinaryExpression(4, accept_IN, CHECK_OK); |
| if (peek() != Token::CONDITIONAL) return expression; |
| Consume(Token::CONDITIONAL); |
| // In parsing the first assignment expression in conditional |
| // expressions we always accept the 'in' keyword; see ECMA-262, |
| // section 11.12, page 58. |
| - typename Traits::Type::Expression left = |
| - ParseAssignmentExpression(true, CHECK_OK); |
| + ExpressionT left = ParseAssignmentExpression(true, CHECK_OK); |
| Expect(Token::COLON, CHECK_OK); |
| - typename Traits::Type::Expression right = |
| - ParseAssignmentExpression(accept_IN, CHECK_OK); |
| + ExpressionT right = ParseAssignmentExpression(accept_IN, CHECK_OK); |
| return factory()->NewConditional(expression, left, right, pos); |
| } |
| // Precedence >= 4 |
| template <class Traits> |
| -typename Traits::Type::Expression |
| +typename ParserBase<Traits>::ExpressionT |
| ParserBase<Traits>::ParseBinaryExpression(int prec, bool accept_IN, bool* ok) { |
| ASSERT(prec >= 4); |
| - typename Traits::Type::Expression x = this->ParseUnaryExpression(CHECK_OK); |
| + ExpressionT x = this->ParseUnaryExpression(CHECK_OK); |
| for (int prec1 = Precedence(peek(), accept_IN); prec1 >= prec; prec1--) { |
| // prec1 >= 4 |
| while (Precedence(peek(), accept_IN) == prec1) { |
| Token::Value op = Next(); |
| int pos = position(); |
| - typename Traits::Type::Expression y = |
| - ParseBinaryExpression(prec1 + 1, accept_IN, CHECK_OK); |
| + ExpressionT y = ParseBinaryExpression(prec1 + 1, accept_IN, CHECK_OK); |
| if (this->ShortcutNumericLiteralBinaryExpression(&x, y, op, pos, |
| factory())) { |