Chromium Code Reviews| Index: src/parser.h |
| diff --git a/src/parser.h b/src/parser.h |
| index 8d557aed53eca468795303c536bbd17252890551..31d96cdbc2c913395e06e7f8cb1c8db56ee06006 100644 |
| --- a/src/parser.h |
| +++ b/src/parser.h |
| @@ -557,6 +557,8 @@ class ParserTraits { |
| typedef ObjectLiteral::Property* ObjectLiteralProperty; |
| typedef ZoneList<v8::internal::Expression*>* ExpressionList; |
| typedef ZoneList<ObjectLiteral::Property*>* PropertyList; |
| + typedef const v8::internal::AstRawString* FormalParameter; |
| + typedef Scope FormalParameterScope; |
| typedef ZoneList<v8::internal::Statement*>* StatementList; |
| // For constructing objects returned by the traversing functions. |
| @@ -694,7 +696,6 @@ class ParserTraits { |
| static Expression* EmptyExpression() { |
| return NULL; |
| } |
| - static Expression* EmptyArrowParamList() { return NULL; } |
| static Literal* EmptyLiteral() { |
| return NULL; |
| } |
| @@ -705,6 +706,7 @@ class ParserTraits { |
| static ZoneList<Expression*>* NullExpressionList() { |
| return NULL; |
| } |
| + static const AstRawString* EmptyFormalParameter() { return NULL; } |
| // Non-NULL empty string. |
| V8_INLINE const AstRawString* EmptyIdentifierString(); |
| @@ -743,11 +745,26 @@ class ParserTraits { |
| V8_INLINE Scope* NewScope(Scope* parent_scope, ScopeType scope_type, |
| FunctionKind kind = kNormalFunction); |
| - // Utility functions |
| - int DeclareArrowParametersFromExpression(Expression* expression, Scope* scope, |
| - Scanner::Location* undefined_loc, |
| - Scanner::Location* dupe_loc, |
| - bool* ok); |
| + bool DeclareFormalParameter(Scope* scope, const AstRawString* name, |
| + bool is_rest) { |
| + bool was_declared = scope->IsDeclared(name); |
| + Variable* var = scope->DeclareParameter(name, VAR, is_rest); |
|
marja
2015/04/21 08:01:50
As discussed offline: this does 2 Lookups; it's po
|
| + 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. |
| + var->set_maybe_assigned(); |
| + } |
| + return was_declared; |
| + } |
| + |
| + void DeclareArrowFunctionParameters(Scope* scope, Expression* expr, |
| + const Scanner::Location& params_loc, |
| + FormalParameterErrorLocations* error_locs, |
| + bool* ok); |
| + void ParseArrowFunctionFormalParameters( |
| + Scope* scope, Expression* params, const Scanner::Location& params_loc, |
| + FormalParameterErrorLocations* error_locs, bool* is_rest, bool* ok); |
| // Temporary glue; these functions will move to ParserBase. |
| Expression* ParseV8Intrinsic(bool* ok); |
| @@ -1045,8 +1062,6 @@ class Parser : public ParserBase<ParserTraits> { |
| ScriptCompiler::CompileOptions compile_options_; |
| ParseData* cached_parse_data_; |
| - bool parsing_lazy_arrow_parameters_; // for lazily parsed arrow functions. |
| - |
| PendingCompilationErrorHandler pending_error_handler_; |
| // Other information which will be stored in Parser and moved to Isolate after |