Index: src/parsing/preparser.h |
diff --git a/src/parsing/preparser.h b/src/parsing/preparser.h |
index bb18f986718304430ae5f1e4820c132213ff587a..4d83c00e0b79e1e13f72fc7fceb641d8bbb5a370 100644 |
--- a/src/parsing/preparser.h |
+++ b/src/parsing/preparser.h |
@@ -18,7 +18,6 @@ |
namespace v8 { |
namespace internal { |
- |
class PreParserIdentifier { |
public: |
PreParserIdentifier() : type_(kUnknownIdentifier) {} |
@@ -588,15 +587,16 @@ class PreParser; |
template <> |
class ParserBaseTraits<PreParser> { |
public: |
- typedef ParserBaseTraits<PreParser> PreParserTraits; |
- |
struct Type { |
+ typedef ParserBase<PreParser> Base; |
+ typedef PreParser Impl; |
+ |
// PreParser doesn't need to store generator variables. |
typedef void GeneratorVariable; |
typedef int AstProperties; |
- typedef v8::internal::ExpressionClassifier<PreParserTraits> |
+ typedef v8::internal::ExpressionClassifier<ParserBaseTraits<PreParser>> |
ExpressionClassifier; |
// Return types for traversing functions. |
@@ -616,66 +616,6 @@ class ParserBaseTraits<PreParser> { |
// For constructing objects returned by the traversing functions. |
typedef PreParserFactory Factory; |
}; |
- |
- // TODO(nikolaos): The traits methods should not need to call methods |
- // of the implementation object. |
- PreParser* delegate() { return reinterpret_cast<PreParser*>(this); } |
- const PreParser* delegate() const { |
- return reinterpret_cast<const PreParser*>(this); |
- } |
- |
- // A dummy function, just useful as an argument to CHECK_OK_CUSTOM. |
- static void Void() {} |
- |
- void AddParameterInitializationBlock( |
- const PreParserFormalParameters& parameters, PreParserStatementList body, |
- bool is_async, bool* ok) {} |
- |
- void AddFormalParameter(PreParserFormalParameters* parameters, |
- PreParserExpression pattern, |
- PreParserExpression initializer, |
- int initializer_end_position, bool is_rest) { |
- ++parameters->arity; |
- } |
- |
- void DeclareFormalParameter(DeclarationScope* scope, |
- PreParserIdentifier parameter, |
- Type::ExpressionClassifier* classifier) { |
- if (!classifier->is_simple_parameter_list()) { |
- scope->SetHasNonSimpleParameters(); |
- } |
- } |
- |
- V8_INLINE void ParseArrowFunctionFormalParameterList( |
- PreParserFormalParameters* parameters, PreParserExpression params, |
- const Scanner::Location& params_loc, Scanner::Location* duplicate_loc, |
- const Scope::Snapshot& scope_snapshot, bool* ok); |
- |
- void ReindexLiterals(const PreParserFormalParameters& parameters) {} |
- |
- V8_INLINE PreParserExpression NoTemplateTag() { |
- return PreParserExpression::NoTemplateTag(); |
- } |
- V8_INLINE static bool IsTaggedTemplate(const PreParserExpression tag) { |
- return !tag.IsNoTemplateTag(); |
- } |
- |
- inline void MaterializeUnspreadArgumentsLiterals(int count); |
- |
- inline PreParserExpression ExpressionListToExpression( |
- PreParserExpressionList args) { |
- return PreParserExpression::Default(); |
- } |
- |
- void SetFunctionNameFromPropertyName(PreParserExpression property, |
- PreParserIdentifier name) {} |
- void SetFunctionNameFromIdentifierRef(PreParserExpression value, |
- PreParserExpression identifier) {} |
- |
- V8_INLINE ZoneList<typename Type::ExpressionClassifier::Error>* |
- GetReportedErrorList() const; |
- V8_INLINE Zone* zone() const; |
- V8_INLINE ZoneList<PreParserExpression>* GetNonPatternList() const; |
}; |
@@ -693,9 +633,7 @@ class ParserBaseTraits<PreParser> { |
// it is used) are generally omitted. |
class PreParser : public ParserBase<PreParser> { |
friend class ParserBase<PreParser>; |
- // TODO(nikolaos): This should not be necessary. It will be removed |
- // when the traits object stops delegating to the implementation object. |
- friend class ParserBaseTraits<PreParser>; |
+ friend class v8::internal::ExpressionClassifier<ParserBaseTraits<PreParser>>; |
public: |
typedef PreParserIdentifier Identifier; |
@@ -763,6 +701,9 @@ class PreParser : public ParserBase<PreParser> { |
Scanner::BookmarkScope* bookmark, |
int* use_counts); |
+ // A dummy function, just useful as an argument to CHECK_OK_CUSTOM. |
+ static void Void() {} |
+ |
private: |
static const int kLazyParseTrialLimit = 200; |
@@ -1139,18 +1080,75 @@ class PreParser : public ParserBase<PreParser> { |
return PreParserStatementList(); |
} |
+ V8_INLINE void AddParameterInitializationBlock( |
+ const PreParserFormalParameters& parameters, PreParserStatementList body, |
+ bool is_async, bool* ok) {} |
+ |
+ V8_INLINE void AddFormalParameter(PreParserFormalParameters* parameters, |
+ PreParserExpression pattern, |
+ PreParserExpression initializer, |
+ int initializer_end_position, |
+ bool is_rest) { |
+ ++parameters->arity; |
+ } |
+ |
+ V8_INLINE void DeclareFormalParameter( |
+ DeclarationScope* scope, PreParserIdentifier parameter, |
+ Type::ExpressionClassifier* classifier) { |
+ if (!classifier->is_simple_parameter_list()) { |
+ scope->SetHasNonSimpleParameters(); |
+ } |
+ } |
+ |
+ V8_INLINE void ParseArrowFunctionFormalParameterList( |
+ PreParserFormalParameters* parameters, PreParserExpression params, |
+ const Scanner::Location& params_loc, Scanner::Location* duplicate_loc, |
+ const Scope::Snapshot& scope_snapshot, bool* ok) { |
+ // TODO(wingo): Detect duplicated identifiers in paramlists. Detect |
+ // parameter |
+ // lists that are too long. |
+ } |
+ |
+ V8_INLINE void ReindexLiterals(const PreParserFormalParameters& parameters) {} |
+ |
+ V8_INLINE PreParserExpression NoTemplateTag() { |
+ return PreParserExpression::NoTemplateTag(); |
+ } |
+ |
+ V8_INLINE static bool IsTaggedTemplate(const PreParserExpression tag) { |
+ return !tag.IsNoTemplateTag(); |
+ } |
+ |
+ V8_INLINE void MaterializeUnspreadArgumentsLiterals(int count) { |
+ for (int i = 0; i < count; ++i) { |
+ function_state_->NextMaterializedLiteralIndex(); |
+ } |
+ } |
+ |
+ V8_INLINE PreParserExpression |
+ ExpressionListToExpression(PreParserExpressionList args) { |
+ return PreParserExpression::Default(); |
+ } |
+ |
+ V8_INLINE void SetFunctionNameFromPropertyName(PreParserExpression property, |
+ PreParserIdentifier name) {} |
+ V8_INLINE void SetFunctionNameFromIdentifierRef( |
+ PreParserExpression value, PreParserExpression identifier) {} |
+ |
+ V8_INLINE ZoneList<typename Type::ExpressionClassifier::Error>* |
+ GetReportedErrorList() const { |
+ return function_state_->GetReportedErrorList(); |
+ } |
+ |
+ V8_INLINE ZoneList<PreParserExpression>* GetNonPatternList() const { |
+ return function_state_->non_patterns_to_rewrite(); |
+ } |
+ |
// Preparser's private field members. |
int* use_counts_; |
}; |
-void ParserBaseTraits<PreParser>::MaterializeUnspreadArgumentsLiterals( |
- int count) { |
- for (int i = 0; i < count; ++i) { |
- delegate()->function_state_->NextMaterializedLiteralIndex(); |
- } |
-} |
- |
PreParserExpression PreParser::SpreadCall(PreParserExpression function, |
PreParserExpressionList args, |
int pos) { |
@@ -1163,29 +1161,6 @@ PreParserExpression PreParser::SpreadCallNew(PreParserExpression function, |
return factory()->NewCallNew(function, args, pos); |
} |
-void ParserBaseTraits<PreParser>::ParseArrowFunctionFormalParameterList( |
- PreParserFormalParameters* parameters, PreParserExpression params, |
- const Scanner::Location& params_loc, Scanner::Location* duplicate_loc, |
- const Scope::Snapshot& scope_snapshot, bool* ok) { |
- // TODO(wingo): Detect duplicated identifiers in paramlists. Detect parameter |
- // lists that are too long. |
-} |
- |
-ZoneList<PreParserExpression>* ParserBaseTraits<PreParser>::GetNonPatternList() |
- const { |
- return delegate()->function_state_->non_patterns_to_rewrite(); |
-} |
- |
-ZoneList< |
- typename ParserBaseTraits<PreParser>::Type::ExpressionClassifier::Error>* |
-ParserBaseTraits<PreParser>::GetReportedErrorList() const { |
- return delegate()->function_state_->GetReportedErrorList(); |
-} |
- |
-Zone* ParserBaseTraits<PreParser>::zone() const { |
- return delegate()->function_state_->scope()->zone(); |
-} |
- |
PreParserStatementList PreParser::ParseEagerFunctionBody( |
PreParserIdentifier function_name, int pos, |
const PreParserFormalParameters& parameters, FunctionKind kind, |