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/parsing/parser.h" | 5 #include "src/parsing/parser.h" |
6 | 6 |
7 #include "src/api.h" | 7 #include "src/api.h" |
8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
9 #include "src/ast/ast-expression-rewriter.h" | 9 #include "src/ast/ast-expression-rewriter.h" |
10 #include "src/ast/ast-expression-visitor.h" | 10 #include "src/ast/ast-expression-visitor.h" |
(...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
772 parsing_on_main_thread_(true) { | 772 parsing_on_main_thread_(true) { |
773 // Even though we were passed ParseInfo, we should not store it in | 773 // Even though we were passed ParseInfo, we should not store it in |
774 // Parser - this makes sure that Isolate is not accidentally accessed via | 774 // Parser - this makes sure that Isolate is not accidentally accessed via |
775 // ParseInfo during background parsing. | 775 // ParseInfo during background parsing. |
776 DCHECK(!info->script().is_null() || info->source_stream() != NULL); | 776 DCHECK(!info->script().is_null() || info->source_stream() != NULL); |
777 set_allow_lazy(info->allow_lazy_parsing()); | 777 set_allow_lazy(info->allow_lazy_parsing()); |
778 set_allow_natives(FLAG_allow_natives_syntax || info->is_native()); | 778 set_allow_natives(FLAG_allow_natives_syntax || info->is_native()); |
779 set_allow_harmony_sloppy(FLAG_harmony_sloppy); | 779 set_allow_harmony_sloppy(FLAG_harmony_sloppy); |
780 set_allow_harmony_sloppy_function(FLAG_harmony_sloppy_function); | 780 set_allow_harmony_sloppy_function(FLAG_harmony_sloppy_function); |
781 set_allow_harmony_sloppy_let(FLAG_harmony_sloppy_let); | 781 set_allow_harmony_sloppy_let(FLAG_harmony_sloppy_let); |
782 set_allow_harmony_default_parameters(FLAG_harmony_default_parameters); | |
783 set_allow_harmony_destructuring_bind(FLAG_harmony_destructuring_bind); | |
784 set_allow_harmony_destructuring_assignment( | |
785 FLAG_harmony_destructuring_assignment); | |
786 set_allow_legacy_const(FLAG_legacy_const); | 782 set_allow_legacy_const(FLAG_legacy_const); |
787 set_allow_harmony_do_expressions(FLAG_harmony_do_expressions); | 783 set_allow_harmony_do_expressions(FLAG_harmony_do_expressions); |
788 set_allow_harmony_function_name(FLAG_harmony_function_name); | 784 set_allow_harmony_function_name(FLAG_harmony_function_name); |
789 set_allow_harmony_function_sent(FLAG_harmony_function_sent); | 785 set_allow_harmony_function_sent(FLAG_harmony_function_sent); |
790 set_allow_harmony_restrictive_declarations( | 786 set_allow_harmony_restrictive_declarations( |
791 FLAG_harmony_restrictive_declarations); | 787 FLAG_harmony_restrictive_declarations); |
792 for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount; | 788 for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount; |
793 ++feature) { | 789 ++feature) { |
794 use_counts_[feature] = 0; | 790 use_counts_[feature] = 0; |
795 } | 791 } |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
934 if (ok && is_strict(language_mode())) { | 930 if (ok && is_strict(language_mode())) { |
935 CheckStrictOctalLiteral(beg_pos, scanner()->location().end_pos, &ok); | 931 CheckStrictOctalLiteral(beg_pos, scanner()->location().end_pos, &ok); |
936 } | 932 } |
937 if (ok && is_sloppy(language_mode()) && allow_harmony_sloppy_function()) { | 933 if (ok && is_sloppy(language_mode()) && allow_harmony_sloppy_function()) { |
938 // TODO(littledan): Function bindings on the global object that modify | 934 // TODO(littledan): Function bindings on the global object that modify |
939 // pre-existing bindings should be made writable, enumerable and | 935 // pre-existing bindings should be made writable, enumerable and |
940 // nonconfigurable if possible, whereas this code will leave attributes | 936 // nonconfigurable if possible, whereas this code will leave attributes |
941 // unchanged if the property already exists. | 937 // unchanged if the property already exists. |
942 InsertSloppyBlockFunctionVarBindings(scope, &ok); | 938 InsertSloppyBlockFunctionVarBindings(scope, &ok); |
943 } | 939 } |
944 if (ok && (is_strict(language_mode()) || allow_harmony_sloppy() || | 940 if (ok) { |
945 allow_harmony_destructuring_bind())) { | |
946 CheckConflictingVarDeclarations(scope_, &ok); | 941 CheckConflictingVarDeclarations(scope_, &ok); |
947 } | 942 } |
948 | 943 |
949 if (ok && info->parse_restriction() == ONLY_SINGLE_FUNCTION_LITERAL) { | 944 if (ok && info->parse_restriction() == ONLY_SINGLE_FUNCTION_LITERAL) { |
950 if (body->length() != 1 || | 945 if (body->length() != 1 || |
951 !body->at(0)->IsExpressionStatement() || | 946 !body->at(0)->IsExpressionStatement() || |
952 !body->at(0)->AsExpressionStatement()-> | 947 !body->at(0)->AsExpressionStatement()-> |
953 expression()->IsFunctionLiteral()) { | 948 expression()->IsFunctionLiteral()) { |
954 ReportMessage(MessageTemplate::kSingleFunctionLiteral); | 949 ReportMessage(MessageTemplate::kSingleFunctionLiteral); |
955 ok = false; | 950 ok = false; |
(...skipping 1360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2316 do { | 2311 do { |
2317 FuncNameInferrer::State fni_state(fni_); | 2312 FuncNameInferrer::State fni_state(fni_); |
2318 | 2313 |
2319 // Parse name. | 2314 // Parse name. |
2320 if (!first_declaration) Consume(Token::COMMA); | 2315 if (!first_declaration) Consume(Token::COMMA); |
2321 | 2316 |
2322 Expression* pattern; | 2317 Expression* pattern; |
2323 int decl_pos = peek_position(); | 2318 int decl_pos = peek_position(); |
2324 { | 2319 { |
2325 ExpressionClassifier pattern_classifier(this); | 2320 ExpressionClassifier pattern_classifier(this); |
2326 Token::Value next = peek(); | |
2327 pattern = ParsePrimaryExpression(&pattern_classifier, CHECK_OK); | 2321 pattern = ParsePrimaryExpression(&pattern_classifier, CHECK_OK); |
2328 ValidateBindingPattern(&pattern_classifier, CHECK_OK); | 2322 ValidateBindingPattern(&pattern_classifier, CHECK_OK); |
2329 if (IsLexicalVariableMode(parsing_result->descriptor.mode)) { | 2323 if (IsLexicalVariableMode(parsing_result->descriptor.mode)) { |
2330 ValidateLetPattern(&pattern_classifier, CHECK_OK); | 2324 ValidateLetPattern(&pattern_classifier, CHECK_OK); |
2331 } | 2325 } |
2332 if (!allow_harmony_destructuring_bind() && !pattern->IsVariableProxy()) { | |
2333 ReportUnexpectedToken(next); | |
2334 *ok = false; | |
2335 return nullptr; | |
2336 } | |
2337 } | 2326 } |
2338 | 2327 |
2339 Scanner::Location variable_loc = scanner()->location(); | 2328 Scanner::Location variable_loc = scanner()->location(); |
2340 const AstRawString* single_name = | 2329 const AstRawString* single_name = |
2341 pattern->IsVariableProxy() ? pattern->AsVariableProxy()->raw_name() | 2330 pattern->IsVariableProxy() ? pattern->AsVariableProxy()->raw_name() |
2342 : nullptr; | 2331 : nullptr; |
2343 if (single_name != nullptr) { | 2332 if (single_name != nullptr) { |
2344 if (fni_ != NULL) fni_->PushVariableName(single_name); | 2333 if (fni_ != NULL) fni_->PushVariableName(single_name); |
2345 } | 2334 } |
2346 | 2335 |
(...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3140 | 3129 |
3141 void Parser::InitializeForEachStatement(ForEachStatement* stmt, | 3130 void Parser::InitializeForEachStatement(ForEachStatement* stmt, |
3142 Expression* each, Expression* subject, | 3131 Expression* each, Expression* subject, |
3143 Statement* body) { | 3132 Statement* body) { |
3144 ForOfStatement* for_of = stmt->AsForOfStatement(); | 3133 ForOfStatement* for_of = stmt->AsForOfStatement(); |
3145 if (for_of != NULL) { | 3134 if (for_of != NULL) { |
3146 InitializeForOfStatement(for_of, each, subject, body, | 3135 InitializeForOfStatement(for_of, each, subject, body, |
3147 RelocInfo::kNoPosition); | 3136 RelocInfo::kNoPosition); |
3148 } else { | 3137 } else { |
3149 if (each->IsArrayLiteral() || each->IsObjectLiteral()) { | 3138 if (each->IsArrayLiteral() || each->IsObjectLiteral()) { |
3150 DCHECK(allow_harmony_destructuring_assignment()); | |
3151 Variable* temp = | 3139 Variable* temp = |
3152 scope_->NewTemporary(ast_value_factory()->empty_string()); | 3140 scope_->NewTemporary(ast_value_factory()->empty_string()); |
3153 VariableProxy* temp_proxy = factory()->NewVariableProxy(temp); | 3141 VariableProxy* temp_proxy = factory()->NewVariableProxy(temp); |
3154 Expression* assign_each = PatternRewriter::RewriteDestructuringAssignment( | 3142 Expression* assign_each = PatternRewriter::RewriteDestructuringAssignment( |
3155 this, factory()->NewAssignment(Token::ASSIGN, each, temp_proxy, | 3143 this, factory()->NewAssignment(Token::ASSIGN, each, temp_proxy, |
3156 RelocInfo::kNoPosition), | 3144 RelocInfo::kNoPosition), |
3157 scope_); | 3145 scope_); |
3158 auto block = | 3146 auto block = |
3159 factory()->NewBlock(nullptr, 2, false, RelocInfo::kNoPosition); | 3147 factory()->NewBlock(nullptr, 2, false, RelocInfo::kNoPosition); |
3160 block->statements()->Add(factory()->NewExpressionStatement( | 3148 block->statements()->Add(factory()->NewExpressionStatement( |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3216 // each = result.value | 3204 // each = result.value |
3217 { | 3205 { |
3218 Expression* value_literal = factory()->NewStringLiteral( | 3206 Expression* value_literal = factory()->NewStringLiteral( |
3219 ast_value_factory()->value_string(), RelocInfo::kNoPosition); | 3207 ast_value_factory()->value_string(), RelocInfo::kNoPosition); |
3220 Expression* result_proxy = factory()->NewVariableProxy(result); | 3208 Expression* result_proxy = factory()->NewVariableProxy(result); |
3221 Expression* result_value = factory()->NewProperty( | 3209 Expression* result_value = factory()->NewProperty( |
3222 result_proxy, value_literal, RelocInfo::kNoPosition); | 3210 result_proxy, value_literal, RelocInfo::kNoPosition); |
3223 assign_each = factory()->NewAssignment(Token::ASSIGN, each, result_value, | 3211 assign_each = factory()->NewAssignment(Token::ASSIGN, each, result_value, |
3224 RelocInfo::kNoPosition); | 3212 RelocInfo::kNoPosition); |
3225 if (each->IsArrayLiteral() || each->IsObjectLiteral()) { | 3213 if (each->IsArrayLiteral() || each->IsObjectLiteral()) { |
3226 DCHECK(allow_harmony_destructuring_assignment()); | |
3227 assign_each = PatternRewriter::RewriteDestructuringAssignment( | 3214 assign_each = PatternRewriter::RewriteDestructuringAssignment( |
3228 this, assign_each->AsAssignment(), scope_); | 3215 this, assign_each->AsAssignment(), scope_); |
3229 } | 3216 } |
3230 } | 3217 } |
3231 | 3218 |
3232 for_of->Initialize(each, iterable, body, iterator, assign_iterator, | 3219 for_of->Initialize(each, iterable, body, iterator, assign_iterator, |
3233 next_result, result_done, assign_each); | 3220 next_result, result_done, assign_each); |
3234 } | 3221 } |
3235 | 3222 |
3236 Statement* Parser::DesugarLexicalBindingsInForStatement( | 3223 Statement* Parser::DesugarLexicalBindingsInForStatement( |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3693 Expression* expression = ParseExpression(false, &classifier, CHECK_OK); | 3680 Expression* expression = ParseExpression(false, &classifier, CHECK_OK); |
3694 int lhs_end_pos = scanner()->location().end_pos; | 3681 int lhs_end_pos = scanner()->location().end_pos; |
3695 ForEachStatement::VisitMode mode = ForEachStatement::ENUMERATE; | 3682 ForEachStatement::VisitMode mode = ForEachStatement::ENUMERATE; |
3696 is_let_identifier_expression = | 3683 is_let_identifier_expression = |
3697 expression->IsVariableProxy() && | 3684 expression->IsVariableProxy() && |
3698 expression->AsVariableProxy()->raw_name() == | 3685 expression->AsVariableProxy()->raw_name() == |
3699 ast_value_factory()->let_string(); | 3686 ast_value_factory()->let_string(); |
3700 | 3687 |
3701 bool is_for_each = CheckInOrOf(&mode, ok); | 3688 bool is_for_each = CheckInOrOf(&mode, ok); |
3702 if (!*ok) return nullptr; | 3689 if (!*ok) return nullptr; |
3703 bool is_destructuring = | 3690 bool is_destructuring = is_for_each && (expression->IsArrayLiteral() || |
3704 is_for_each && allow_harmony_destructuring_assignment() && | 3691 expression->IsObjectLiteral()); |
3705 (expression->IsArrayLiteral() || expression->IsObjectLiteral()); | |
3706 | 3692 |
3707 if (is_destructuring) { | 3693 if (is_destructuring) { |
3708 ValidateAssignmentPattern(&classifier, CHECK_OK); | 3694 ValidateAssignmentPattern(&classifier, CHECK_OK); |
3709 } else { | 3695 } else { |
3710 RewriteNonPattern(&classifier, CHECK_OK); | 3696 RewriteNonPattern(&classifier, CHECK_OK); |
3711 } | 3697 } |
3712 | 3698 |
3713 if (is_for_each) { | 3699 if (is_for_each) { |
3714 if (!is_destructuring) { | 3700 if (!is_destructuring) { |
3715 expression = this->CheckAndRewriteReferenceExpression( | 3701 expression = this->CheckAndRewriteReferenceExpression( |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3949 Expression* initializer = nullptr; | 3935 Expression* initializer = nullptr; |
3950 if (expr->IsVariableProxy()) { | 3936 if (expr->IsVariableProxy()) { |
3951 // When the formal parameter was originally seen, it was parsed as a | 3937 // When the formal parameter was originally seen, it was parsed as a |
3952 // VariableProxy and recorded as unresolved in the scope. Here we undo that | 3938 // VariableProxy and recorded as unresolved in the scope. Here we undo that |
3953 // parse-time side-effect for parameters that are single-names (not | 3939 // parse-time side-effect for parameters that are single-names (not |
3954 // patterns; for patterns that happens uniformly in | 3940 // patterns; for patterns that happens uniformly in |
3955 // PatternRewriter::VisitVariableProxy). | 3941 // PatternRewriter::VisitVariableProxy). |
3956 parser_->scope_->RemoveUnresolved(expr->AsVariableProxy()); | 3942 parser_->scope_->RemoveUnresolved(expr->AsVariableProxy()); |
3957 } else if (expr->IsAssignment()) { | 3943 } else if (expr->IsAssignment()) { |
3958 Assignment* assignment = expr->AsAssignment(); | 3944 Assignment* assignment = expr->AsAssignment(); |
3959 DCHECK(parser_->allow_harmony_default_parameters()); | |
3960 DCHECK(!assignment->is_compound()); | 3945 DCHECK(!assignment->is_compound()); |
3961 initializer = assignment->value(); | 3946 initializer = assignment->value(); |
3962 expr = assignment->target(); | 3947 expr = assignment->target(); |
3963 | 3948 |
3964 // TODO(adamk): Only call this if necessary. | 3949 // TODO(adamk): Only call this if necessary. |
3965 RewriteParameterInitializerScope(parser_->stack_limit(), initializer, | 3950 RewriteParameterInitializerScope(parser_->stack_limit(), initializer, |
3966 parser_->scope_, parameters->scope); | 3951 parser_->scope_, parameters->scope); |
3967 } | 3952 } |
3968 | 3953 |
3969 // TODO(adamk): params_loc.end_pos is not the correct initializer position, | 3954 // TODO(adamk): params_loc.end_pos is not the correct initializer position, |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4266 ValidateFormalParameters(&formals_classifier, language_mode, | 4251 ValidateFormalParameters(&formals_classifier, language_mode, |
4267 allow_duplicate_parameters, CHECK_OK); | 4252 allow_duplicate_parameters, CHECK_OK); |
4268 | 4253 |
4269 if (is_strict(language_mode)) { | 4254 if (is_strict(language_mode)) { |
4270 CheckStrictOctalLiteral(scope->start_position(), scope->end_position(), | 4255 CheckStrictOctalLiteral(scope->start_position(), scope->end_position(), |
4271 CHECK_OK); | 4256 CHECK_OK); |
4272 } | 4257 } |
4273 if (is_sloppy(language_mode) && allow_harmony_sloppy_function()) { | 4258 if (is_sloppy(language_mode) && allow_harmony_sloppy_function()) { |
4274 InsertSloppyBlockFunctionVarBindings(scope, CHECK_OK); | 4259 InsertSloppyBlockFunctionVarBindings(scope, CHECK_OK); |
4275 } | 4260 } |
4276 if (is_strict(language_mode) || allow_harmony_sloppy() || | 4261 CheckConflictingVarDeclarations(scope, CHECK_OK); |
4277 allow_harmony_destructuring_bind()) { | |
4278 CheckConflictingVarDeclarations(scope, CHECK_OK); | |
4279 } | |
4280 | 4262 |
4281 if (body) { | 4263 if (body) { |
4282 // If body can be inspected, rewrite queued destructuring assignments | 4264 // If body can be inspected, rewrite queued destructuring assignments |
4283 ParserTraits::RewriteDestructuringAssignments(); | 4265 ParserTraits::RewriteDestructuringAssignments(); |
4284 } | 4266 } |
4285 has_duplicate_parameters = | 4267 has_duplicate_parameters = |
4286 !formals_classifier.is_valid_formal_parameter_list_without_duplicates(); | 4268 !formals_classifier.is_valid_formal_parameter_list_without_duplicates(); |
4287 } | 4269 } |
4288 | 4270 |
4289 FunctionLiteral::ParameterFlag duplicate_parameters = | 4271 FunctionLiteral::ParameterFlag duplicate_parameters = |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4688 DCHECK_EQ(Token::LBRACE, scanner()->current_token()); | 4670 DCHECK_EQ(Token::LBRACE, scanner()->current_token()); |
4689 | 4671 |
4690 if (reusable_preparser_ == NULL) { | 4672 if (reusable_preparser_ == NULL) { |
4691 reusable_preparser_ = new PreParser(zone(), &scanner_, ast_value_factory(), | 4673 reusable_preparser_ = new PreParser(zone(), &scanner_, ast_value_factory(), |
4692 NULL, stack_limit_); | 4674 NULL, stack_limit_); |
4693 reusable_preparser_->set_allow_lazy(true); | 4675 reusable_preparser_->set_allow_lazy(true); |
4694 #define SET_ALLOW(name) reusable_preparser_->set_allow_##name(allow_##name()); | 4676 #define SET_ALLOW(name) reusable_preparser_->set_allow_##name(allow_##name()); |
4695 SET_ALLOW(natives); | 4677 SET_ALLOW(natives); |
4696 SET_ALLOW(harmony_sloppy); | 4678 SET_ALLOW(harmony_sloppy); |
4697 SET_ALLOW(harmony_sloppy_let); | 4679 SET_ALLOW(harmony_sloppy_let); |
4698 SET_ALLOW(harmony_default_parameters); | |
4699 SET_ALLOW(harmony_destructuring_bind); | |
4700 SET_ALLOW(harmony_destructuring_assignment); | |
4701 SET_ALLOW(harmony_do_expressions); | 4680 SET_ALLOW(harmony_do_expressions); |
4702 SET_ALLOW(harmony_function_name); | 4681 SET_ALLOW(harmony_function_name); |
4703 SET_ALLOW(harmony_function_sent); | 4682 SET_ALLOW(harmony_function_sent); |
4704 #undef SET_ALLOW | 4683 #undef SET_ALLOW |
4705 } | 4684 } |
4706 PreParser::PreParseResult result = reusable_preparser_->PreParseLazyFunction( | 4685 PreParser::PreParseResult result = reusable_preparser_->PreParseLazyFunction( |
4707 language_mode(), function_state_->kind(), scope_->has_simple_parameters(), | 4686 language_mode(), function_state_->kind(), scope_->has_simple_parameters(), |
4708 logger, bookmark); | 4687 logger, bookmark); |
4709 if (pre_parse_timer_ != NULL) { | 4688 if (pre_parse_timer_ != NULL) { |
4710 pre_parse_timer_->Stop(); | 4689 pre_parse_timer_->Stop(); |
(...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5457 for (int i = begin; i < end; i++) { | 5436 for (int i = begin; i < end; i++) { |
5458 DCHECK(non_patterns_to_rewrite->at(i)->IsRewritableExpression()); | 5437 DCHECK(non_patterns_to_rewrite->at(i)->IsRewritableExpression()); |
5459 rewriter.Rewrite(non_patterns_to_rewrite->at(i)); | 5438 rewriter.Rewrite(non_patterns_to_rewrite->at(i)); |
5460 } | 5439 } |
5461 non_patterns_to_rewrite->Rewind(begin); | 5440 non_patterns_to_rewrite->Rewind(begin); |
5462 } | 5441 } |
5463 } | 5442 } |
5464 | 5443 |
5465 | 5444 |
5466 void Parser::RewriteDestructuringAssignments() { | 5445 void Parser::RewriteDestructuringAssignments() { |
5467 if (!allow_harmony_destructuring_assignment()) return; | |
5468 const auto& assignments = | 5446 const auto& assignments = |
5469 function_state_->destructuring_assignments_to_rewrite(); | 5447 function_state_->destructuring_assignments_to_rewrite(); |
5470 for (int i = assignments.length() - 1; i >= 0; --i) { | 5448 for (int i = assignments.length() - 1; i >= 0; --i) { |
5471 // Rewrite list in reverse, so that nested assignment patterns are rewritten | 5449 // Rewrite list in reverse, so that nested assignment patterns are rewritten |
5472 // correctly. | 5450 // correctly. |
5473 const DestructuringAssignment& pair = assignments.at(i); | 5451 const DestructuringAssignment& pair = assignments.at(i); |
5474 RewritableExpression* to_rewrite = | 5452 RewritableExpression* to_rewrite = |
5475 pair.assignment->AsRewritableExpression(); | 5453 pair.assignment->AsRewritableExpression(); |
5476 DCHECK_NOT_NULL(to_rewrite); | 5454 DCHECK_NOT_NULL(to_rewrite); |
5477 if (!to_rewrite->is_rewritten()) { | 5455 if (!to_rewrite->is_rewritten()) { |
(...skipping 1327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6805 try_block, target); | 6783 try_block, target); |
6806 final_loop = target; | 6784 final_loop = target; |
6807 } | 6785 } |
6808 | 6786 |
6809 return final_loop; | 6787 return final_loop; |
6810 } | 6788 } |
6811 | 6789 |
6812 | 6790 |
6813 } // namespace internal | 6791 } // namespace internal |
6814 } // namespace v8 | 6792 } // namespace v8 |
OLD | NEW |