| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index d525252001bcb14748446510ef0689f96c7fefaa..303c5eefa6ad29f1dadbf44eee89edc0b60b1973 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -770,6 +770,7 @@ FunctionLiteral* Parser::ParseLazy(Utf16CharacterStream* source) {
|
| : FunctionLiteral::DECLARATION;
|
| bool ok = true;
|
| result = ParseFunctionLiteral(name,
|
| + Scanner::Location::invalid(),
|
| false, // Strict mode name already checked.
|
| shared_info->is_generator(),
|
| RelocInfo::kNoPosition,
|
| @@ -1679,6 +1680,7 @@ Statement* Parser::ParseFunctionDeclaration(ZoneStringList* names, bool* ok) {
|
| Handle<String> name = ParseIdentifierOrStrictReservedWord(
|
| &is_strict_reserved, CHECK_OK);
|
| FunctionLiteral* fun = ParseFunctionLiteral(name,
|
| + scanner().location(),
|
| is_strict_reserved,
|
| is_generator,
|
| pos,
|
| @@ -3251,7 +3253,7 @@ Expression* Parser::ParsePostfixExpression(bool* ok) {
|
|
|
| if (!top_scope_->is_classic_mode()) {
|
| // Postfix expression operand in strict mode may not be eval or arguments.
|
| - CheckStrictModeLValue(expression, "strict_lhs_prefix", CHECK_OK);
|
| + CheckStrictModeLValue(expression, "strict_lhs_postfix", CHECK_OK);
|
| }
|
| MarkAsLValue(expression);
|
|
|
| @@ -3400,14 +3402,17 @@ Expression* Parser::ParseMemberWithNewPrefixesExpression(PositionStack* stack,
|
| bool is_generator = allow_generators() && Check(Token::MUL);
|
| Handle<String> name;
|
| bool is_strict_reserved_name = false;
|
| + Scanner::Location function_name_location = Scanner::Location::invalid();
|
| if (peek_any_identifier()) {
|
| name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved_name,
|
| CHECK_OK);
|
| + function_name_location = scanner().location();
|
| }
|
| FunctionLiteral::FunctionType function_type = name.is_null()
|
| ? FunctionLiteral::ANONYMOUS_EXPRESSION
|
| : FunctionLiteral::NAMED_EXPRESSION;
|
| result = ParseFunctionLiteral(name,
|
| + function_name_location,
|
| is_strict_reserved_name,
|
| is_generator,
|
| function_token_position,
|
| @@ -3764,6 +3769,7 @@ Expression* Parser::ParseObjectLiteral(bool* ok) {
|
| : GetSymbol();
|
| FunctionLiteral* value =
|
| ParseFunctionLiteral(name,
|
| + scanner().location(),
|
| false, // reserved words are allowed here
|
| false, // not a generator
|
| RelocInfo::kNoPosition,
|
| @@ -4010,6 +4016,7 @@ class SingletonLogger : public ParserRecorder {
|
|
|
| FunctionLiteral* Parser::ParseFunctionLiteral(
|
| Handle<String> function_name,
|
| + Scanner::Location function_name_location,
|
| bool name_is_strict_reserved,
|
| bool is_generator,
|
| int function_token_pos,
|
| @@ -4295,12 +4302,9 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
|
| // Validate strict mode.
|
| if (!top_scope_->is_classic_mode()) {
|
| if (IsEvalOrArguments(function_name)) {
|
| - int start_pos = scope->start_position();
|
| - int position = function_token_pos != RelocInfo::kNoPosition
|
| - ? function_token_pos : (start_pos > 0 ? start_pos - 1 : start_pos);
|
| - Scanner::Location location = Scanner::Location(position, start_pos);
|
| - ReportMessageAt(location,
|
| - "strict_function_name", Vector<const char*>::empty());
|
| + ReportMessageAt(function_name_location,
|
| + "strict_function_name",
|
| + Vector<const char*>::empty());
|
| *ok = false;
|
| return NULL;
|
| }
|
|
|