| 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/base/platform/platform.h" | 9 #include "src/base/platform/platform.h" |
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
| (...skipping 706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 return factory->NewTheHoleLiteral(RelocInfo::kNoPosition); | 717 return factory->NewTheHoleLiteral(RelocInfo::kNoPosition); |
| 718 } | 718 } |
| 719 | 719 |
| 720 | 720 |
| 721 Expression* ParserTraits::ParseV8Intrinsic(bool* ok) { | 721 Expression* ParserTraits::ParseV8Intrinsic(bool* ok) { |
| 722 return parser_->ParseV8Intrinsic(ok); | 722 return parser_->ParseV8Intrinsic(ok); |
| 723 } | 723 } |
| 724 | 724 |
| 725 | 725 |
| 726 FunctionLiteral* ParserTraits::ParseFunctionLiteral( | 726 FunctionLiteral* ParserTraits::ParseFunctionLiteral( |
| 727 const AstRawString* name, | 727 const AstRawString* name, Scanner::Location function_name_location, |
| 728 Scanner::Location function_name_location, | 728 bool name_is_strict_reserved, FunctionKind kind, |
| 729 bool name_is_strict_reserved, | 729 int function_token_position, FunctionLiteral::FunctionType type, |
| 730 bool is_generator, | 730 FunctionLiteral::ArityRestriction arity_restriction, bool* ok) { |
| 731 int function_token_position, | 731 return parser_->ParseFunctionLiteral( |
| 732 FunctionLiteral::FunctionType type, | 732 name, function_name_location, name_is_strict_reserved, kind, |
| 733 FunctionLiteral::ArityRestriction arity_restriction, | 733 function_token_position, type, arity_restriction, ok); |
| 734 bool* ok) { | |
| 735 return parser_->ParseFunctionLiteral(name, function_name_location, | |
| 736 name_is_strict_reserved, is_generator, | |
| 737 function_token_position, type, | |
| 738 arity_restriction, ok); | |
| 739 } | 734 } |
| 740 | 735 |
| 741 | 736 |
| 742 Parser::Parser(CompilationInfo* info, ParseInfo* parse_info) | 737 Parser::Parser(CompilationInfo* info, ParseInfo* parse_info) |
| 743 : ParserBase<ParserTraits>(&scanner_, parse_info->stack_limit, | 738 : ParserBase<ParserTraits>(&scanner_, parse_info->stack_limit, |
| 744 info->extension(), NULL, info->zone(), | 739 info->extension(), NULL, info->zone(), |
| 745 info->ast_node_id_gen(), this), | 740 info->ast_node_id_gen(), this), |
| 746 isolate_(info->isolate()), | 741 isolate_(info->isolate()), |
| 747 script_(info->script()), | 742 script_(info->script()), |
| 748 scanner_(parse_info->unicode_cache), | 743 scanner_(parse_info->unicode_cache), |
| (...skipping 11 matching lines...) Expand all Loading... |
| 760 pre_parse_timer_(NULL) { | 755 pre_parse_timer_(NULL) { |
| 761 DCHECK(!script_.is_null()); | 756 DCHECK(!script_.is_null()); |
| 762 set_allow_harmony_scoping(!info->is_native() && FLAG_harmony_scoping); | 757 set_allow_harmony_scoping(!info->is_native() && FLAG_harmony_scoping); |
| 763 set_allow_modules(!info->is_native() && FLAG_harmony_modules); | 758 set_allow_modules(!info->is_native() && FLAG_harmony_modules); |
| 764 set_allow_natives_syntax(FLAG_allow_natives_syntax || info->is_native()); | 759 set_allow_natives_syntax(FLAG_allow_natives_syntax || info->is_native()); |
| 765 set_allow_lazy(false); // Must be explicitly enabled. | 760 set_allow_lazy(false); // Must be explicitly enabled. |
| 766 set_allow_generators(FLAG_harmony_generators); | 761 set_allow_generators(FLAG_harmony_generators); |
| 767 set_allow_arrow_functions(FLAG_harmony_arrow_functions); | 762 set_allow_arrow_functions(FLAG_harmony_arrow_functions); |
| 768 set_allow_harmony_numeric_literals(FLAG_harmony_numeric_literals); | 763 set_allow_harmony_numeric_literals(FLAG_harmony_numeric_literals); |
| 769 set_allow_classes(FLAG_harmony_classes); | 764 set_allow_classes(FLAG_harmony_classes); |
| 765 set_allow_harmony_object_literals(FLAG_harmony_object_literals); |
| 770 for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount; | 766 for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount; |
| 771 ++feature) { | 767 ++feature) { |
| 772 use_counts_[feature] = 0; | 768 use_counts_[feature] = 0; |
| 773 } | 769 } |
| 774 if (ast_value_factory_ == NULL) { | 770 if (ast_value_factory_ == NULL) { |
| 775 ast_value_factory_ = new AstValueFactory(zone(), parse_info->hash_seed); | 771 ast_value_factory_ = new AstValueFactory(zone(), parse_info->hash_seed); |
| 776 } | 772 } |
| 777 } | 773 } |
| 778 | 774 |
| 779 | 775 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 904 } | 900 } |
| 905 | 901 |
| 906 if (ok) { | 902 if (ok) { |
| 907 result = factory()->NewFunctionLiteral( | 903 result = factory()->NewFunctionLiteral( |
| 908 ast_value_factory_->empty_string(), ast_value_factory_, scope_, body, | 904 ast_value_factory_->empty_string(), ast_value_factory_, scope_, body, |
| 909 function_state.materialized_literal_count(), | 905 function_state.materialized_literal_count(), |
| 910 function_state.expected_property_count(), | 906 function_state.expected_property_count(), |
| 911 function_state.handler_count(), 0, | 907 function_state.handler_count(), 0, |
| 912 FunctionLiteral::kNoDuplicateParameters, | 908 FunctionLiteral::kNoDuplicateParameters, |
| 913 FunctionLiteral::ANONYMOUS_EXPRESSION, FunctionLiteral::kGlobalOrEval, | 909 FunctionLiteral::ANONYMOUS_EXPRESSION, FunctionLiteral::kGlobalOrEval, |
| 914 FunctionLiteral::kNotParenthesized, FunctionLiteral::kNormalFunction, | 910 FunctionLiteral::kNotParenthesized, FunctionKind::kNormalFunction, 0); |
| 915 0); | |
| 916 result->set_ast_properties(factory()->visitor()->ast_properties()); | 911 result->set_ast_properties(factory()->visitor()->ast_properties()); |
| 917 result->set_dont_optimize_reason( | 912 result->set_dont_optimize_reason( |
| 918 factory()->visitor()->dont_optimize_reason()); | 913 factory()->visitor()->dont_optimize_reason()); |
| 919 } | 914 } |
| 920 } | 915 } |
| 921 | 916 |
| 922 // Make sure the target stack is empty. | 917 // Make sure the target stack is empty. |
| 923 DCHECK(target_stack_ == NULL); | 918 DCHECK(target_stack_ == NULL); |
| 924 | 919 |
| 925 return result; | 920 return result; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 992 FunctionState function_state(&function_state_, &scope_, scope, zone(), | 987 FunctionState function_state(&function_state_, &scope_, scope, zone(), |
| 993 ast_value_factory_, info()->ast_node_id_gen()); | 988 ast_value_factory_, info()->ast_node_id_gen()); |
| 994 DCHECK(scope->strict_mode() == SLOPPY || info()->strict_mode() == STRICT); | 989 DCHECK(scope->strict_mode() == SLOPPY || info()->strict_mode() == STRICT); |
| 995 DCHECK(info()->strict_mode() == shared_info->strict_mode()); | 990 DCHECK(info()->strict_mode() == shared_info->strict_mode()); |
| 996 scope->SetStrictMode(shared_info->strict_mode()); | 991 scope->SetStrictMode(shared_info->strict_mode()); |
| 997 FunctionLiteral::FunctionType function_type = shared_info->is_expression() | 992 FunctionLiteral::FunctionType function_type = shared_info->is_expression() |
| 998 ? (shared_info->is_anonymous() | 993 ? (shared_info->is_anonymous() |
| 999 ? FunctionLiteral::ANONYMOUS_EXPRESSION | 994 ? FunctionLiteral::ANONYMOUS_EXPRESSION |
| 1000 : FunctionLiteral::NAMED_EXPRESSION) | 995 : FunctionLiteral::NAMED_EXPRESSION) |
| 1001 : FunctionLiteral::DECLARATION; | 996 : FunctionLiteral::DECLARATION; |
| 1002 bool is_generator = shared_info->is_generator(); | |
| 1003 bool ok = true; | 997 bool ok = true; |
| 1004 | 998 |
| 1005 if (shared_info->is_arrow()) { | 999 if (shared_info->is_arrow()) { |
| 1006 DCHECK(!is_generator); | |
| 1007 Expression* expression = ParseExpression(false, &ok); | 1000 Expression* expression = ParseExpression(false, &ok); |
| 1008 DCHECK(expression->IsFunctionLiteral()); | 1001 DCHECK(expression->IsFunctionLiteral()); |
| 1009 result = expression->AsFunctionLiteral(); | 1002 result = expression->AsFunctionLiteral(); |
| 1010 } else { | 1003 } else { |
| 1011 result = ParseFunctionLiteral(raw_name, Scanner::Location::invalid(), | 1004 result = ParseFunctionLiteral(raw_name, Scanner::Location::invalid(), |
| 1012 false, // Strict mode name already checked. | 1005 false, // Strict mode name already checked. |
| 1013 is_generator, RelocInfo::kNoPosition, | 1006 shared_info->kind(), RelocInfo::kNoPosition, |
| 1014 function_type, | 1007 function_type, |
| 1015 FunctionLiteral::NORMAL_ARITY, &ok); | 1008 FunctionLiteral::NORMAL_ARITY, &ok); |
| 1016 } | 1009 } |
| 1017 // Make sure the results agree. | 1010 // Make sure the results agree. |
| 1018 DCHECK(ok == (result != NULL)); | 1011 DCHECK(ok == (result != NULL)); |
| 1019 } | 1012 } |
| 1020 | 1013 |
| 1021 // Make sure the target stack is empty. | 1014 // Make sure the target stack is empty. |
| 1022 DCHECK(target_stack_ == NULL); | 1015 DCHECK(target_stack_ == NULL); |
| 1023 | 1016 |
| (...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1887 // 'function' Identifier '(' FormalParameterListopt ')' '{' FunctionBody '}' | 1880 // 'function' Identifier '(' FormalParameterListopt ')' '{' FunctionBody '}' |
| 1888 // GeneratorDeclaration :: | 1881 // GeneratorDeclaration :: |
| 1889 // 'function' '*' Identifier '(' FormalParameterListopt ')' | 1882 // 'function' '*' Identifier '(' FormalParameterListopt ')' |
| 1890 // '{' FunctionBody '}' | 1883 // '{' FunctionBody '}' |
| 1891 Expect(Token::FUNCTION, CHECK_OK); | 1884 Expect(Token::FUNCTION, CHECK_OK); |
| 1892 int pos = position(); | 1885 int pos = position(); |
| 1893 bool is_generator = allow_generators() && Check(Token::MUL); | 1886 bool is_generator = allow_generators() && Check(Token::MUL); |
| 1894 bool is_strict_reserved = false; | 1887 bool is_strict_reserved = false; |
| 1895 const AstRawString* name = ParseIdentifierOrStrictReservedWord( | 1888 const AstRawString* name = ParseIdentifierOrStrictReservedWord( |
| 1896 &is_strict_reserved, CHECK_OK); | 1889 &is_strict_reserved, CHECK_OK); |
| 1897 FunctionLiteral* fun = ParseFunctionLiteral(name, | 1890 FunctionLiteral* fun = |
| 1898 scanner()->location(), | 1891 ParseFunctionLiteral(name, scanner()->location(), is_strict_reserved, |
| 1899 is_strict_reserved, | 1892 is_generator ? FunctionKind::kGeneratorFunction |
| 1900 is_generator, | 1893 : FunctionKind::kNormalFunction, |
| 1901 pos, | 1894 pos, FunctionLiteral::DECLARATION, |
| 1902 FunctionLiteral::DECLARATION, | 1895 FunctionLiteral::NORMAL_ARITY, CHECK_OK); |
| 1903 FunctionLiteral::NORMAL_ARITY, | |
| 1904 CHECK_OK); | |
| 1905 // Even if we're not at the top-level of the global or a function | 1896 // Even if we're not at the top-level of the global or a function |
| 1906 // scope, we treat it as such and introduce the function with its | 1897 // scope, we treat it as such and introduce the function with its |
| 1907 // initial value upon entering the corresponding scope. | 1898 // initial value upon entering the corresponding scope. |
| 1908 // In ES6, a function behaves as a lexical binding, except in the | 1899 // In ES6, a function behaves as a lexical binding, except in the |
| 1909 // global scope, or the initial scope of eval or another function. | 1900 // global scope, or the initial scope of eval or another function. |
| 1910 VariableMode mode = | 1901 VariableMode mode = |
| 1911 allow_harmony_scoping() && strict_mode() == STRICT && | 1902 allow_harmony_scoping() && strict_mode() == STRICT && |
| 1912 !(scope_->is_global_scope() || scope_->is_eval_scope() || | 1903 !(scope_->is_global_scope() || scope_->is_eval_scope() || |
| 1913 scope_->is_function_scope()) ? LET : VAR; | 1904 scope_->is_function_scope()) ? LET : VAR; |
| 1914 VariableProxy* proxy = NewUnresolved(name, mode, Interface::NewValue()); | 1905 VariableProxy* proxy = NewUnresolved(name, mode, Interface::NewValue()); |
| (...skipping 1443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3358 Expression* expression, Scope* scope, Scanner::Location* dupe_loc, | 3349 Expression* expression, Scope* scope, Scanner::Location* dupe_loc, |
| 3359 bool* ok) { | 3350 bool* ok) { |
| 3360 int num_params = 0; | 3351 int num_params = 0; |
| 3361 *ok = CheckAndDeclareArrowParameter(this, expression, scope, &num_params, | 3352 *ok = CheckAndDeclareArrowParameter(this, expression, scope, &num_params, |
| 3362 dupe_loc); | 3353 dupe_loc); |
| 3363 return num_params; | 3354 return num_params; |
| 3364 } | 3355 } |
| 3365 | 3356 |
| 3366 | 3357 |
| 3367 FunctionLiteral* Parser::ParseFunctionLiteral( | 3358 FunctionLiteral* Parser::ParseFunctionLiteral( |
| 3368 const AstRawString* function_name, | 3359 const AstRawString* function_name, Scanner::Location function_name_location, |
| 3369 Scanner::Location function_name_location, | 3360 bool name_is_strict_reserved, FunctionKind kind, int function_token_pos, |
| 3370 bool name_is_strict_reserved, | |
| 3371 bool is_generator, | |
| 3372 int function_token_pos, | |
| 3373 FunctionLiteral::FunctionType function_type, | 3361 FunctionLiteral::FunctionType function_type, |
| 3374 FunctionLiteral::ArityRestriction arity_restriction, | 3362 FunctionLiteral::ArityRestriction arity_restriction, bool* ok) { |
| 3375 bool* ok) { | |
| 3376 // Function :: | 3363 // Function :: |
| 3377 // '(' FormalParameterList? ')' '{' FunctionBody '}' | 3364 // '(' FormalParameterList? ')' '{' FunctionBody '}' |
| 3378 // | 3365 // |
| 3379 // Getter :: | 3366 // Getter :: |
| 3380 // '(' ')' '{' FunctionBody '}' | 3367 // '(' ')' '{' FunctionBody '}' |
| 3381 // | 3368 // |
| 3382 // Setter :: | 3369 // Setter :: |
| 3383 // '(' PropertySetParameterList ')' '{' FunctionBody '}' | 3370 // '(' PropertySetParameterList ')' '{' FunctionBody '}' |
| 3384 | 3371 |
| 3385 int pos = function_token_pos == RelocInfo::kNoPosition | 3372 int pos = function_token_pos == RelocInfo::kNoPosition |
| 3386 ? peek_position() : function_token_pos; | 3373 ? peek_position() : function_token_pos; |
| 3387 | 3374 |
| 3375 bool is_generator = IsGeneratorFunction(kind); |
| 3376 |
| 3388 // Anonymous functions were passed either the empty symbol or a null | 3377 // Anonymous functions were passed either the empty symbol or a null |
| 3389 // handle as the function name. Remember if we were passed a non-empty | 3378 // handle as the function name. Remember if we were passed a non-empty |
| 3390 // handle to decide whether to invoke function name inference. | 3379 // handle to decide whether to invoke function name inference. |
| 3391 bool should_infer_name = function_name == NULL; | 3380 bool should_infer_name = function_name == NULL; |
| 3392 | 3381 |
| 3393 // We want a non-null handle as the function name. | 3382 // We want a non-null handle as the function name. |
| 3394 if (should_infer_name) { | 3383 if (should_infer_name) { |
| 3395 function_name = ast_value_factory_->empty_string(); | 3384 function_name = ast_value_factory_->empty_string(); |
| 3396 } | 3385 } |
| 3397 | 3386 |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3586 &expected_property_count, CHECK_OK); | 3575 &expected_property_count, CHECK_OK); |
| 3587 } else { | 3576 } else { |
| 3588 body = ParseEagerFunctionBody(function_name, pos, fvar, fvar_init_op, | 3577 body = ParseEagerFunctionBody(function_name, pos, fvar, fvar_init_op, |
| 3589 is_generator, CHECK_OK); | 3578 is_generator, CHECK_OK); |
| 3590 materialized_literal_count = function_state.materialized_literal_count(); | 3579 materialized_literal_count = function_state.materialized_literal_count(); |
| 3591 expected_property_count = function_state.expected_property_count(); | 3580 expected_property_count = function_state.expected_property_count(); |
| 3592 handler_count = function_state.handler_count(); | 3581 handler_count = function_state.handler_count(); |
| 3593 } | 3582 } |
| 3594 | 3583 |
| 3595 // Validate strict mode. | 3584 // Validate strict mode. |
| 3596 if (strict_mode() == STRICT) { | 3585 // Concise methods use StrictFormalParameters. |
| 3586 if (strict_mode() == STRICT || IsConciseMethod(kind)) { |
| 3597 CheckStrictFunctionNameAndParameters(function_name, | 3587 CheckStrictFunctionNameAndParameters(function_name, |
| 3598 name_is_strict_reserved, | 3588 name_is_strict_reserved, |
| 3599 function_name_location, | 3589 function_name_location, |
| 3600 eval_args_error_log, | 3590 eval_args_error_log, |
| 3601 dupe_error_loc, | 3591 dupe_error_loc, |
| 3602 reserved_loc, | 3592 reserved_loc, |
| 3603 CHECK_OK); | 3593 CHECK_OK); |
| 3594 } |
| 3595 if (strict_mode() == STRICT) { |
| 3604 CheckOctalLiteral(scope->start_position(), | 3596 CheckOctalLiteral(scope->start_position(), |
| 3605 scope->end_position(), | 3597 scope->end_position(), |
| 3606 CHECK_OK); | 3598 CHECK_OK); |
| 3607 } | 3599 } |
| 3608 ast_properties = *factory()->visitor()->ast_properties(); | 3600 ast_properties = *factory()->visitor()->ast_properties(); |
| 3609 dont_optimize_reason = factory()->visitor()->dont_optimize_reason(); | 3601 dont_optimize_reason = factory()->visitor()->dont_optimize_reason(); |
| 3610 | 3602 |
| 3611 if (allow_harmony_scoping() && strict_mode() == STRICT) { | 3603 if (allow_harmony_scoping() && strict_mode() == STRICT) { |
| 3612 CheckConflictingVarDeclarations(scope, CHECK_OK); | 3604 CheckConflictingVarDeclarations(scope, CHECK_OK); |
| 3613 } | 3605 } |
| 3614 } | 3606 } |
| 3615 | 3607 |
| 3616 FunctionLiteral::KindFlag kind = is_generator | |
| 3617 ? FunctionLiteral::kGeneratorFunction | |
| 3618 : FunctionLiteral::kNormalFunction; | |
| 3619 FunctionLiteral* function_literal = factory()->NewFunctionLiteral( | 3608 FunctionLiteral* function_literal = factory()->NewFunctionLiteral( |
| 3620 function_name, ast_value_factory_, scope, body, | 3609 function_name, ast_value_factory_, scope, body, |
| 3621 materialized_literal_count, expected_property_count, handler_count, | 3610 materialized_literal_count, expected_property_count, handler_count, |
| 3622 num_parameters, duplicate_parameters, function_type, | 3611 num_parameters, duplicate_parameters, function_type, |
| 3623 FunctionLiteral::kIsFunction, parenthesized, kind, pos); | 3612 FunctionLiteral::kIsFunction, parenthesized, kind, pos); |
| 3624 function_literal->set_function_token_position(function_token_pos); | 3613 function_literal->set_function_token_position(function_token_pos); |
| 3625 function_literal->set_ast_properties(&ast_properties); | 3614 function_literal->set_ast_properties(&ast_properties); |
| 3626 function_literal->set_dont_optimize_reason(dont_optimize_reason); | 3615 function_literal->set_dont_optimize_reason(dont_optimize_reason); |
| 3627 | 3616 |
| 3628 if (fni_ != NULL && should_infer_name) fni_->AddFunction(function_literal); | 3617 if (fni_ != NULL && should_infer_name) fni_->AddFunction(function_literal); |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3768 reusable_preparser_ = new PreParser(&scanner_, NULL, stack_limit_); | 3757 reusable_preparser_ = new PreParser(&scanner_, NULL, stack_limit_); |
| 3769 reusable_preparser_->set_allow_harmony_scoping(allow_harmony_scoping()); | 3758 reusable_preparser_->set_allow_harmony_scoping(allow_harmony_scoping()); |
| 3770 reusable_preparser_->set_allow_modules(allow_modules()); | 3759 reusable_preparser_->set_allow_modules(allow_modules()); |
| 3771 reusable_preparser_->set_allow_natives_syntax(allow_natives_syntax()); | 3760 reusable_preparser_->set_allow_natives_syntax(allow_natives_syntax()); |
| 3772 reusable_preparser_->set_allow_lazy(true); | 3761 reusable_preparser_->set_allow_lazy(true); |
| 3773 reusable_preparser_->set_allow_generators(allow_generators()); | 3762 reusable_preparser_->set_allow_generators(allow_generators()); |
| 3774 reusable_preparser_->set_allow_arrow_functions(allow_arrow_functions()); | 3763 reusable_preparser_->set_allow_arrow_functions(allow_arrow_functions()); |
| 3775 reusable_preparser_->set_allow_harmony_numeric_literals( | 3764 reusable_preparser_->set_allow_harmony_numeric_literals( |
| 3776 allow_harmony_numeric_literals()); | 3765 allow_harmony_numeric_literals()); |
| 3777 reusable_preparser_->set_allow_classes(allow_classes()); | 3766 reusable_preparser_->set_allow_classes(allow_classes()); |
| 3767 reusable_preparser_->set_allow_harmony_object_literals( |
| 3768 allow_harmony_object_literals()); |
| 3778 } | 3769 } |
| 3779 PreParser::PreParseResult result = | 3770 PreParser::PreParseResult result = |
| 3780 reusable_preparser_->PreParseLazyFunction(strict_mode(), | 3771 reusable_preparser_->PreParseLazyFunction(strict_mode(), |
| 3781 is_generator(), | 3772 is_generator(), |
| 3782 logger); | 3773 logger); |
| 3783 if (pre_parse_timer_ != NULL) { | 3774 if (pre_parse_timer_ != NULL) { |
| 3784 pre_parse_timer_->Stop(); | 3775 pre_parse_timer_->Stop(); |
| 3785 } | 3776 } |
| 3786 return result; | 3777 return result; |
| 3787 } | 3778 } |
| (...skipping 1062 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4850 DCHECK(ast_value_factory_->IsInternalized()); | 4841 DCHECK(ast_value_factory_->IsInternalized()); |
| 4851 // info takes ownership of ast_value_factory_. | 4842 // info takes ownership of ast_value_factory_. |
| 4852 if (info()->ast_value_factory() == NULL) { | 4843 if (info()->ast_value_factory() == NULL) { |
| 4853 info()->SetAstValueFactory(ast_value_factory_); | 4844 info()->SetAstValueFactory(ast_value_factory_); |
| 4854 } | 4845 } |
| 4855 ast_value_factory_ = NULL; | 4846 ast_value_factory_ = NULL; |
| 4856 return (result != NULL); | 4847 return (result != NULL); |
| 4857 } | 4848 } |
| 4858 | 4849 |
| 4859 } } // namespace v8::internal | 4850 } } // namespace v8::internal |
| OLD | NEW |