Index: src/parser.h |
diff --git a/src/parser.h b/src/parser.h |
index 103bafea3341595f4d08ef58d425567ce037da99..39d0d9278b132fd4dfc5a9ebd104661f1f846205 100644 |
--- a/src/parser.h |
+++ b/src/parser.h |
@@ -538,27 +538,6 @@ |
class Parser; |
class SingletonLogger; |
- |
-struct ParserFormalParameterParsingState |
- : public PreParserFormalParameterParsingState { |
- struct Parameter { |
- Parameter(Variable* var, Expression* pattern) |
- : var(var), pattern(pattern) {} |
- Variable* var; |
- Expression* pattern; |
- }; |
- |
- explicit ParserFormalParameterParsingState(Scope* scope) |
- : PreParserFormalParameterParsingState(scope), params(4, scope->zone()) {} |
- |
- ZoneList<Parameter> params; |
- |
- void AddParameter(Variable* var, Expression* pattern) { |
- params.Add(Parameter(var, pattern), scope->zone()); |
- } |
-}; |
- |
- |
class ParserTraits { |
public: |
struct Type { |
@@ -581,7 +560,7 @@ |
typedef ZoneList<v8::internal::Expression*>* ExpressionList; |
typedef ZoneList<ObjectLiteral::Property*>* PropertyList; |
typedef const v8::internal::AstRawString* FormalParameter; |
- typedef ParserFormalParameterParsingState FormalParameterParsingState; |
+ typedef Scope FormalParameterScope; |
typedef ZoneList<v8::internal::Statement*>* StatementList; |
// For constructing objects returned by the traversing functions. |
@@ -772,21 +751,17 @@ |
ZoneList<v8::internal::Statement*>* NewStatementList(int size, Zone* zone) { |
return new(zone) ZoneList<v8::internal::Statement*>(size, zone); |
} |
- |
- V8_INLINE void AddParameterInitializationBlock( |
- const ParserFormalParameterParsingState& formal_parameters, |
- ZoneList<v8::internal::Statement*>* body, bool* ok); |
- |
V8_INLINE Scope* NewScope(Scope* parent_scope, ScopeType scope_type, |
FunctionKind kind = kNormalFunction); |
- V8_INLINE void DeclareFormalParameter( |
- ParserFormalParameterParsingState* parsing_state, Expression* name, |
- ExpressionClassifier* classifier, bool is_rest); |
- void ParseArrowFunctionFormalParameters( |
- ParserFormalParameterParsingState* scope, Expression* params, |
- const Scanner::Location& params_loc, Scanner::Location* duplicate_loc, |
- bool* ok); |
+ V8_INLINE void DeclareFormalParameter(Scope* scope, Expression* name, |
+ ExpressionClassifier* classifier, |
+ bool is_rest); |
+ void ParseArrowFunctionFormalParameters(Scope* scope, Expression* params, |
+ const Scanner::Location& params_loc, |
+ bool* has_rest, |
+ Scanner::Location* duplicate_loc, |
+ bool* ok); |
// Temporary glue; these functions will move to ParserBase. |
Expression* ParseV8Intrinsic(bool* ok); |
@@ -799,9 +774,8 @@ |
int* materialized_literal_count, int* expected_property_count, bool* ok, |
Scanner::BookmarkScope* bookmark = nullptr); |
V8_INLINE ZoneList<Statement*>* ParseEagerFunctionBody( |
- const AstRawString* name, int pos, |
- const ParserFormalParameterParsingState& formal_parameters, |
- Variable* fvar, Token::Value fvar_init_op, FunctionKind kind, bool* ok); |
+ const AstRawString* name, int pos, Variable* fvar, |
+ Token::Value fvar_init_op, FunctionKind kind, bool* ok); |
ClassLiteral* ParseClassLiteral(const AstRawString* name, |
Scanner::Location class_name_location, |
@@ -962,7 +936,6 @@ |
bool* ok); |
struct DeclarationDescriptor { |
- enum Kind { NORMAL, PARAMETER }; |
Parser* parser; |
Scope* declaration_scope; |
Scope* scope; |
@@ -972,7 +945,6 @@ |
int declaration_pos; |
int initialization_pos; |
Token::Value init_op; |
- Kind declaration_kind; |
}; |
struct DeclarationParsingResult { |
@@ -1123,9 +1095,7 @@ |
// Parser support |
VariableProxy* NewUnresolved(const AstRawString* name, VariableMode mode); |
- Variable* Declare(Declaration* declaration, |
- DeclarationDescriptor::Kind declaration_kind, bool resolve, |
- bool* ok); |
+ Variable* Declare(Declaration* declaration, bool resolve, bool* ok); |
bool TargetStackContainsLabel(const AstRawString* label); |
BreakableStatement* LookupBreakTarget(const AstRawString* label, bool* ok); |
@@ -1151,14 +1121,10 @@ |
PreParser::PreParseResult ParseLazyFunctionBodyWithPreParser( |
SingletonLogger* logger, Scanner::BookmarkScope* bookmark = nullptr); |
- Block* BuildParameterInitializationBlock( |
- const ParserFormalParameterParsingState& formal_parameters, bool* ok); |
- |
// Consumes the ending }. |
ZoneList<Statement*>* ParseEagerFunctionBody( |
- const AstRawString* function_name, int pos, |
- const ParserFormalParameterParsingState& formal_parameters, |
- Variable* fvar, Token::Value fvar_init_op, FunctionKind kind, bool* ok); |
+ const AstRawString* function_name, int pos, Variable* fvar, |
+ Token::Value fvar_init_op, FunctionKind kind, bool* ok); |
void ThrowPendingError(Isolate* isolate, Handle<Script> script); |
@@ -1222,11 +1188,10 @@ |
ZoneList<Statement*>* ParserTraits::ParseEagerFunctionBody( |
- const AstRawString* name, int pos, |
- const ParserFormalParameterParsingState& formal_parameters, Variable* fvar, |
+ const AstRawString* name, int pos, Variable* fvar, |
Token::Value fvar_init_op, FunctionKind kind, bool* ok) { |
- return parser_->ParseEagerFunctionBody(name, pos, formal_parameters, fvar, |
- fvar_init_op, kind, ok); |
+ return parser_->ParseEagerFunctionBody(name, pos, fvar, fvar_init_op, kind, |
+ ok); |
} |
void ParserTraits::CheckConflictingVarDeclarations(v8::internal::Scope* scope, |
@@ -1305,20 +1270,18 @@ |
} |
-void ParserTraits::DeclareFormalParameter( |
- ParserFormalParameterParsingState* parsing_state, Expression* pattern, |
- ExpressionClassifier* classifier, bool is_rest) { |
+void ParserTraits::DeclareFormalParameter(Scope* scope, Expression* pattern, |
+ ExpressionClassifier* classifier, |
+ bool is_rest) { |
bool is_duplicate = false; |
- bool is_simple_name = pattern->IsVariableProxy(); |
- DCHECK(parser_->allow_harmony_destructuring() || is_simple_name); |
- |
- const AstRawString* name = is_simple_name |
- ? pattern->AsVariableProxy()->raw_name() |
- : parser_->ast_value_factory()->empty_string(); |
- Variable* var = |
- parsing_state->scope->DeclareParameter(name, VAR, is_rest, &is_duplicate); |
- parsing_state->AddParameter(var, is_simple_name ? nullptr : pattern); |
- if (is_sloppy(parsing_state->scope->language_mode())) { |
+ if (!pattern->IsVariableProxy()) { |
+ // TODO(dslomov): implement. |
+ DCHECK(parser_->allow_harmony_destructuring()); |
+ return; |
+ } |
+ auto name = pattern->AsVariableProxy()->raw_name(); |
+ Variable* var = scope->DeclareParameter(name, VAR, is_rest, &is_duplicate); |
+ if (is_sloppy(scope->language_mode())) { |
// TODO(sigurds) Mark every parameter as maybe assigned. This is a |
// conservative approximation necessary to account for parameters |
// that are assigned via the arguments array. |
@@ -1329,18 +1292,6 @@ |
parser_->scanner()->location()); |
} |
} |
- |
- |
-void ParserTraits::AddParameterInitializationBlock( |
- const ParserFormalParameterParsingState& formal_parameters, |
- ZoneList<v8::internal::Statement*>* body, bool* ok) { |
- auto* init_block = |
- parser_->BuildParameterInitializationBlock(formal_parameters, ok); |
- if (!*ok) return; |
- if (init_block != nullptr) { |
- body->Add(init_block, parser_->zone()); |
- } |
-} |
} } // namespace v8::internal |
#endif // V8_PARSER_H_ |