Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Unified Diff: src/parsing/parser.h

Issue 2273693002: [parser] Clean up (pre)parser traits, part 2 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@nickie-2267783002-ref-traits
Patch Set: Rebase Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/parsing/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
+ 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();
}
« no previous file with comments | « no previous file | src/parsing/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698