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

Unified Diff: src/parsing/preparser.h

Issue 2179423002: [parser] Refactor parser and preparser traits (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: More changes after reviewers' comments 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 | « src/parsing/parser-base.h ('k') | src/parsing/preparser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parsing/preparser.h
diff --git a/src/parsing/preparser.h b/src/parsing/preparser.h
index 2499769e971babf847896735efd90617f94beff8..a4a977e0ea4a0d90c6f4931f1281d3bde0510f20 100644
--- a/src/parsing/preparser.h
+++ b/src/parsing/preparser.h
@@ -75,7 +75,6 @@ class PreParserIdentifier {
bool IsConstructor() const { return type_ == kConstructorIdentifier; }
bool IsEnum() const { return type_ == kEnumIdentifier; }
bool IsAwait() const { return type_ == kAwaitIdentifier; }
- bool IsAsync() const { return type_ == kAsyncIdentifier; }
bool IsFutureStrictReserved() const {
return type_ == kFutureStrictReservedIdentifier ||
type_ == kLetIdentifier || type_ == kStaticIdentifier ||
@@ -622,35 +621,31 @@ class PreParserTraits {
explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {}
// Helper functions for recursive descent.
- static bool IsEval(PreParserIdentifier identifier) {
+ bool IsEval(PreParserIdentifier identifier) const {
return identifier.IsEval();
}
- static bool IsArguments(PreParserIdentifier identifier) {
+ bool IsArguments(PreParserIdentifier identifier) const {
return identifier.IsArguments();
}
- static bool IsAwait(PreParserIdentifier identifier) {
+ bool IsAwait(PreParserIdentifier identifier) const {
return identifier.IsAwait();
}
- static bool IsAsync(PreParserIdentifier identifier) {
- return identifier.IsAsync();
- }
-
- static bool IsEvalOrArguments(PreParserIdentifier identifier) {
+ bool IsEvalOrArguments(PreParserIdentifier identifier) const {
return identifier.IsEvalOrArguments();
}
- static bool IsUndefined(PreParserIdentifier identifier) {
+ bool IsUndefined(PreParserIdentifier identifier) const {
return identifier.IsUndefined();
}
- static bool IsPrototype(PreParserIdentifier identifier) {
+ bool IsPrototype(PreParserIdentifier identifier) const {
return identifier.IsPrototype();
}
- static bool IsConstructor(PreParserIdentifier identifier) {
+ bool IsConstructor(PreParserIdentifier identifier) const {
return identifier.IsConstructor();
}
@@ -667,15 +662,11 @@ class PreParserTraits {
return expression.AsIdentifier();
}
- static bool IsEvalIdentifier(PreParserExpression expression) {
- return IsIdentifier(expression) && IsEval(AsIdentifier(expression));
- }
-
- static bool IsDirectEvalCall(PreParserExpression expression) {
+ bool IsDirectEvalCall(PreParserExpression expression) const {
return expression.IsDirectEvalCall();
}
- static bool IsFutureStrictReserved(PreParserIdentifier identifier) {
+ bool IsFutureStrictReserved(PreParserIdentifier identifier) const {
return identifier.IsFutureStrictReserved();
}
@@ -699,8 +690,7 @@ class PreParserTraits {
UNREACHABLE();
}
- static void PushPropertyName(FuncNameInferrer* fni,
- PreParserExpression expression) {
+ void PushPropertyName(FuncNameInferrer* fni, PreParserExpression expression) {
// PreParser should not use FuncNameInferrer.
UNREACHABLE();
}
@@ -723,8 +713,7 @@ class PreParserTraits {
bool ShortcutNumericLiteralBinaryExpression(PreParserExpression* x,
PreParserExpression y,
- Token::Value op,
- int pos,
+ Token::Value op, int pos,
PreParserFactory* factory) {
return false;
}
@@ -739,16 +728,19 @@ class PreParserTraits {
bool done) {
return PreParserExpression::Default();
}
+
PreParserExpression NewThrowReferenceError(MessageTemplate::Template message,
int pos) {
return PreParserExpression::Default();
}
+
PreParserExpression NewThrowSyntaxError(MessageTemplate::Template message,
- Handle<Object> arg, int pos) {
+ PreParserIdentifier arg, int pos) {
return PreParserExpression::Default();
}
+
PreParserExpression NewThrowTypeError(MessageTemplate::Template message,
- Handle<Object> arg, int pos) {
+ PreParserIdentifier arg, int pos) {
return PreParserExpression::Default();
}
@@ -757,9 +749,9 @@ class PreParserTraits {
MessageTemplate::Template message,
const char* arg = NULL,
ParseErrorType error_type = kSyntaxError);
- void ReportMessageAt(int start_pos, int end_pos,
+ void ReportMessageAt(Scanner::Location location,
MessageTemplate::Template message,
- const char* arg = NULL,
+ const AstRawString* arg,
ParseErrorType error_type = kSyntaxError);
// A dummy function, just useful as an argument to CHECK_OK_CUSTOM.
@@ -789,86 +781,88 @@ class PreParserTraits {
}
// Odd-ball literal creators.
- static PreParserExpression GetLiteralTheHole(int position,
- PreParserFactory* factory) {
+ PreParserExpression GetLiteralTheHole(int position,
+ PreParserFactory* factory) const {
return PreParserExpression::Default();
}
// Producing data during the recursive descent.
PreParserIdentifier GetSymbol(Scanner* scanner);
- PreParserIdentifier GetNumberAsSymbol(Scanner* scanner);
+ PreParserIdentifier GetNumberAsSymbol(Scanner* scanner) {
+ return PreParserIdentifier::Default();
+ }
- static PreParserIdentifier GetNextSymbol(Scanner* scanner) {
+ PreParserIdentifier GetNextSymbol(Scanner* scanner) const {
return PreParserIdentifier::Default();
}
- static PreParserExpression ThisExpression(int pos) {
+ PreParserExpression ThisExpression(int pos = kNoSourcePosition) const {
return PreParserExpression::This();
}
- static PreParserExpression NewSuperPropertyReference(
- PreParserFactory* factory, int pos) {
+ PreParserExpression NewSuperPropertyReference(PreParserFactory* factory,
+ int pos) const {
return PreParserExpression::Default();
}
- static PreParserExpression NewSuperCallReference(PreParserFactory* factory,
- int pos) {
+ PreParserExpression NewSuperCallReference(PreParserFactory* factory,
+ int pos) const {
return PreParserExpression::SuperCallReference();
}
- static PreParserExpression NewTargetExpression(int pos) {
+ PreParserExpression NewTargetExpression(int pos) const {
return PreParserExpression::Default();
}
- static PreParserExpression FunctionSentExpression(PreParserFactory* factory,
- int pos) {
+ PreParserExpression FunctionSentExpression(PreParserFactory* factory,
+ int pos) const {
return PreParserExpression::Default();
}
- static PreParserExpression ExpressionFromLiteral(
- Token::Value token, int pos, Scanner* scanner,
- PreParserFactory* factory) {
+ PreParserExpression ExpressionFromLiteral(Token::Value token, int pos,
+ Scanner* scanner,
+ PreParserFactory* factory) const {
return PreParserExpression::Default();
}
- static PreParserExpression ExpressionFromIdentifier(
+ PreParserExpression ExpressionFromIdentifier(
PreParserIdentifier name, int start_position, int end_position,
- InferName = InferName::kYes) {
+ InferName = InferName::kYes) const {
return PreParserExpression::FromIdentifier(name);
}
- PreParserExpression ExpressionFromString(int pos,
- Scanner* scanner,
- PreParserFactory* factory = NULL);
+ PreParserExpression ExpressionFromString(int pos, Scanner* scanner,
+ PreParserFactory* factory);
PreParserExpression GetIterator(PreParserExpression iterable,
PreParserFactory* factory, int pos) {
return PreParserExpression::Default();
}
- static PreParserExpressionList NewExpressionList(int size, Zone* zone) {
+ PreParserExpressionList NewExpressionList(int size, Zone* zone) const {
return PreParserExpressionList();
}
- static PreParserStatementList NewStatementList(int size, Zone* zone) {
+ PreParserStatementList NewStatementList(int size, Zone* zone) const {
return PreParserStatementList();
}
- static PreParserExpressionList NewPropertyList(int size, Zone* zone) {
+ PreParserExpressionList NewPropertyList(int size, Zone* zone) const {
return PreParserExpressionList();
}
- static void AddParameterInitializationBlock(
+ void AddParameterInitializationBlock(
const PreParserFormalParameters& parameters, PreParserStatementList list,
- bool is_async, bool* ok) {}
+ bool is_async, bool* ok) const {}
- V8_INLINE void SkipLazyFunctionBody(int* materialized_literal_count,
- int* expected_property_count, bool* ok) {
+ V8_INLINE void SkipLazyFunctionBody(
+ int* materialized_literal_count, int* expected_property_count, bool* ok,
+ Scanner::BookmarkScope* bookmark = nullptr) {
UNREACHABLE();
}
V8_INLINE PreParserStatementList ParseEagerFunctionBody(
- PreParserIdentifier function_name, int pos,
+ PreParserIdentifier name, int pos,
const PreParserFormalParameters& parameters, FunctionKind kind,
FunctionLiteral::FunctionType function_type, bool* ok);
@@ -883,25 +877,18 @@ class PreParserTraits {
V8_INLINE PreParserExpression ParseAsyncFunctionExpression(bool* ok);
- void ReindexLiterals(const PreParserFormalParameters& paramaters) {}
+ void ReindexLiterals(const PreParserFormalParameters& parameters) {}
struct TemplateLiteralState {};
TemplateLiteralState OpenTemplateLiteral(int pos) {
return TemplateLiteralState();
}
- void AddTemplateSpan(TemplateLiteralState*, bool) {}
- void AddTemplateExpression(TemplateLiteralState*, PreParserExpression) {}
- PreParserExpression CloseTemplateLiteral(TemplateLiteralState*, int,
- PreParserExpression tag) {
- if (IsTaggedTemplate(tag)) {
- // Emulate generation of array literals for tag callsite
- // 1st is array of cooked strings, second is array of raw strings
- MaterializeTemplateCallsiteLiterals();
- }
- return EmptyExpression();
- }
- inline void MaterializeTemplateCallsiteLiterals();
+ void AddTemplateSpan(TemplateLiteralState* state, bool tail) {}
+ void AddTemplateExpression(TemplateLiteralState* state,
+ PreParserExpression expression) {}
+ V8_INLINE PreParserExpression CloseTemplateLiteral(
+ TemplateLiteralState* state, int start, PreParserExpression tag);
PreParserExpression NoTemplateTag() {
return PreParserExpression::NoTemplateTag();
}
@@ -941,7 +928,7 @@ class PreParserTraits {
bool* ok);
V8_INLINE void MarkCollectedTailCallExpressions() {}
- V8_INLINE void MarkTailPosition(PreParserExpression) {}
+ V8_INLINE void MarkTailPosition(PreParserExpression expression) {}
PreParserExpressionList PrepareSpreadArguments(PreParserExpressionList list) {
return list;
@@ -973,13 +960,14 @@ class PreParserTraits {
return left;
}
- inline void QueueDestructuringAssignmentForRewriting(PreParserExpression) {}
- inline void QueueNonPatternForRewriting(PreParserExpression, bool* ok) {}
+ inline void QueueDestructuringAssignmentForRewriting(
+ PreParserExpression assignment) {}
+ inline void QueueNonPatternForRewriting(PreParserExpression expr, bool* ok) {}
- void SetFunctionNameFromPropertyName(PreParserExpression,
- PreParserIdentifier) {}
- void SetFunctionNameFromIdentifierRef(PreParserExpression,
- PreParserExpression) {}
+ void SetFunctionNameFromPropertyName(PreParserExpression property,
+ PreParserIdentifier name) {}
+ void SetFunctionNameFromIdentifierRef(PreParserExpression value,
+ PreParserExpression identifier) {}
inline void RewriteNonPattern(Type::ExpressionClassifier* classifier,
bool* ok);
@@ -992,8 +980,9 @@ class PreParserTraits {
V8_INLINE Zone* zone() const;
V8_INLINE ZoneList<PreParserExpression>* GetNonPatternList() const;
- inline PreParserExpression RewriteYieldStar(
- PreParserExpression generator, PreParserExpression expr, int pos);
+ inline PreParserExpression RewriteYieldStar(PreParserExpression generator,
+ PreParserExpression expression,
+ int pos);
private:
PreParser* pre_parser_;
@@ -1136,8 +1125,6 @@ class PreParser : public ParserBase<PreParserTraits> {
Expression ParseV8Intrinsic(bool* ok);
Expression ParseDoExpression(bool* ok);
- V8_INLINE void SkipLazyFunctionBody(int* materialized_literal_count,
- int* expected_property_count, bool* ok);
V8_INLINE PreParserStatementList ParseEagerFunctionBody(
PreParserIdentifier function_name, int pos,
const PreParserFormalParameters& parameters, FunctionKind kind,
@@ -1161,12 +1148,6 @@ class PreParser : public ParserBase<PreParserTraits> {
};
-void PreParserTraits::MaterializeTemplateCallsiteLiterals() {
- pre_parser_->function_state_->NextMaterializedLiteralIndex();
- pre_parser_->function_state_->NextMaterializedLiteralIndex();
-}
-
-
void PreParserTraits::MaterializeUnspreadArgumentsLiterals(int count) {
for (int i = 0; i < count; ++i) {
pre_parser_->function_state_->NextMaterializedLiteralIndex();
@@ -1262,6 +1243,17 @@ PreParserStatementList PreParserTraits::ParseEagerFunctionBody(
kind, function_type, ok);
}
+PreParserExpression PreParserTraits::CloseTemplateLiteral(
+ TemplateLiteralState* state, int start, PreParserExpression tag) {
+ if (IsTaggedTemplate(tag)) {
+ // Emulate generation of array literals for tag callsite
+ // 1st is array of cooked strings, second is array of raw strings
+ pre_parser_->function_state_->NextMaterializedLiteralIndex();
+ pre_parser_->function_state_->NextMaterializedLiteralIndex();
+ }
+ return EmptyExpression();
+}
+
} // namespace internal
} // namespace v8
« no previous file with comments | « src/parsing/parser-base.h ('k') | src/parsing/preparser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698