Revision: 19994
Author: [email protected]
Date: Mon Mar 17 13:36:39 2014 UTC
Log: Move ParseConditionalExpression to ParserBase.
[email protected]
BUG=v8:3126
LOG=N
Review URL: https://codereview.chromium.org/198053002
http://code.google.com/p/v8/source/detail?r=19994
Modified:
/branches/bleeding_edge/src/parser.cc
/branches/bleeding_edge/src/parser.h
/branches/bleeding_edge/src/preparser.cc
/branches/bleeding_edge/src/preparser.h
=======================================
--- /branches/bleeding_edge/src/parser.cc Mon Mar 17 10:21:01 2014 UTC
+++ /branches/bleeding_edge/src/parser.cc Mon Mar 17 13:36:39 2014 UTC
@@ -633,8 +633,9 @@
}
-Expression* ParserTraits::ParseConditionalExpression(bool accept_IN, bool*
ok) {
- return parser_->ParseConditionalExpression(accept_IN, ok);
+Expression* ParserTraits::ParseBinaryExpression(int prec, bool accept_IN,
+ bool* ok) {
+ return parser_->ParseBinaryExpression(prec, accept_IN, ok);
}
@@ -2920,27 +2921,6 @@
return loop;
}
}
-
-
-// Precedence = 3
-Expression* Parser::ParseConditionalExpression(bool accept_IN, bool* ok) {
- // ConditionalExpression ::
- // LogicalOrExpression
- // LogicalOrExpression '?' AssignmentExpression ':'
AssignmentExpression
-
- int pos = peek_position();
- // We start using the binary expression parser for prec >= 4 only!
- Expression* expression = 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.
- Expression* left = ParseAssignmentExpression(true, CHECK_OK);
- Expect(Token::COLON, CHECK_OK);
- Expression* right = ParseAssignmentExpression(accept_IN, CHECK_OK);
- return factory()->NewConditional(expression, left, right, pos);
-}
// Precedence >= 4
=======================================
--- /branches/bleeding_edge/src/parser.h Mon Mar 17 10:21:01 2014 UTC
+++ /branches/bleeding_edge/src/parser.h Mon Mar 17 13:36:39 2014 UTC
@@ -561,7 +561,7 @@
int function_token_position,
FunctionLiteral::FunctionType type,
bool* ok);
- Expression* ParseConditionalExpression(bool accept_IN, bool* ok);
+ Expression* ParseBinaryExpression(int prec, bool accept_IN, bool* ok);
private:
Parser* parser_;
@@ -704,7 +704,6 @@
// Support for hamony block scoped bindings.
Block* ParseScopedBlock(ZoneStringList* labels, bool* ok);
- Expression* ParseConditionalExpression(bool accept_IN, bool* ok);
Expression* ParseBinaryExpression(int prec, bool accept_IN, bool* ok);
Expression* ParseUnaryExpression(bool* ok);
Expression* ParsePostfixExpression(bool* ok);
=======================================
--- /branches/bleeding_edge/src/preparser.cc Mon Mar 17 10:21:01 2014 UTC
+++ /branches/bleeding_edge/src/preparser.cc Mon Mar 17 13:36:39 2014 UTC
@@ -146,9 +146,10 @@
}
-PreParserExpression PreParserTraits::ParseConditionalExpression(bool
accept_IN,
- bool* ok) {
- return pre_parser_->ParseConditionalExpression(accept_IN, ok);
+PreParserExpression PreParserTraits::ParseBinaryExpression(int prec,
+ bool accept_IN,
+ bool* ok) {
+ return pre_parser_->ParseBinaryExpression(prec, accept_IN, ok);
}
@@ -841,27 +842,6 @@
((void)0
#define DUMMY ) // to make indentation work
#undef DUMMY
-
-
-// Precedence = 3
-PreParser::Expression PreParser::ParseConditionalExpression(bool accept_IN,
- bool* ok) {
- // ConditionalExpression ::
- // LogicalOrExpression
- // LogicalOrExpression '?' AssignmentExpression ':'
AssignmentExpression
-
- // We start using the binary expression parser for prec >= 4 only!
- Expression expression = 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.
- ParseAssignmentExpression(true, CHECK_OK);
- Expect(Token::COLON, CHECK_OK);
- ParseAssignmentExpression(accept_IN, CHECK_OK);
- return Expression::Default();
-}
// Precedence >= 4
=======================================
--- /branches/bleeding_edge/src/preparser.h Mon Mar 17 10:28:53 2014 UTC
+++ /branches/bleeding_edge/src/preparser.h Mon Mar 17 13:36:39 2014 UTC
@@ -388,6 +388,8 @@
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);
// Used to detect duplicates in object literals. Each of the values
// kGetterProperty, kSetterProperty and kValueProperty represents
@@ -718,6 +720,13 @@
int pos) {
return PreParserExpression::Default();
}
+
+ PreParserExpression NewConditional(PreParserExpression condition,
+ PreParserExpression then_expression,
+ PreParserExpression else_expression,
+ int pos) {
+ return PreParserExpression::Default();
+ }
};
@@ -891,7 +900,7 @@
int function_token_position,
FunctionLiteral::FunctionType type,
bool* ok);
- PreParserExpression ParseConditionalExpression(bool accept_IN, bool* ok);
+ PreParserExpression ParseBinaryExpression(int prec, bool accept_IN,
bool* ok);
private:
PreParser* pre_parser_;
@@ -1692,6 +1701,32 @@
}
return yield;
}
+
+
+// Precedence = 3
+template <class Traits>
+typename Traits::Type::Expression
+ParserBase<Traits>::ParseConditionalExpression(bool accept_IN, bool* ok) {
+ // ConditionalExpression ::
+ // LogicalOrExpression
+ // LogicalOrExpression '?' AssignmentExpression ':'
AssignmentExpression
+
+ 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);
+ 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);
+ Expect(Token::COLON, CHECK_OK);
+ typename Traits::Type::Expression right =
+ ParseAssignmentExpression(accept_IN, CHECK_OK);
+ return factory()->NewConditional(expression, left, right, pos);
+}
#undef CHECK_OK
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.