| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 51065568bac7855a841c4fc724ba1d60d5e633a1..98bf6f9507b387206cde8fb95211ba09f20a1126 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -752,10 +752,12 @@ FunctionLiteral* ParserTraits::ParseFunctionLiteral(
|
| bool is_generator,
|
| int function_token_position,
|
| FunctionLiteral::FunctionType type,
|
| + FunctionLiteral::ArityRestriction arity_restriction,
|
| bool* ok) {
|
| return parser_->ParseFunctionLiteral(name, function_name_location,
|
| name_is_strict_reserved, is_generator,
|
| - function_token_position, type, ok);
|
| + function_token_position, type,
|
| + arity_restriction, ok);
|
| }
|
|
|
|
|
| @@ -1016,6 +1018,7 @@ FunctionLiteral* Parser::ParseLazy(Utf16CharacterStream* source) {
|
| shared_info->is_generator(),
|
| RelocInfo::kNoPosition,
|
| function_type,
|
| + FunctionLiteral::NORMAL_ARITY,
|
| &ok);
|
| // Make sure the results agree.
|
| ASSERT(ok == (result != NULL));
|
| @@ -1865,6 +1868,7 @@ Statement* Parser::ParseFunctionDeclaration(ZoneStringList* names, bool* ok) {
|
| is_generator,
|
| pos,
|
| FunctionLiteral::DECLARATION,
|
| + FunctionLiteral::NORMAL_ARITY,
|
| CHECK_OK);
|
| // Even if we're not at the top-level of the global or a function
|
| // scope, we treat it as such and introduce the function with its
|
| @@ -3275,9 +3279,16 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
|
| bool is_generator,
|
| int function_token_pos,
|
| FunctionLiteral::FunctionType function_type,
|
| + FunctionLiteral::ArityRestriction arity_restriction,
|
| bool* ok) {
|
| // Function ::
|
| // '(' FormalParameterList? ')' '{' FunctionBody '}'
|
| + //
|
| + // Getter ::
|
| + // '(' ')' '{' FunctionBody '}'
|
| + //
|
| + // Setter ::
|
| + // '(' PropertySetParameterList ')' '{' FunctionBody '}'
|
|
|
| int pos = function_token_pos == RelocInfo::kNoPosition
|
| ? peek_position() : function_token_pos;
|
| @@ -3370,7 +3381,9 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
|
| Scanner::Location dupe_error_loc = Scanner::Location::invalid();
|
| Scanner::Location reserved_loc = Scanner::Location::invalid();
|
|
|
| - bool done = (peek() == Token::RPAREN);
|
| + bool done = arity_restriction == FunctionLiteral::GETTER_ARITY ||
|
| + (peek() == Token::RPAREN &&
|
| + arity_restriction != FunctionLiteral::SETTER_ARITY);
|
| while (!done) {
|
| bool is_strict_reserved = false;
|
| Handle<String> param_name =
|
| @@ -3395,6 +3408,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
|
| *ok = false;
|
| return NULL;
|
| }
|
| + if (arity_restriction == FunctionLiteral::SETTER_ARITY) break;
|
| done = (peek() == Token::RPAREN);
|
| if (!done) Expect(Token::COMMA, CHECK_OK);
|
| }
|
|
|