| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index dc5c7d6b5e4cb4bb7c96919282c9f10b3c25985f..f32e9177b5a9120905a287fb1fdac1891c3eb7a6 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -659,8 +659,8 @@ FunctionLiteral* Parser::DoParseProgram(Handle<String> source,
|
| 0,
|
| 0,
|
| source->length(),
|
| - false,
|
| - false);
|
| + FunctionLiteral::ANONYMOUS_EXPRESSION,
|
| + false); // Does not have duplicate parameters.
|
| } else if (stack_overflow_) {
|
| isolate()->StackOverflow();
|
| }
|
| @@ -729,12 +729,13 @@ FunctionLiteral* Parser::ParseLazy(CompilationInfo* info,
|
| top_scope_->EnableStrictMode();
|
| }
|
|
|
| - FunctionLiteralType type =
|
| - shared_info->is_expression() ? EXPRESSION : DECLARATION;
|
| - Handle<String> function_name =
|
| - shared_info->is_anonymous() ? Handle<String>::null() : name;
|
| + FunctionLiteral::Type type = shared_info->is_expression()
|
| + ? (shared_info->is_anonymous()
|
| + ? FunctionLiteral::ANONYMOUS_EXPRESSION
|
| + : FunctionLiteral::NAMED_EXPRESSION)
|
| + : FunctionLiteral::DECLARATION;
|
| bool ok = true;
|
| - result = ParseFunctionLiteral(function_name,
|
| + result = ParseFunctionLiteral(name,
|
| false, // Strict mode name already checked.
|
| RelocInfo::kNoPosition,
|
| type,
|
| @@ -1475,7 +1476,7 @@ Statement* Parser::ParseFunctionDeclaration(bool* ok) {
|
| FunctionLiteral* fun = ParseFunctionLiteral(name,
|
| is_strict_reserved,
|
| function_token_position,
|
| - DECLARATION,
|
| + FunctionLiteral::DECLARATION,
|
| CHECK_OK);
|
| // Even if we're not at the top-level of the global or a function
|
| // scope, we treat is as such and introduce the function with it's
|
| @@ -2846,10 +2847,13 @@ Expression* Parser::ParseMemberWithNewPrefixesExpression(PositionStack* stack,
|
| name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved_name,
|
| CHECK_OK);
|
| }
|
| + FunctionLiteral::Type type = name.is_null()
|
| + ? FunctionLiteral::ANONYMOUS_EXPRESSION
|
| + : FunctionLiteral::NAMED_EXPRESSION;
|
| result = ParseFunctionLiteral(name,
|
| is_strict_reserved_name,
|
| function_token_position,
|
| - EXPRESSION,
|
| + type,
|
| CHECK_OK);
|
| } else {
|
| result = ParsePrimaryExpression(CHECK_OK);
|
| @@ -3419,7 +3423,7 @@ ObjectLiteral::Property* Parser::ParseObjectLiteralGetSet(bool is_getter,
|
| ParseFunctionLiteral(name,
|
| false, // reserved words are allowed here
|
| RelocInfo::kNoPosition,
|
| - EXPRESSION,
|
| + FunctionLiteral::ANONYMOUS_EXPRESSION,
|
| CHECK_OK);
|
| // Allow any number of parameters for compatiabilty with JSC.
|
| // Specification only allows zero parameters for get and one for set.
|
| @@ -3629,7 +3633,7 @@ ZoneList<Expression*>* Parser::ParseArguments(bool* ok) {
|
| FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name,
|
| bool name_is_strict_reserved,
|
| int function_token_position,
|
| - FunctionLiteralType type,
|
| + FunctionLiteral::Type type,
|
| bool* ok) {
|
| // Function ::
|
| // '(' FormalParameterList? ')' '{' FunctionBody '}'
|
| @@ -3646,7 +3650,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name,
|
|
|
| int num_parameters = 0;
|
| // Function declarations are hoisted.
|
| - Scope* scope = (type == DECLARATION)
|
| + Scope* scope = (type == FunctionLiteral::DECLARATION)
|
| ? NewScope(top_scope_->DeclarationScope(), Scope::FUNCTION_SCOPE, false)
|
| : NewScope(top_scope_, Scope::FUNCTION_SCOPE, inside_with());
|
| ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(8);
|
| @@ -3709,7 +3713,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name,
|
| // NOTE: We create a proxy and resolve it here so that in the
|
| // future we can change the AST to only refer to VariableProxies
|
| // instead of Variables and Proxis as is the case now.
|
| - if (type == EXPRESSION && function_name->length() > 0) {
|
| + if (type == FunctionLiteral::NAMED_EXPRESSION) {
|
| Variable* fvar = top_scope_->DeclareFunctionVar(function_name);
|
| VariableProxy* fproxy =
|
| top_scope_->NewUnresolved(function_name, inside_with());
|
| @@ -3827,7 +3831,7 @@ FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name,
|
| num_parameters,
|
| start_pos,
|
| end_pos,
|
| - type == EXPRESSION,
|
| + type,
|
| has_duplicate_parameters);
|
| function_literal->set_function_token_position(function_token_position);
|
|
|
|
|