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

Unified Diff: src/parsing/preparser.h

Issue 2313703002: Revert of [parser] Refactor of Parse*Statement*, part 1 (Closed)
Patch Set: Created 4 years, 3 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 fb3e71c7458e48f6dcab7001e27f0025e14f7075..a8db6fedc6515f05319e352502bdacc817c8c1b6 100644
--- a/src/parsing/preparser.h
+++ b/src/parsing/preparser.h
@@ -161,11 +161,6 @@
IsUseStrictField::encode(true));
}
- static PreParserExpression UseAsmStringLiteral() {
- return PreParserExpression(TypeField::encode(kStringLiteralExpression) |
- IsUseAsmField::encode(true));
- }
-
static PreParserExpression This() {
return PreParserExpression(TypeField::encode(kExpression) |
ExpressionTypeField::encode(kThisExpression));
@@ -237,11 +232,6 @@
bool IsUseStrictLiteral() const {
return TypeField::decode(code_) == kStringLiteralExpression &&
IsUseStrictField::decode(code_);
- }
-
- bool IsUseAsmLiteral() const {
- return TypeField::decode(code_) == kStringLiteralExpression &&
- IsUseAsmField::decode(code_);
}
bool IsThis() const {
@@ -351,7 +341,6 @@
// of the Type field, so they can share the storage.
typedef BitField<ExpressionType, TypeField::kNext, 3> ExpressionTypeField;
typedef BitField<bool, TypeField::kNext, 1> IsUseStrictField;
- typedef BitField<bool, IsUseStrictField::kNext, 1> IsUseAsmField;
typedef BitField<PreParserIdentifier::Type, TypeField::kNext, 10>
IdentifierTypeField;
typedef BitField<bool, TypeField::kNext, 1> HasCoverInitializedNameField;
@@ -370,18 +359,13 @@
PreParserList* operator->() { return this; }
void Add(T, void*) { ++length_; }
int length() const { return length_; }
- static PreParserList Null() { return PreParserList(-1); }
- bool IsNull() const { return length_ == -1; }
-
private:
- explicit PreParserList(int n) : length_(n) {}
int length_;
};
+
typedef PreParserList<PreParserExpression> PreParserExpressionList;
-class PreParserStatement;
-typedef PreParserList<PreParserStatement> PreParserStatementList;
class PreParserStatement {
public:
@@ -405,9 +389,6 @@
if (expression.IsUseStrictLiteral()) {
return PreParserStatement(kUseStrictExpressionStatement);
}
- if (expression.IsUseAsmLiteral()) {
- return PreParserStatement(kUseAsmExpressionStatement);
- }
if (expression.IsStringLiteral()) {
return PreParserStatement(kStringLiteralExpressionStatement);
}
@@ -415,16 +396,13 @@
}
bool IsStringLiteral() {
- return code_ == kStringLiteralExpressionStatement || IsUseStrictLiteral() ||
- IsUseAsmLiteral();
+ return code_ == kStringLiteralExpressionStatement || IsUseStrictLiteral();
}
bool IsUseStrictLiteral() {
return code_ == kUseStrictExpressionStatement;
}
- bool IsUseAsmLiteral() { return code_ == kUseAsmExpressionStatement; }
-
bool IsFunctionDeclaration() {
return code_ == kFunctionDeclaration;
}
@@ -432,12 +410,6 @@
bool IsJumpStatement() {
return code_ == kJumpStatement;
}
-
- // Dummy implementation for making statement->somefunc() work in both Parser
- // and PreParser.
- PreParserStatement* operator->() { return this; }
-
- PreParserStatementList statements() { return PreParserStatementList(); }
private:
enum Type {
@@ -445,13 +417,15 @@
kJumpStatement,
kStringLiteralExpressionStatement,
kUseStrictExpressionStatement,
- kUseAsmExpressionStatement,
kFunctionDeclaration
};
explicit PreParserStatement(Type code) : code_(code) {}
Type code_;
};
+
+
+typedef PreParserList<PreParserStatement> PreParserStatementList;
class PreParserFactory {
@@ -595,16 +569,6 @@
return PreParserExpression::Default();
}
- PreParserStatement NewEmptyStatement(int pos) {
- return PreParserStatement::Default();
- }
-
- PreParserStatement NewBlock(ZoneList<const AstRawString*>* labels,
- int capacity, bool ignore_completion_value,
- int pos) {
- return PreParserStatement::Default();
- }
-
// Return the object itself as AstVisitor and implement the needed
// dummy method right in this class.
PreParserFactory* visitor() { return this; }
@@ -626,17 +590,6 @@
class PreParser;
-
-class PreParserTarget {
- public:
- PreParserTarget(ParserBase<PreParser>* preparser,
- PreParserStatement statement) {}
-};
-
-class PreParserTargetScope {
- public:
- explicit PreParserTargetScope(ParserBase<PreParser>* preparser) {}
-};
template <>
struct ParserTypes<PreParser> {
@@ -654,15 +607,11 @@
typedef PreParserExpressionList ExpressionList;
typedef PreParserExpressionList PropertyList;
typedef PreParserFormalParameters FormalParameters;
- typedef PreParserStatement Statement;
typedef PreParserStatementList StatementList;
typedef PreParserStatement Block;
// For constructing objects returned by the traversing functions.
typedef PreParserFactory Factory;
-
- typedef PreParserTarget Target;
- typedef PreParserTargetScope TargetScope;
};
@@ -718,8 +667,7 @@
bool ok = true;
int start_position = scanner()->peek_location().beg_pos;
parsing_module_ = is_module;
- PreParserStatementList body;
- ParseStatementList(body, Token::EOS, &ok);
+ ParseStatementList(Token::EOS, &ok);
if (stack_overflow()) return kPreParseStackOverflow;
if (!ok) {
ReportUnexpectedToken(scanner()->current_token());
@@ -750,6 +698,8 @@
bool may_abort, int* use_counts);
private:
+ static const int kLazyParseTrialLimit = 200;
+
// These types form an algebra over syntactic categories that is just
// rich enough to let us recognize and propagate the constructs that
// are either being counted in the preparser data, or is important
@@ -759,38 +709,39 @@
// which is set to false if parsing failed; it is unchanged otherwise.
// By making the 'exception handling' explicit, we are forced to check
// for failure at the call sites.
+ Statement ParseStatementListItem(bool* ok);
+ V8_INLINE void ParseStatementList(int end_token, bool* ok) {
+ LazyParsingResult result = ParseStatementList(end_token, false, ok);
+ USE(result); // The result is just used in debug modes.
+ DCHECK_EQ(result, kLazyParsingComplete);
+ }
+ LazyParsingResult ParseStatementList(int end_token, bool may_abort, bool* ok);
+ Statement ParseStatement(AllowLabelledFunctionStatement allow_function,
+ bool* ok);
+ Statement ParseSubStatement(AllowLabelledFunctionStatement allow_function,
+ bool* ok);
Statement ParseScopedStatement(bool legacy, bool* ok);
- Statement ParseHoistableDeclaration(ZoneList<const AstRawString*>* names,
- bool default_export, bool* ok);
+ Statement ParseHoistableDeclaration(bool* ok);
Statement ParseHoistableDeclaration(int pos, ParseFunctionFlags flags,
- ZoneList<const AstRawString*>* names,
- bool default_export, bool* ok);
+ bool* ok);
Statement ParseFunctionDeclaration(bool* ok);
- Statement ParseAsyncFunctionDeclaration(ZoneList<const AstRawString*>* names,
- bool default_export, bool* ok);
+ Statement ParseAsyncFunctionDeclaration(bool* ok);
Expression ParseAsyncFunctionExpression(bool* ok);
- Statement ParseClassDeclaration(ZoneList<const AstRawString*>* names,
- bool default_export, bool* ok);
- Statement ParseBlock(ZoneList<const AstRawString*>* labels, bool* ok);
+ Statement ParseClassDeclaration(bool* ok);
+ Statement ParseBlock(bool* ok);
Statement ParseVariableStatement(VariableDeclarationContext var_context,
- ZoneList<const AstRawString*>* names,
bool* ok);
Statement ParseExpressionOrLabelledStatement(
- ZoneList<const AstRawString*>* names,
AllowLabelledFunctionStatement allow_function, bool* ok);
- Statement ParseIfStatement(ZoneList<const AstRawString*>* labels, bool* ok);
+ Statement ParseIfStatement(bool* ok);
Statement ParseContinueStatement(bool* ok);
- Statement ParseBreakStatement(ZoneList<const AstRawString*>* labels,
- bool* ok);
+ Statement ParseBreakStatement(bool* ok);
Statement ParseReturnStatement(bool* ok);
- Statement ParseWithStatement(ZoneList<const AstRawString*>* labels, bool* ok);
- Statement ParseSwitchStatement(ZoneList<const AstRawString*>* labels,
- bool* ok);
- Statement ParseDoWhileStatement(ZoneList<const AstRawString*>* labels,
- bool* ok);
- Statement ParseWhileStatement(ZoneList<const AstRawString*>* labels,
- bool* ok);
- Statement ParseForStatement(ZoneList<const AstRawString*>* labels, bool* ok);
+ Statement ParseWithStatement(bool* ok);
+ Statement ParseSwitchStatement(bool* ok);
+ Statement ParseDoWhileStatement(bool* ok);
+ Statement ParseWhileStatement(bool* ok);
+ Statement ParseForStatement(bool* ok);
Statement ParseThrowStatement(bool* ok);
Statement ParseTryStatement(bool* ok);
Statement ParseDebuggerStatement(bool* ok);
@@ -834,11 +785,6 @@
TemplateLiteralState* state, int start, PreParserExpression tag);
V8_INLINE void CheckConflictingVarDeclarations(Scope* scope, bool* ok) {}
- V8_INLINE void SetLanguageMode(Scope* scope, LanguageMode mode) {
- scope->SetLanguageMode(mode);
- }
- V8_INLINE void SetAsmModule() {}
-
V8_INLINE void MarkCollectedTailCallExpressions() {}
V8_INLINE void MarkTailPosition(PreParserExpression expression) {}
@@ -951,18 +897,6 @@
V8_INLINE static bool IsArrayIndex(PreParserIdentifier string,
uint32_t* index) {
return false;
- }
-
- V8_INLINE bool IsUseStrictDirective(PreParserStatement statement) const {
- return statement.IsUseStrictLiteral();
- }
-
- V8_INLINE bool IsUseAsmDirective(PreParserStatement statement) const {
- return statement.IsUseAsmLiteral();
- }
-
- V8_INLINE bool IsStringLiteral(PreParserStatement statement) const {
- return statement.IsStringLiteral();
}
V8_INLINE static PreParserExpression GetPropertyValue(
@@ -1076,28 +1010,11 @@
}
V8_INLINE static PreParserExpressionList NullExpressionList() {
- return PreParserExpressionList::Null();
- }
-
- V8_INLINE static bool IsNullExpressionList(PreParserExpressionList exprs) {
- return exprs.IsNull();
+ return PreParserExpressionList();
}
V8_INLINE static PreParserStatementList NullStatementList() {
- return PreParserStatementList::Null();
- }
-
- V8_INLINE static bool IsNullStatementList(PreParserStatementList stmts) {
- return stmts.IsNull();
- }
-
- V8_INLINE static PreParserStatement NullStatement() {
- return PreParserStatement::Default();
- }
-
- V8_INLINE bool IsNullOrEmptyStatement(PreParserStatement stmt) {
- // TODO(nikolaos): See if this needs to be consistent for the preparser.
- return false;
+ return PreParserStatementList();
}
V8_INLINE static PreParserStatement NullBlock() {
@@ -1269,19 +1186,18 @@
const PreParserFormalParameters& parameters, FunctionKind kind,
FunctionLiteral::FunctionType function_type, bool* ok) {
ParsingModeScope parsing_mode(this, PARSE_EAGERLY);
- PreParserStatementList result;
Scope* inner_scope = scope();
if (!parameters.is_simple) inner_scope = NewScope(BLOCK_SCOPE);
{
BlockState block_state(&scope_state_, inner_scope);
- ParseStatementList(result, Token::RBRACE, ok);
+ ParseStatementList(Token::RBRACE, ok);
if (!*ok) return PreParserStatementList();
}
Expect(Token::RBRACE, ok);
- return result;
+ return PreParserStatementList();
}
PreParserExpression PreParser::CloseTemplateLiteral(TemplateLiteralState* state,
« 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