| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/ast.h" | 8 #include "src/ast.h" |
| 9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
| 10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 Expression* ParserTraits::MarkExpressionAsAssigned(Expression* expression) { | 407 Expression* ParserTraits::MarkExpressionAsAssigned(Expression* expression) { |
| 408 VariableProxy* proxy = | 408 VariableProxy* proxy = |
| 409 expression != NULL ? expression->AsVariableProxy() : NULL; | 409 expression != NULL ? expression->AsVariableProxy() : NULL; |
| 410 if (proxy != NULL) proxy->set_is_assigned(); | 410 if (proxy != NULL) proxy->set_is_assigned(); |
| 411 return expression; | 411 return expression; |
| 412 } | 412 } |
| 413 | 413 |
| 414 | 414 |
| 415 bool ParserTraits::ShortcutNumericLiteralBinaryExpression( | 415 bool ParserTraits::ShortcutNumericLiteralBinaryExpression( |
| 416 Expression** x, Expression* y, Token::Value op, int pos, | 416 Expression** x, Expression* y, Token::Value op, int pos, |
| 417 AstNodeFactory<AstConstructionVisitor>* factory) { | 417 AstNodeFactory* factory) { |
| 418 if ((*x)->AsLiteral() && (*x)->AsLiteral()->raw_value()->IsNumber() && | 418 if ((*x)->AsLiteral() && (*x)->AsLiteral()->raw_value()->IsNumber() && |
| 419 y->AsLiteral() && y->AsLiteral()->raw_value()->IsNumber()) { | 419 y->AsLiteral() && y->AsLiteral()->raw_value()->IsNumber()) { |
| 420 double x_val = (*x)->AsLiteral()->raw_value()->AsNumber(); | 420 double x_val = (*x)->AsLiteral()->raw_value()->AsNumber(); |
| 421 double y_val = y->AsLiteral()->raw_value()->AsNumber(); | 421 double y_val = y->AsLiteral()->raw_value()->AsNumber(); |
| 422 switch (op) { | 422 switch (op) { |
| 423 case Token::ADD: | 423 case Token::ADD: |
| 424 *x = factory->NewNumberLiteral(x_val + y_val, pos); | 424 *x = factory->NewNumberLiteral(x_val + y_val, pos); |
| 425 return true; | 425 return true; |
| 426 case Token::SUB: | 426 case Token::SUB: |
| 427 *x = factory->NewNumberLiteral(x_val - y_val, pos); | 427 *x = factory->NewNumberLiteral(x_val - y_val, pos); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 return true; | 465 return true; |
| 466 } | 466 } |
| 467 default: | 467 default: |
| 468 break; | 468 break; |
| 469 } | 469 } |
| 470 } | 470 } |
| 471 return false; | 471 return false; |
| 472 } | 472 } |
| 473 | 473 |
| 474 | 474 |
| 475 Expression* ParserTraits::BuildUnaryExpression( | 475 Expression* ParserTraits::BuildUnaryExpression(Expression* expression, |
| 476 Expression* expression, Token::Value op, int pos, | 476 Token::Value op, int pos, |
| 477 AstNodeFactory<AstConstructionVisitor>* factory) { | 477 AstNodeFactory* factory) { |
| 478 DCHECK(expression != NULL); | 478 DCHECK(expression != NULL); |
| 479 if (expression->IsLiteral()) { | 479 if (expression->IsLiteral()) { |
| 480 const AstValue* literal = expression->AsLiteral()->raw_value(); | 480 const AstValue* literal = expression->AsLiteral()->raw_value(); |
| 481 if (op == Token::NOT) { | 481 if (op == Token::NOT) { |
| 482 // Convert the literal to a boolean condition and negate it. | 482 // Convert the literal to a boolean condition and negate it. |
| 483 bool condition = literal->BooleanValue(); | 483 bool condition = literal->BooleanValue(); |
| 484 return factory->NewBooleanLiteral(!condition, pos); | 484 return factory->NewBooleanLiteral(!condition, pos); |
| 485 } else if (literal->IsNumber()) { | 485 } else if (literal->IsNumber()) { |
| 486 // Compute some expressions involving only number literals. | 486 // Compute some expressions involving only number literals. |
| 487 double value = literal->AsNumber(); | 487 double value = literal->AsNumber(); |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 DoubleToCString(double_value, Vector<char>(array, arraysize(array))); | 627 DoubleToCString(double_value, Vector<char>(array, arraysize(array))); |
| 628 return ast_value_factory()->GetOneByteString(string); | 628 return ast_value_factory()->GetOneByteString(string); |
| 629 } | 629 } |
| 630 | 630 |
| 631 | 631 |
| 632 const AstRawString* ParserTraits::GetNextSymbol(Scanner* scanner) { | 632 const AstRawString* ParserTraits::GetNextSymbol(Scanner* scanner) { |
| 633 return parser_->scanner()->NextSymbol(parser_->ast_value_factory()); | 633 return parser_->scanner()->NextSymbol(parser_->ast_value_factory()); |
| 634 } | 634 } |
| 635 | 635 |
| 636 | 636 |
| 637 Expression* ParserTraits::ThisExpression( | 637 Expression* ParserTraits::ThisExpression(Scope* scope, AstNodeFactory* factory, |
| 638 Scope* scope, AstNodeFactory<AstConstructionVisitor>* factory, int pos) { | 638 int pos) { |
| 639 return factory->NewVariableProxy(scope->receiver(), pos); | 639 return factory->NewVariableProxy(scope->receiver(), pos); |
| 640 } | 640 } |
| 641 | 641 |
| 642 Expression* ParserTraits::SuperReference( | 642 Expression* ParserTraits::SuperReference(Scope* scope, AstNodeFactory* factory, |
| 643 Scope* scope, AstNodeFactory<AstConstructionVisitor>* factory, int pos) { | 643 int pos) { |
| 644 return factory->NewSuperReference( | 644 return factory->NewSuperReference( |
| 645 ThisExpression(scope, factory, pos)->AsVariableProxy(), | 645 ThisExpression(scope, factory, pos)->AsVariableProxy(), |
| 646 pos); | 646 pos); |
| 647 } | 647 } |
| 648 | 648 |
| 649 Expression* ParserTraits::ClassExpression( | 649 Expression* ParserTraits::ClassExpression( |
| 650 const AstRawString* name, Expression* extends, Expression* constructor, | 650 const AstRawString* name, Expression* extends, Expression* constructor, |
| 651 ZoneList<ObjectLiteral::Property*>* properties, int start_position, | 651 ZoneList<ObjectLiteral::Property*>* properties, int start_position, |
| 652 int end_position, AstNodeFactory<AstConstructionVisitor>* factory) { | 652 int end_position, AstNodeFactory* factory) { |
| 653 return factory->NewClassLiteral(name, extends, constructor, properties, | 653 return factory->NewClassLiteral(name, extends, constructor, properties, |
| 654 start_position, end_position); | 654 start_position, end_position); |
| 655 } | 655 } |
| 656 | 656 |
| 657 Literal* ParserTraits::ExpressionFromLiteral( | 657 Literal* ParserTraits::ExpressionFromLiteral(Token::Value token, int pos, |
| 658 Token::Value token, int pos, | 658 Scanner* scanner, |
| 659 Scanner* scanner, | 659 AstNodeFactory* factory) { |
| 660 AstNodeFactory<AstConstructionVisitor>* factory) { | |
| 661 switch (token) { | 660 switch (token) { |
| 662 case Token::NULL_LITERAL: | 661 case Token::NULL_LITERAL: |
| 663 return factory->NewNullLiteral(pos); | 662 return factory->NewNullLiteral(pos); |
| 664 case Token::TRUE_LITERAL: | 663 case Token::TRUE_LITERAL: |
| 665 return factory->NewBooleanLiteral(true, pos); | 664 return factory->NewBooleanLiteral(true, pos); |
| 666 case Token::FALSE_LITERAL: | 665 case Token::FALSE_LITERAL: |
| 667 return factory->NewBooleanLiteral(false, pos); | 666 return factory->NewBooleanLiteral(false, pos); |
| 668 case Token::NUMBER: { | 667 case Token::NUMBER: { |
| 669 double value = scanner->DoubleValue(); | 668 double value = scanner->DoubleValue(); |
| 670 return factory->NewNumberLiteral(value, pos); | 669 return factory->NewNumberLiteral(value, pos); |
| 671 } | 670 } |
| 672 default: | 671 default: |
| 673 DCHECK(false); | 672 DCHECK(false); |
| 674 } | 673 } |
| 675 return NULL; | 674 return NULL; |
| 676 } | 675 } |
| 677 | 676 |
| 678 | 677 |
| 679 Expression* ParserTraits::ExpressionFromIdentifier( | 678 Expression* ParserTraits::ExpressionFromIdentifier(const AstRawString* name, |
| 680 const AstRawString* name, int pos, Scope* scope, | 679 int pos, Scope* scope, |
| 681 AstNodeFactory<AstConstructionVisitor>* factory) { | 680 AstNodeFactory* factory) { |
| 682 if (parser_->fni_ != NULL) parser_->fni_->PushVariableName(name); | 681 if (parser_->fni_ != NULL) parser_->fni_->PushVariableName(name); |
| 683 // The name may refer to a module instance object, so its type is unknown. | 682 // The name may refer to a module instance object, so its type is unknown. |
| 684 #ifdef DEBUG | 683 #ifdef DEBUG |
| 685 if (FLAG_print_interface_details) | 684 if (FLAG_print_interface_details) |
| 686 PrintF("# Variable %.*s ", name->length(), name->raw_data()); | 685 PrintF("# Variable %.*s ", name->length(), name->raw_data()); |
| 687 #endif | 686 #endif |
| 688 Interface* interface = Interface::NewUnknown(parser_->zone()); | 687 Interface* interface = Interface::NewUnknown(parser_->zone()); |
| 689 return scope->NewUnresolved(factory, name, interface, pos); | 688 return scope->NewUnresolved(factory, name, interface, pos); |
| 690 } | 689 } |
| 691 | 690 |
| 692 | 691 |
| 693 Expression* ParserTraits::ExpressionFromString( | 692 Expression* ParserTraits::ExpressionFromString(int pos, Scanner* scanner, |
| 694 int pos, Scanner* scanner, | 693 AstNodeFactory* factory) { |
| 695 AstNodeFactory<AstConstructionVisitor>* factory) { | |
| 696 const AstRawString* symbol = GetSymbol(scanner); | 694 const AstRawString* symbol = GetSymbol(scanner); |
| 697 if (parser_->fni_ != NULL) parser_->fni_->PushLiteralName(symbol); | 695 if (parser_->fni_ != NULL) parser_->fni_->PushLiteralName(symbol); |
| 698 return factory->NewStringLiteral(symbol, pos); | 696 return factory->NewStringLiteral(symbol, pos); |
| 699 } | 697 } |
| 700 | 698 |
| 701 | 699 |
| 702 Expression* ParserTraits::GetIterator( | 700 Expression* ParserTraits::GetIterator(Expression* iterable, |
| 703 Expression* iterable, AstNodeFactory<AstConstructionVisitor>* factory) { | 701 AstNodeFactory* factory) { |
| 704 Expression* iterator_symbol_literal = | 702 Expression* iterator_symbol_literal = |
| 705 factory->NewSymbolLiteral("symbolIterator", RelocInfo::kNoPosition); | 703 factory->NewSymbolLiteral("symbolIterator", RelocInfo::kNoPosition); |
| 706 int pos = iterable->position(); | 704 int pos = iterable->position(); |
| 707 Expression* prop = | 705 Expression* prop = |
| 708 factory->NewProperty(iterable, iterator_symbol_literal, pos); | 706 factory->NewProperty(iterable, iterator_symbol_literal, pos); |
| 709 Zone* zone = parser_->zone(); | 707 Zone* zone = parser_->zone(); |
| 710 ZoneList<Expression*>* args = new (zone) ZoneList<Expression*>(0, zone); | 708 ZoneList<Expression*>* args = new (zone) ZoneList<Expression*>(0, zone); |
| 711 return factory->NewCall(prop, args, pos); | 709 return factory->NewCall(prop, args, pos); |
| 712 } | 710 } |
| 713 | 711 |
| 714 | 712 |
| 715 Literal* ParserTraits::GetLiteralTheHole( | 713 Literal* ParserTraits::GetLiteralTheHole(int position, |
| 716 int position, AstNodeFactory<AstConstructionVisitor>* factory) { | 714 AstNodeFactory* factory) { |
| 717 return factory->NewTheHoleLiteral(RelocInfo::kNoPosition); | 715 return factory->NewTheHoleLiteral(RelocInfo::kNoPosition); |
| 718 } | 716 } |
| 719 | 717 |
| 720 | 718 |
| 721 Expression* ParserTraits::ParseV8Intrinsic(bool* ok) { | 719 Expression* ParserTraits::ParseV8Intrinsic(bool* ok) { |
| 722 return parser_->ParseV8Intrinsic(ok); | 720 return parser_->ParseV8Intrinsic(ok); |
| 723 } | 721 } |
| 724 | 722 |
| 725 | 723 |
| 726 FunctionLiteral* ParserTraits::ParseFunctionLiteral( | 724 FunctionLiteral* ParserTraits::ParseFunctionLiteral( |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 870 | 868 |
| 871 // Compute the parsing mode. | 869 // Compute the parsing mode. |
| 872 Mode mode = (FLAG_lazy && allow_lazy()) ? PARSE_LAZILY : PARSE_EAGERLY; | 870 Mode mode = (FLAG_lazy && allow_lazy()) ? PARSE_LAZILY : PARSE_EAGERLY; |
| 873 if (allow_natives_syntax() || extension_ != NULL || | 871 if (allow_natives_syntax() || extension_ != NULL || |
| 874 (*scope)->is_eval_scope()) { | 872 (*scope)->is_eval_scope()) { |
| 875 mode = PARSE_EAGERLY; | 873 mode = PARSE_EAGERLY; |
| 876 } | 874 } |
| 877 ParsingModeScope parsing_mode(this, mode); | 875 ParsingModeScope parsing_mode(this, mode); |
| 878 | 876 |
| 879 // Enters 'scope'. | 877 // Enters 'scope'. |
| 880 AstNodeFactory<AstConstructionVisitor> function_factory( | 878 AstNodeFactory function_factory(ast_value_factory()); |
| 881 ast_value_factory()); | |
| 882 FunctionState function_state(&function_state_, &scope_, *scope, | 879 FunctionState function_state(&function_state_, &scope_, *scope, |
| 883 &function_factory); | 880 &function_factory); |
| 884 | 881 |
| 885 scope_->SetStrictMode(info->strict_mode()); | 882 scope_->SetStrictMode(info->strict_mode()); |
| 886 ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone()); | 883 ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone()); |
| 887 bool ok = true; | 884 bool ok = true; |
| 888 int beg_pos = scanner()->location().beg_pos; | 885 int beg_pos = scanner()->location().beg_pos; |
| 889 ParseSourceElements(body, Token::EOS, info->is_eval(), true, eval_scope, | 886 ParseSourceElements(body, Token::EOS, info->is_eval(), true, eval_scope, |
| 890 &ok); | 887 &ok); |
| 891 | 888 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 909 | 906 |
| 910 if (ok) { | 907 if (ok) { |
| 911 result = factory()->NewFunctionLiteral( | 908 result = factory()->NewFunctionLiteral( |
| 912 ast_value_factory()->empty_string(), ast_value_factory(), scope_, | 909 ast_value_factory()->empty_string(), ast_value_factory(), scope_, |
| 913 body, function_state.materialized_literal_count(), | 910 body, function_state.materialized_literal_count(), |
| 914 function_state.expected_property_count(), | 911 function_state.expected_property_count(), |
| 915 function_state.handler_count(), 0, | 912 function_state.handler_count(), 0, |
| 916 FunctionLiteral::kNoDuplicateParameters, | 913 FunctionLiteral::kNoDuplicateParameters, |
| 917 FunctionLiteral::ANONYMOUS_EXPRESSION, FunctionLiteral::kGlobalOrEval, | 914 FunctionLiteral::ANONYMOUS_EXPRESSION, FunctionLiteral::kGlobalOrEval, |
| 918 FunctionLiteral::kNotParenthesized, FunctionKind::kNormalFunction, 0); | 915 FunctionLiteral::kNotParenthesized, FunctionKind::kNormalFunction, 0); |
| 919 result->set_ast_properties(factory()->visitor()->ast_properties()); | |
| 920 result->set_dont_optimize_reason( | |
| 921 factory()->visitor()->dont_optimize_reason()); | |
| 922 } | 916 } |
| 923 } | 917 } |
| 924 | 918 |
| 925 // Make sure the target stack is empty. | 919 // Make sure the target stack is empty. |
| 926 DCHECK(target_stack_ == NULL); | 920 DCHECK(target_stack_ == NULL); |
| 927 | 921 |
| 928 return result; | 922 return result; |
| 929 } | 923 } |
| 930 | 924 |
| 931 | 925 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 985 | 979 |
| 986 { | 980 { |
| 987 // Parse the function literal. | 981 // Parse the function literal. |
| 988 Scope* scope = NewScope(scope_, GLOBAL_SCOPE); | 982 Scope* scope = NewScope(scope_, GLOBAL_SCOPE); |
| 989 info()->SetGlobalScope(scope); | 983 info()->SetGlobalScope(scope); |
| 990 if (!info()->closure().is_null()) { | 984 if (!info()->closure().is_null()) { |
| 991 scope = Scope::DeserializeScopeChain(info()->closure()->context(), scope, | 985 scope = Scope::DeserializeScopeChain(info()->closure()->context(), scope, |
| 992 zone()); | 986 zone()); |
| 993 } | 987 } |
| 994 original_scope_ = scope; | 988 original_scope_ = scope; |
| 995 AstNodeFactory<AstConstructionVisitor> function_factory( | 989 AstNodeFactory function_factory(ast_value_factory()); |
| 996 ast_value_factory()); | |
| 997 FunctionState function_state(&function_state_, &scope_, scope, | 990 FunctionState function_state(&function_state_, &scope_, scope, |
| 998 &function_factory); | 991 &function_factory); |
| 999 DCHECK(scope->strict_mode() == SLOPPY || info()->strict_mode() == STRICT); | 992 DCHECK(scope->strict_mode() == SLOPPY || info()->strict_mode() == STRICT); |
| 1000 DCHECK(info()->strict_mode() == shared_info->strict_mode()); | 993 DCHECK(info()->strict_mode() == shared_info->strict_mode()); |
| 1001 scope->SetStrictMode(shared_info->strict_mode()); | 994 scope->SetStrictMode(shared_info->strict_mode()); |
| 1002 FunctionLiteral::FunctionType function_type = shared_info->is_expression() | 995 FunctionLiteral::FunctionType function_type = shared_info->is_expression() |
| 1003 ? (shared_info->is_anonymous() | 996 ? (shared_info->is_anonymous() |
| 1004 ? FunctionLiteral::ANONYMOUS_EXPRESSION | 997 ? FunctionLiteral::ANONYMOUS_EXPRESSION |
| 1005 : FunctionLiteral::NAMED_EXPRESSION) | 998 : FunctionLiteral::NAMED_EXPRESSION) |
| 1006 : FunctionLiteral::DECLARATION; | 999 : FunctionLiteral::DECLARATION; |
| (...skipping 2476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3483 : NewScope(scope_, FUNCTION_SCOPE); | 3476 : NewScope(scope_, FUNCTION_SCOPE); |
| 3484 ZoneList<Statement*>* body = NULL; | 3477 ZoneList<Statement*>* body = NULL; |
| 3485 int materialized_literal_count = -1; | 3478 int materialized_literal_count = -1; |
| 3486 int expected_property_count = -1; | 3479 int expected_property_count = -1; |
| 3487 int handler_count = 0; | 3480 int handler_count = 0; |
| 3488 FunctionLiteral::ParameterFlag duplicate_parameters = | 3481 FunctionLiteral::ParameterFlag duplicate_parameters = |
| 3489 FunctionLiteral::kNoDuplicateParameters; | 3482 FunctionLiteral::kNoDuplicateParameters; |
| 3490 FunctionLiteral::IsParenthesizedFlag parenthesized = parenthesized_function_ | 3483 FunctionLiteral::IsParenthesizedFlag parenthesized = parenthesized_function_ |
| 3491 ? FunctionLiteral::kIsParenthesized | 3484 ? FunctionLiteral::kIsParenthesized |
| 3492 : FunctionLiteral::kNotParenthesized; | 3485 : FunctionLiteral::kNotParenthesized; |
| 3493 AstProperties ast_properties; | |
| 3494 BailoutReason dont_optimize_reason = kNoReason; | |
| 3495 // Parse function body. | 3486 // Parse function body. |
| 3496 { | 3487 { |
| 3497 AstNodeFactory<AstConstructionVisitor> function_factory( | 3488 AstNodeFactory function_factory(ast_value_factory()); |
| 3498 ast_value_factory()); | |
| 3499 FunctionState function_state(&function_state_, &scope_, scope, | 3489 FunctionState function_state(&function_state_, &scope_, scope, |
| 3500 &function_factory); | 3490 &function_factory); |
| 3501 scope_->SetScopeName(function_name); | 3491 scope_->SetScopeName(function_name); |
| 3502 | 3492 |
| 3503 if (is_generator) { | 3493 if (is_generator) { |
| 3504 // For generators, allocating variables in contexts is currently a win | 3494 // For generators, allocating variables in contexts is currently a win |
| 3505 // because it minimizes the work needed to suspend and resume an | 3495 // because it minimizes the work needed to suspend and resume an |
| 3506 // activation. | 3496 // activation. |
| 3507 scope_->ForceContextAllocation(); | 3497 scope_->ForceContextAllocation(); |
| 3508 | 3498 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3652 eval_args_error_log, | 3642 eval_args_error_log, |
| 3653 dupe_error_loc, | 3643 dupe_error_loc, |
| 3654 reserved_loc, | 3644 reserved_loc, |
| 3655 CHECK_OK); | 3645 CHECK_OK); |
| 3656 } | 3646 } |
| 3657 if (strict_mode() == STRICT) { | 3647 if (strict_mode() == STRICT) { |
| 3658 CheckOctalLiteral(scope->start_position(), | 3648 CheckOctalLiteral(scope->start_position(), |
| 3659 scope->end_position(), | 3649 scope->end_position(), |
| 3660 CHECK_OK); | 3650 CHECK_OK); |
| 3661 } | 3651 } |
| 3662 ast_properties = *factory()->visitor()->ast_properties(); | |
| 3663 dont_optimize_reason = factory()->visitor()->dont_optimize_reason(); | |
| 3664 | |
| 3665 if (allow_harmony_scoping() && strict_mode() == STRICT) { | 3652 if (allow_harmony_scoping() && strict_mode() == STRICT) { |
| 3666 CheckConflictingVarDeclarations(scope, CHECK_OK); | 3653 CheckConflictingVarDeclarations(scope, CHECK_OK); |
| 3667 } | 3654 } |
| 3668 } | 3655 } |
| 3669 | 3656 |
| 3670 FunctionLiteral* function_literal = factory()->NewFunctionLiteral( | 3657 FunctionLiteral* function_literal = factory()->NewFunctionLiteral( |
| 3671 function_name, ast_value_factory(), scope, body, | 3658 function_name, ast_value_factory(), scope, body, |
| 3672 materialized_literal_count, expected_property_count, handler_count, | 3659 materialized_literal_count, expected_property_count, handler_count, |
| 3673 num_parameters, duplicate_parameters, function_type, | 3660 num_parameters, duplicate_parameters, function_type, |
| 3674 FunctionLiteral::kIsFunction, parenthesized, kind, pos); | 3661 FunctionLiteral::kIsFunction, parenthesized, kind, pos); |
| 3675 function_literal->set_function_token_position(function_token_pos); | 3662 function_literal->set_function_token_position(function_token_pos); |
| 3676 function_literal->set_ast_properties(&ast_properties); | |
| 3677 function_literal->set_dont_optimize_reason(dont_optimize_reason); | |
| 3678 | 3663 |
| 3679 if (fni_ != NULL && should_infer_name) fni_->AddFunction(function_literal); | 3664 if (fni_ != NULL && should_infer_name) fni_->AddFunction(function_literal); |
| 3680 return function_literal; | 3665 return function_literal; |
| 3681 } | 3666 } |
| 3682 | 3667 |
| 3683 | 3668 |
| 3684 void Parser::SkipLazyFunctionBody(const AstRawString* function_name, | 3669 void Parser::SkipLazyFunctionBody(const AstRawString* function_name, |
| 3685 int* materialized_literal_count, | 3670 int* materialized_literal_count, |
| 3686 int* expected_property_count, | 3671 int* expected_property_count, |
| 3687 bool* ok) { | 3672 bool* ok) { |
| (...skipping 1262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4950 | 4935 |
| 4951 // We cannot internalize on a background thread; a foreground task will take | 4936 // We cannot internalize on a background thread; a foreground task will take |
| 4952 // care of calling Parser::Internalize just before compilation. | 4937 // care of calling Parser::Internalize just before compilation. |
| 4953 | 4938 |
| 4954 if (compile_options() == ScriptCompiler::kProduceParserCache) { | 4939 if (compile_options() == ScriptCompiler::kProduceParserCache) { |
| 4955 if (result != NULL) *info_->cached_data() = recorder.GetScriptData(); | 4940 if (result != NULL) *info_->cached_data() = recorder.GetScriptData(); |
| 4956 log_ = NULL; | 4941 log_ = NULL; |
| 4957 } | 4942 } |
| 4958 } | 4943 } |
| 4959 } } // namespace v8::internal | 4944 } } // namespace v8::internal |
| OLD | NEW |