Chromium Code Reviews| Index: src/parsing/parser.h |
| diff --git a/src/parsing/parser.h b/src/parsing/parser.h |
| index b069f9af980014a879e2cb18e424036ae7e05156..dd9e47b0aeec1b24de1790f1bfd56cb742575e84 100644 |
| --- a/src/parsing/parser.h |
| +++ b/src/parsing/parser.h |
| @@ -175,74 +175,6 @@ class ParserBaseTraits<Parser> { |
| return reinterpret_cast<const Parser*>(this); |
| } |
| - // Helper functions for recursive descent. |
| - bool IsEval(const AstRawString* identifier) const; |
| - bool IsArguments(const AstRawString* identifier) const; |
| - bool IsEvalOrArguments(const AstRawString* identifier) const; |
| - bool IsUndefined(const AstRawString* identifier) const; |
| - V8_INLINE bool IsFutureStrictReserved(const AstRawString* identifier) const; |
| - |
| - // Returns true if the expression is of type "this.foo". |
| - static bool IsThisProperty(Expression* expression); |
| - |
| - static bool IsIdentifier(Expression* expression); |
| - |
| - static const AstRawString* AsIdentifier(Expression* expression) { |
| - DCHECK(IsIdentifier(expression)); |
| - return expression->AsVariableProxy()->raw_name(); |
| - } |
| - |
| - bool IsPrototype(const AstRawString* identifier) const; |
| - |
| - bool IsConstructor(const AstRawString* identifier) const; |
| - |
| - bool IsDirectEvalCall(Expression* expression) const { |
| - if (!expression->IsCall()) return false; |
| - expression = expression->AsCall()->expression(); |
| - return IsIdentifier(expression) && IsEval(AsIdentifier(expression)); |
| - } |
| - |
| - static bool IsBoilerplateProperty(ObjectLiteral::Property* property) { |
| - return ObjectLiteral::IsBoilerplateProperty(property); |
| - } |
| - |
| - static bool IsArrayIndex(const AstRawString* string, uint32_t* index) { |
| - return string->AsArrayIndex(index); |
| - } |
| - |
| - static Expression* GetPropertyValue(ObjectLiteral::Property* property) { |
| - return property->value(); |
| - } |
| - |
| - // Functions for encapsulating the differences between parsing and preparsing; |
| - // operations interleaved with the recursive descent. |
| - static void PushLiteralName(FuncNameInferrer* fni, const AstRawString* id) { |
| - fni->PushLiteralName(id); |
| - } |
| - |
| - void PushPropertyName(FuncNameInferrer* fni, Expression* expression); |
| - |
| - static void InferFunctionName(FuncNameInferrer* fni, |
| - FunctionLiteral* func_to_infer) { |
| - fni->AddFunction(func_to_infer); |
| - } |
| - |
| - // If we assign a function literal to a property we pretenure the |
| - // literal so it can be added as a constant function property. |
| - static void CheckAssigningFunctionLiteralToProperty(Expression* left, |
| - Expression* right); |
| - |
| - // Determine if the expression is a variable proxy and mark it as being used |
| - // in an assignment or with a increment/decrement operator. |
| - static Expression* MarkExpressionAsAssigned(Expression* expression); |
| - |
| - // Returns true if we have a binary expression between two numeric |
| - // literals. In that case, *x will be changed to an expression which is the |
| - // computed value. |
| - bool ShortcutNumericLiteralBinaryExpression(Expression** x, Expression* y, |
| - Token::Value op, int pos, |
| - AstNodeFactory* factory); |
| - |
| // Rewrites the following types of unary expressions: |
| // not <literal> -> true / false |
| // + <numeric literal> -> <numeric literal> |
| @@ -892,6 +824,123 @@ class Parser : public ParserBase<Parser> { |
| bool* ok); |
| void SetFunctionName(Expression* value, const AstRawString* name); |
| + // Helper functions for recursive descent. |
|
adamk
2016/08/23 16:03:45
I don't think this comment carries its weight
|
| + V8_INLINE bool IsEval(const AstRawString* identifier) const { |
| + return identifier == ast_value_factory()->eval_string(); |
| + } |
| + |
| + V8_INLINE bool IsArguments(const AstRawString* identifier) const { |
| + return identifier == ast_value_factory()->arguments_string(); |
| + } |
| + |
| + V8_INLINE bool IsEvalOrArguments(const AstRawString* identifier) const { |
| + return IsEval(identifier) || IsArguments(identifier); |
| + } |
| + |
| + V8_INLINE bool IsUndefined(const AstRawString* identifier) const { |
| + return identifier == ast_value_factory()->undefined_string(); |
| + } |
| + |
| + V8_INLINE bool IsFutureStrictReserved(const AstRawString* identifier) const { |
| + return scanner()->IdentifierIsFutureStrictReserved(identifier); |
| + } |
| + |
| + // Returns true if the expression is of type "this.foo". |
| + V8_INLINE static bool IsThisProperty(Expression* expression) { |
| + DCHECK(expression != NULL); |
| + Property* property = expression->AsProperty(); |
| + return property != NULL && property->obj()->IsVariableProxy() && |
| + property->obj()->AsVariableProxy()->is_this(); |
| + } |
| + |
| + V8_INLINE static bool IsIdentifier(Expression* expression) { |
| + VariableProxy* operand = expression->AsVariableProxy(); |
| + return operand != NULL && !operand->is_this(); |
| + } |
| + |
| + V8_INLINE static const AstRawString* AsIdentifier(Expression* expression) { |
| + DCHECK(IsIdentifier(expression)); |
| + return expression->AsVariableProxy()->raw_name(); |
| + } |
| + |
| + V8_INLINE bool IsPrototype(const AstRawString* identifier) const { |
| + return identifier == ast_value_factory()->prototype_string(); |
| + } |
| + |
| + V8_INLINE bool IsConstructor(const AstRawString* identifier) const { |
| + return identifier == ast_value_factory()->constructor_string(); |
| + } |
| + |
| + V8_INLINE bool IsDirectEvalCall(Expression* expression) const { |
| + if (!expression->IsCall()) return false; |
| + expression = expression->AsCall()->expression(); |
| + return IsIdentifier(expression) && IsEval(AsIdentifier(expression)); |
| + } |
| + |
| + V8_INLINE static bool IsBoilerplateProperty( |
| + ObjectLiteral::Property* property) { |
| + return ObjectLiteral::IsBoilerplateProperty(property); |
| + } |
| + |
| + V8_INLINE static bool IsArrayIndex(const AstRawString* string, |
| + uint32_t* index) { |
| + return string->AsArrayIndex(index); |
| + } |
| + |
| + V8_INLINE static Expression* GetPropertyValue( |
| + ObjectLiteral::Property* property) { |
| + return property->value(); |
| + } |
| + |
| + // Functions for encapsulating the differences between parsing and preparsing; |
| + // operations interleaved with the recursive descent. |
| + V8_INLINE static void PushLiteralName(FuncNameInferrer* fni, |
| + const AstRawString* id) { |
| + fni->PushLiteralName(id); |
| + } |
| + |
| + V8_INLINE void PushPropertyName(FuncNameInferrer* fni, |
| + Expression* expression) { |
| + if (expression->IsPropertyName()) { |
| + fni->PushLiteralName(expression->AsLiteral()->AsRawPropertyName()); |
| + } else { |
| + fni->PushLiteralName(ast_value_factory()->anonymous_function_string()); |
| + } |
| + } |
| + |
| + V8_INLINE static void InferFunctionName(FuncNameInferrer* fni, |
| + FunctionLiteral* func_to_infer) { |
| + fni->AddFunction(func_to_infer); |
| + } |
| + |
| + // If we assign a function literal to a property we pretenure the |
| + // literal so it can be added as a constant function property. |
| + V8_INLINE static void CheckAssigningFunctionLiteralToProperty( |
| + Expression* left, Expression* right) { |
| + DCHECK(left != NULL); |
| + if (left->IsProperty() && right->IsFunctionLiteral()) { |
| + right->AsFunctionLiteral()->set_pretenure(); |
| + } |
| + } |
| + |
| + // Determine if the expression is a variable proxy and mark it as being used |
| + // in an assignment or with a increment/decrement operator. |
| + V8_INLINE static Expression* MarkExpressionAsAssigned( |
| + Expression* expression) { |
| + VariableProxy* proxy = |
| + expression != NULL ? expression->AsVariableProxy() : NULL; |
| + if (proxy != NULL) proxy->set_is_assigned(); |
| + return expression; |
| + } |
| + |
| + // Returns true if we have a binary expression between two numeric |
| + // literals. In that case, *x will be changed to an expression which is the |
| + // computed value. |
| + bool ShortcutNumericLiteralBinaryExpression(Expression** x, Expression* y, |
| + Token::Value op, int pos); |
| + |
| + // Parser's private field members. |
| + |
| Scanner scanner_; |
| PreParser* reusable_preparser_; |
| Scope* original_scope_; // for ES5 function declarations in sloppy eval |
| @@ -914,11 +963,6 @@ class Parser : public ParserBase<Parser> { |
| #endif // DEBUG |
| }; |
| -bool ParserBaseTraits<Parser>::IsFutureStrictReserved( |
| - const AstRawString* identifier) const { |
| - return delegate()->scanner()->IdentifierIsFutureStrictReserved(identifier); |
| -} |
| - |
| const AstRawString* ParserBaseTraits<Parser>::EmptyIdentifierString() const { |
| return delegate()->ast_value_factory()->empty_string(); |
| } |