Index: src/parsing/parser.h |
diff --git a/src/parsing/parser.h b/src/parsing/parser.h |
index dd9e47b0aeec1b24de1790f1bfd56cb742575e84..2fef7738c2ff8c37289a26e2116539458a8defc3 100644 |
--- a/src/parsing/parser.h |
+++ b/src/parsing/parser.h |
@@ -175,63 +175,6 @@ class ParserBaseTraits<Parser> { |
return reinterpret_cast<const Parser*>(this); |
} |
- // Rewrites the following types of unary expressions: |
- // not <literal> -> true / false |
- // + <numeric literal> -> <numeric literal> |
- // - <numeric literal> -> <numeric literal with value negated> |
- // ! <literal> -> true / false |
- // The following rewriting rules enable the collection of type feedback |
- // without any special stub and the multiplication is removed later in |
- // Crankshaft's canonicalization pass. |
- // + foo -> foo * 1 |
- // - foo -> foo * (-1) |
- // ~ foo -> foo ^(~0) |
- Expression* BuildUnaryExpression(Expression* expression, Token::Value op, |
- int pos, AstNodeFactory* factory); |
- |
- Expression* BuildIteratorResult(Expression* value, bool done); |
- |
- // Generate AST node that throws a ReferenceError with the given type. |
- Expression* NewThrowReferenceError(MessageTemplate::Template message, |
- int pos); |
- |
- // Generate AST node that throws a SyntaxError with the given |
- // type. The first argument may be null (in the handle sense) in |
- // which case no arguments are passed to the constructor. |
- Expression* NewThrowSyntaxError(MessageTemplate::Template message, |
- const AstRawString* arg, int pos); |
- |
- // Generate AST node that throws a TypeError with the given |
- // type. Both arguments must be non-null (in the handle sense). |
- Expression* NewThrowTypeError(MessageTemplate::Template message, |
- const AstRawString* arg, int pos); |
- |
- // Reporting errors. |
- void ReportMessageAt(Scanner::Location source_location, |
- MessageTemplate::Template message, |
- const char* arg = NULL, |
- ParseErrorType error_type = kSyntaxError); |
- void ReportMessageAt(Scanner::Location source_location, |
- MessageTemplate::Template message, |
- const AstRawString* arg, |
- ParseErrorType error_type = kSyntaxError); |
- |
- // "null" return type creators. |
- static const AstRawString* EmptyIdentifier() { return nullptr; } |
- static Expression* EmptyExpression() { return nullptr; } |
- static Literal* EmptyLiteral() { return nullptr; } |
- static ObjectLiteralProperty* EmptyObjectLiteralProperty() { return nullptr; } |
- static FunctionLiteral* EmptyFunctionLiteral() { return nullptr; } |
- |
- // Used in error return values. |
- static ZoneList<Expression*>* NullExpressionList() { return nullptr; } |
- |
- // Non-NULL empty string. |
- V8_INLINE const AstRawString* EmptyIdentifierString() const; |
- |
- // Odd-ball literal creators. |
- Literal* GetLiteralTheHole(int position, AstNodeFactory* factory) const; |
- |
// Producing data during the recursive descent. |
const AstRawString* GetSymbol(Scanner* scanner) const; |
const AstRawString* GetNextSymbol(Scanner* scanner) const; |
@@ -939,6 +882,101 @@ class Parser : public ParserBase<Parser> { |
bool ShortcutNumericLiteralBinaryExpression(Expression** x, Expression* y, |
Token::Value op, int pos); |
+ // Rewrites the following types of unary expressions: |
+ // not <literal> -> true / false |
+ // + <numeric literal> -> <numeric literal> |
+ // - <numeric literal> -> <numeric literal with value negated> |
+ // ! <literal> -> true / false |
+ // The following rewriting rules enable the collection of type feedback |
+ // without any special stub and the multiplication is removed later in |
+ // Crankshaft's canonicalization pass. |
+ // + foo -> foo * 1 |
+ // - foo -> foo * (-1) |
+ // ~ foo -> foo ^(~0) |
+ Expression* BuildUnaryExpression(Expression* expression, Token::Value op, |
+ int pos); |
+ |
+ Expression* BuildIteratorResult(Expression* value, bool done); |
+ |
+ // Generate AST node that throws a ReferenceError with the given type. |
+ V8_INLINE Expression* NewThrowReferenceError( |
marja
2016/08/24 08:57:27
Why did you put the implementation in the parser.h
nickie
2016/08/24 09:16:31
We discussed this offline. No, it doesn't have an
|
+ MessageTemplate::Template message, int pos) { |
+ return NewThrowError(Runtime::kNewReferenceError, message, |
+ ast_value_factory()->empty_string(), pos); |
+ } |
+ |
+ // Generate AST node that throws a SyntaxError with the given |
+ // type. The first argument may be null (in the handle sense) in |
+ // which case no arguments are passed to the constructor. |
+ V8_INLINE Expression* NewThrowSyntaxError(MessageTemplate::Template message, |
+ const AstRawString* arg, int pos) { |
+ return NewThrowError(Runtime::kNewSyntaxError, message, arg, pos); |
+ } |
+ |
+ // Generate AST node that throws a TypeError with the given |
+ // type. Both arguments must be non-null (in the handle sense). |
+ V8_INLINE Expression* NewThrowTypeError(MessageTemplate::Template message, |
+ const AstRawString* arg, int pos) { |
+ return NewThrowError(Runtime::kNewTypeError, message, arg, pos); |
+ } |
+ |
+ // Reporting errors. |
+ V8_INLINE void ReportMessageAt(Scanner::Location source_location, |
+ MessageTemplate::Template message, |
+ const char* arg = NULL, |
+ ParseErrorType error_type = kSyntaxError) { |
+ if (stack_overflow()) { |
+ // Suppress the error message (syntax error or such) in the presence of a |
+ // stack overflow. The isolate allows only one pending exception at at |
+ // time |
+ // and we want to report the stack overflow later. |
+ return; |
+ } |
+ pending_error_handler_.ReportMessageAt(source_location.beg_pos, |
+ source_location.end_pos, message, |
+ arg, error_type); |
+ } |
+ |
+ V8_INLINE void ReportMessageAt(Scanner::Location source_location, |
+ MessageTemplate::Template message, |
+ const AstRawString* arg, |
+ ParseErrorType error_type = kSyntaxError) { |
+ if (stack_overflow()) { |
+ // Suppress the error message (syntax error or such) in the presence of a |
+ // stack overflow. The isolate allows only one pending exception at at |
+ // time |
+ // and we want to report the stack overflow later. |
+ return; |
+ } |
+ pending_error_handler_.ReportMessageAt(source_location.beg_pos, |
+ source_location.end_pos, message, |
+ arg, error_type); |
+ } |
+ |
+ // "null" return type creators. |
+ V8_INLINE static const AstRawString* EmptyIdentifier() { return nullptr; } |
+ V8_INLINE static Expression* EmptyExpression() { return nullptr; } |
+ V8_INLINE static Literal* EmptyLiteral() { return nullptr; } |
+ V8_INLINE static ObjectLiteralProperty* EmptyObjectLiteralProperty() { |
+ return nullptr; |
+ } |
+ V8_INLINE static FunctionLiteral* EmptyFunctionLiteral() { return nullptr; } |
+ |
+ // Used in error return values. |
+ V8_INLINE static ZoneList<Expression*>* NullExpressionList() { |
+ return nullptr; |
+ } |
+ |
+ // Non-NULL empty string. |
+ V8_INLINE const AstRawString* EmptyIdentifierString() const { |
+ return ast_value_factory()->empty_string(); |
+ } |
+ |
+ // Odd-ball literal creators. |
+ V8_INLINE Literal* GetLiteralTheHole(int position) { |
+ return factory()->NewTheHoleLiteral(kNoSourcePosition); |
+ } |
+ |
// Parser's private field members. |
Scanner scanner_; |
@@ -963,10 +1001,6 @@ class Parser : public ParserBase<Parser> { |
#endif // DEBUG |
}; |
-const AstRawString* ParserBaseTraits<Parser>::EmptyIdentifierString() const { |
- return delegate()->ast_value_factory()->empty_string(); |
-} |
- |
// Support for handling complex values (array and object literals) that |
// can be fully handled at compile time. |