| 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 <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "src/api.h" | 9 #include "src/api.h" |
| 10 #include "src/ast/ast-expression-rewriter.h" | 10 #include "src/ast/ast-expression-rewriter.h" |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 Expression* Parser::NewThrowError(Runtime::FunctionId id, | 427 Expression* Parser::NewThrowError(Runtime::FunctionId id, |
| 428 MessageTemplate::Template message, | 428 MessageTemplate::Template message, |
| 429 const AstRawString* arg, int pos) { | 429 const AstRawString* arg, int pos) { |
| 430 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(2, zone()); | 430 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(2, zone()); |
| 431 args->Add(factory()->NewSmiLiteral(message, pos), zone()); | 431 args->Add(factory()->NewSmiLiteral(message, pos), zone()); |
| 432 args->Add(factory()->NewStringLiteral(arg, pos), zone()); | 432 args->Add(factory()->NewStringLiteral(arg, pos), zone()); |
| 433 CallRuntime* call_constructor = factory()->NewCallRuntime(id, args, pos); | 433 CallRuntime* call_constructor = factory()->NewCallRuntime(id, args, pos); |
| 434 return factory()->NewThrow(call_constructor, pos); | 434 return factory()->NewThrow(call_constructor, pos); |
| 435 } | 435 } |
| 436 | 436 |
| 437 const AstRawString* ParserBaseTraits<Parser>::GetSymbol( | 437 Expression* Parser::NewSuperPropertyReference(int pos) { |
| 438 Scanner* scanner) const { | |
| 439 const AstRawString* result = | |
| 440 delegate()->scanner()->CurrentSymbol(delegate()->ast_value_factory()); | |
| 441 DCHECK(result != NULL); | |
| 442 return result; | |
| 443 } | |
| 444 | |
| 445 const AstRawString* ParserBaseTraits<Parser>::GetNumberAsSymbol( | |
| 446 Scanner* scanner) const { | |
| 447 double double_value = delegate()->scanner()->DoubleValue(); | |
| 448 char array[100]; | |
| 449 const char* string = DoubleToCString(double_value, ArrayVector(array)); | |
| 450 return delegate()->ast_value_factory()->GetOneByteString(string); | |
| 451 } | |
| 452 | |
| 453 const AstRawString* ParserBaseTraits<Parser>::GetNextSymbol( | |
| 454 Scanner* scanner) const { | |
| 455 return delegate()->scanner()->NextSymbol(delegate()->ast_value_factory()); | |
| 456 } | |
| 457 | |
| 458 Expression* ParserBaseTraits<Parser>::ThisExpression(int pos) { | |
| 459 return delegate()->NewUnresolved( | |
| 460 delegate()->ast_value_factory()->this_string(), pos, pos + 4, | |
| 461 Variable::THIS); | |
| 462 } | |
| 463 | |
| 464 Expression* ParserBaseTraits<Parser>::NewSuperPropertyReference( | |
| 465 AstNodeFactory* factory, int pos) { | |
| 466 // this_function[home_object_symbol] | 438 // this_function[home_object_symbol] |
| 467 VariableProxy* this_function_proxy = delegate()->NewUnresolved( | 439 VariableProxy* this_function_proxy = |
| 468 delegate()->ast_value_factory()->this_function_string(), pos); | 440 NewUnresolved(ast_value_factory()->this_function_string(), pos); |
| 469 Expression* home_object_symbol_literal = | 441 Expression* home_object_symbol_literal = |
| 470 factory->NewSymbolLiteral("home_object_symbol", kNoSourcePosition); | 442 factory()->NewSymbolLiteral("home_object_symbol", kNoSourcePosition); |
| 471 Expression* home_object = factory->NewProperty( | 443 Expression* home_object = factory()->NewProperty( |
| 472 this_function_proxy, home_object_symbol_literal, pos); | 444 this_function_proxy, home_object_symbol_literal, pos); |
| 473 return factory->NewSuperPropertyReference( | 445 return factory()->NewSuperPropertyReference( |
| 474 ThisExpression(pos)->AsVariableProxy(), home_object, pos); | 446 ThisExpression(pos)->AsVariableProxy(), home_object, pos); |
| 475 } | 447 } |
| 476 | 448 |
| 477 Expression* ParserBaseTraits<Parser>::NewSuperCallReference( | 449 Expression* Parser::NewSuperCallReference(int pos) { |
| 478 AstNodeFactory* factory, int pos) { | 450 VariableProxy* new_target_proxy = |
| 479 VariableProxy* new_target_proxy = delegate()->NewUnresolved( | 451 NewUnresolved(ast_value_factory()->new_target_string(), pos); |
| 480 delegate()->ast_value_factory()->new_target_string(), pos); | 452 VariableProxy* this_function_proxy = |
| 481 VariableProxy* this_function_proxy = delegate()->NewUnresolved( | 453 NewUnresolved(ast_value_factory()->this_function_string(), pos); |
| 482 delegate()->ast_value_factory()->this_function_string(), pos); | 454 return factory()->NewSuperCallReference( |
| 483 return factory->NewSuperCallReference(ThisExpression(pos)->AsVariableProxy(), | 455 ThisExpression(pos)->AsVariableProxy(), new_target_proxy, |
| 484 new_target_proxy, this_function_proxy, | 456 this_function_proxy, pos); |
| 485 pos); | |
| 486 } | 457 } |
| 487 | 458 |
| 488 Expression* ParserBaseTraits<Parser>::NewTargetExpression(int pos) { | 459 Expression* Parser::NewTargetExpression(int pos) { |
| 489 static const int kNewTargetStringLength = 10; | 460 static const int kNewTargetStringLength = 10; |
| 490 auto proxy = delegate()->NewUnresolved( | 461 auto proxy = NewUnresolved(ast_value_factory()->new_target_string(), pos, |
| 491 delegate()->ast_value_factory()->new_target_string(), pos, | 462 pos + kNewTargetStringLength); |
| 492 pos + kNewTargetStringLength); | |
| 493 proxy->set_is_new_target(); | 463 proxy->set_is_new_target(); |
| 494 return proxy; | 464 return proxy; |
| 495 } | 465 } |
| 496 | 466 |
| 497 Expression* ParserBaseTraits<Parser>::FunctionSentExpression( | 467 Expression* Parser::FunctionSentExpression(int pos) { |
| 498 AstNodeFactory* factory, int pos) const { | |
| 499 // We desugar function.sent into %_GeneratorGetInputOrDebugPos(generator). | 468 // We desugar function.sent into %_GeneratorGetInputOrDebugPos(generator). |
| 500 Zone* zone = delegate()->zone(); | 469 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(1, zone()); |
| 501 ZoneList<Expression*>* args = new (zone) ZoneList<Expression*>(1, zone); | 470 VariableProxy* generator = |
| 502 VariableProxy* generator = factory->NewVariableProxy( | 471 factory()->NewVariableProxy(function_state_->generator_object_variable()); |
| 503 delegate()->function_state_->generator_object_variable()); | 472 args->Add(generator, zone()); |
| 504 args->Add(generator, zone); | 473 return factory()->NewCallRuntime(Runtime::kInlineGeneratorGetInputOrDebugPos, |
| 505 return factory->NewCallRuntime(Runtime::kInlineGeneratorGetInputOrDebugPos, | 474 args, pos); |
| 506 args, pos); | |
| 507 } | 475 } |
| 508 | 476 |
| 509 Literal* ParserBaseTraits<Parser>::ExpressionFromLiteral( | 477 Literal* Parser::ExpressionFromLiteral(Token::Value token, int pos) { |
| 510 Token::Value token, int pos, Scanner* scanner, | |
| 511 AstNodeFactory* factory) const { | |
| 512 switch (token) { | 478 switch (token) { |
| 513 case Token::NULL_LITERAL: | 479 case Token::NULL_LITERAL: |
| 514 return factory->NewNullLiteral(pos); | 480 return factory()->NewNullLiteral(pos); |
| 515 case Token::TRUE_LITERAL: | 481 case Token::TRUE_LITERAL: |
| 516 return factory->NewBooleanLiteral(true, pos); | 482 return factory()->NewBooleanLiteral(true, pos); |
| 517 case Token::FALSE_LITERAL: | 483 case Token::FALSE_LITERAL: |
| 518 return factory->NewBooleanLiteral(false, pos); | 484 return factory()->NewBooleanLiteral(false, pos); |
| 519 case Token::SMI: { | 485 case Token::SMI: { |
| 520 int value = scanner->smi_value(); | 486 int value = scanner()->smi_value(); |
| 521 return factory->NewSmiLiteral(value, pos); | 487 return factory()->NewSmiLiteral(value, pos); |
| 522 } | 488 } |
| 523 case Token::NUMBER: { | 489 case Token::NUMBER: { |
| 524 bool has_dot = scanner->ContainsDot(); | 490 bool has_dot = scanner()->ContainsDot(); |
| 525 double value = scanner->DoubleValue(); | 491 double value = scanner()->DoubleValue(); |
| 526 return factory->NewNumberLiteral(value, pos, has_dot); | 492 return factory()->NewNumberLiteral(value, pos, has_dot); |
| 527 } | 493 } |
| 528 default: | 494 default: |
| 529 DCHECK(false); | 495 DCHECK(false); |
| 530 } | 496 } |
| 531 return NULL; | 497 return NULL; |
| 532 } | 498 } |
| 533 | 499 |
| 534 Expression* ParserBaseTraits<Parser>::ExpressionFromIdentifier( | 500 Expression* Parser::GetIterator(Expression* iterable, int pos) { |
| 535 const AstRawString* name, int start_position, int end_position, | |
| 536 InferName infer) { | |
| 537 if (infer == InferName::kYes && delegate()->fni_ != NULL) { | |
| 538 delegate()->fni_->PushVariableName(name); | |
| 539 } | |
| 540 return delegate()->NewUnresolved(name, start_position, end_position); | |
| 541 } | |
| 542 | |
| 543 Expression* ParserBaseTraits<Parser>::ExpressionFromString( | |
| 544 int pos, Scanner* scanner, AstNodeFactory* factory) const { | |
| 545 const AstRawString* symbol = GetSymbol(scanner); | |
| 546 if (delegate()->fni_ != NULL) delegate()->fni_->PushLiteralName(symbol); | |
| 547 return factory->NewStringLiteral(symbol, pos); | |
| 548 } | |
| 549 | |
| 550 Expression* ParserBaseTraits<Parser>::GetIterator(Expression* iterable, | |
| 551 AstNodeFactory* factory, | |
| 552 int pos) { | |
| 553 Expression* iterator_symbol_literal = | 501 Expression* iterator_symbol_literal = |
| 554 factory->NewSymbolLiteral("iterator_symbol", kNoSourcePosition); | 502 factory()->NewSymbolLiteral("iterator_symbol", kNoSourcePosition); |
| 555 Expression* prop = | 503 Expression* prop = |
| 556 factory->NewProperty(iterable, iterator_symbol_literal, pos); | 504 factory()->NewProperty(iterable, iterator_symbol_literal, pos); |
| 557 Zone* zone = delegate()->zone(); | 505 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(0, zone()); |
| 558 ZoneList<Expression*>* args = new (zone) ZoneList<Expression*>(0, zone); | 506 return factory()->NewCall(prop, args, pos); |
| 559 return factory->NewCall(prop, args, pos); | |
| 560 } | 507 } |
| 561 | 508 |
| 562 void Parser::MarkTailPosition(Expression* expression) { | 509 void Parser::MarkTailPosition(Expression* expression) { |
| 563 expression->MarkTail(); | 510 expression->MarkTail(); |
| 564 } | 511 } |
| 565 | 512 |
| 566 Parser::Parser(ParseInfo* info) | 513 Parser::Parser(ParseInfo* info) |
| 567 : ParserBase<Parser>(info->zone(), &scanner_, info->stack_limit(), | 514 : ParserBase<Parser>(info->zone(), &scanner_, info->stack_limit(), |
| 568 info->extension(), info->ast_value_factory(), NULL), | 515 info->extension(), info->ast_value_factory(), NULL), |
| 569 scanner_(info->unicode_cache()), | 516 scanner_(info->unicode_cache()), |
| (...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1159 } | 1106 } |
| 1160 } | 1107 } |
| 1161 } | 1108 } |
| 1162 | 1109 |
| 1163 | 1110 |
| 1164 const AstRawString* Parser::ParseModuleSpecifier(bool* ok) { | 1111 const AstRawString* Parser::ParseModuleSpecifier(bool* ok) { |
| 1165 // ModuleSpecifier : | 1112 // ModuleSpecifier : |
| 1166 // StringLiteral | 1113 // StringLiteral |
| 1167 | 1114 |
| 1168 Expect(Token::STRING, CHECK_OK); | 1115 Expect(Token::STRING, CHECK_OK); |
| 1169 return GetSymbol(scanner()); | 1116 return GetSymbol(); |
| 1170 } | 1117 } |
| 1171 | 1118 |
| 1172 | 1119 |
| 1173 void Parser::ParseExportClause(ZoneList<const AstRawString*>* export_names, | 1120 void Parser::ParseExportClause(ZoneList<const AstRawString*>* export_names, |
| 1174 ZoneList<Scanner::Location>* export_locations, | 1121 ZoneList<Scanner::Location>* export_locations, |
| 1175 ZoneList<const AstRawString*>* local_names, | 1122 ZoneList<const AstRawString*>* local_names, |
| 1176 Scanner::Location* reserved_loc, bool* ok) { | 1123 Scanner::Location* reserved_loc, bool* ok) { |
| 1177 // ExportClause : | 1124 // ExportClause : |
| 1178 // '{' '}' | 1125 // '{' '}' |
| 1179 // '{' ExportsList '}' | 1126 // '{' ExportsList '}' |
| (...skipping 1832 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3012 | 2959 |
| 3013 Variable* iterator = NewTemporary(ast_value_factory()->dot_iterator_string()); | 2960 Variable* iterator = NewTemporary(ast_value_factory()->dot_iterator_string()); |
| 3014 Variable* result = NewTemporary(ast_value_factory()->dot_result_string()); | 2961 Variable* result = NewTemporary(ast_value_factory()->dot_result_string()); |
| 3015 Variable* completion = NewTemporary(avfactory->empty_string()); | 2962 Variable* completion = NewTemporary(avfactory->empty_string()); |
| 3016 | 2963 |
| 3017 // iterator = iterable[Symbol.iterator]() | 2964 // iterator = iterable[Symbol.iterator]() |
| 3018 Expression* assign_iterator; | 2965 Expression* assign_iterator; |
| 3019 { | 2966 { |
| 3020 assign_iterator = factory()->NewAssignment( | 2967 assign_iterator = factory()->NewAssignment( |
| 3021 Token::ASSIGN, factory()->NewVariableProxy(iterator), | 2968 Token::ASSIGN, factory()->NewVariableProxy(iterator), |
| 3022 GetIterator(iterable, factory(), iterable->position()), | 2969 GetIterator(iterable, iterable->position()), iterable->position()); |
| 3023 iterable->position()); | |
| 3024 } | 2970 } |
| 3025 | 2971 |
| 3026 // !%_IsJSReceiver(result = iterator.next()) && | 2972 // !%_IsJSReceiver(result = iterator.next()) && |
| 3027 // %ThrowIteratorResultNotAnObject(result) | 2973 // %ThrowIteratorResultNotAnObject(result) |
| 3028 Expression* next_result; | 2974 Expression* next_result; |
| 3029 { | 2975 { |
| 3030 Expression* iterator_proxy = factory()->NewVariableProxy(iterator); | 2976 Expression* iterator_proxy = factory()->NewVariableProxy(iterator); |
| 3031 next_result = | 2977 next_result = |
| 3032 BuildIteratorNextResult(iterator_proxy, result, next_result_pos); | 2978 BuildIteratorNextResult(iterator_proxy, result, next_result_pos); |
| 3033 } | 2979 } |
| (...skipping 1702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4736 if (classifier != nullptr) { | 4682 if (classifier != nullptr) { |
| 4737 classifier->Accumulate(&extends_classifier, | 4683 classifier->Accumulate(&extends_classifier, |
| 4738 ExpressionClassifier::ExpressionProductions); | 4684 ExpressionClassifier::ExpressionProductions); |
| 4739 } | 4685 } |
| 4740 } else { | 4686 } else { |
| 4741 block_state.set_start_position(scanner()->location().end_pos); | 4687 block_state.set_start_position(scanner()->location().end_pos); |
| 4742 } | 4688 } |
| 4743 | 4689 |
| 4744 | 4690 |
| 4745 ClassLiteralChecker checker(this); | 4691 ClassLiteralChecker checker(this); |
| 4746 ZoneList<ObjectLiteral::Property*>* properties = NewPropertyList(4, zone()); | 4692 ZoneList<ObjectLiteral::Property*>* properties = NewPropertyList(4); |
| 4747 FunctionLiteral* constructor = nullptr; | 4693 FunctionLiteral* constructor = nullptr; |
| 4748 bool has_seen_constructor = false; | 4694 bool has_seen_constructor = false; |
| 4749 | 4695 |
| 4750 Expect(Token::LBRACE, CHECK_OK); | 4696 Expect(Token::LBRACE, CHECK_OK); |
| 4751 | 4697 |
| 4752 const bool has_extends = extends != nullptr; | 4698 const bool has_extends = extends != nullptr; |
| 4753 while (peek() != Token::RBRACE) { | 4699 while (peek() != Token::RBRACE) { |
| 4754 if (Check(Token::SEMICOLON)) continue; | 4700 if (Check(Token::SEMICOLON)) continue; |
| 4755 FuncNameInferrer::State fni_state(fni_); | 4701 FuncNameInferrer::State fni_state(fni_); |
| 4756 const bool in_class = true; | 4702 const bool in_class = true; |
| (...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5682 do_block->statements()->Add( | 5628 do_block->statements()->Add( |
| 5683 factory()->NewExpressionStatement(init_result, kNoSourcePosition), | 5629 factory()->NewExpressionStatement(init_result, kNoSourcePosition), |
| 5684 zone()); | 5630 zone()); |
| 5685 // Traverse the array literal starting from the first spread. | 5631 // Traverse the array literal starting from the first spread. |
| 5686 while (s != lit->EndValue()) { | 5632 while (s != lit->EndValue()) { |
| 5687 Expression* value = *s++; | 5633 Expression* value = *s++; |
| 5688 Spread* spread = value->AsSpread(); | 5634 Spread* spread = value->AsSpread(); |
| 5689 if (spread == nullptr) { | 5635 if (spread == nullptr) { |
| 5690 // If the element is not a spread, we're adding a single: | 5636 // If the element is not a spread, we're adding a single: |
| 5691 // %AppendElement($R, value) | 5637 // %AppendElement($R, value) |
| 5692 ZoneList<Expression*>* append_element_args = NewExpressionList(2, zone()); | 5638 ZoneList<Expression*>* append_element_args = NewExpressionList(2); |
| 5693 append_element_args->Add(factory()->NewVariableProxy(result), zone()); | 5639 append_element_args->Add(factory()->NewVariableProxy(result), zone()); |
| 5694 append_element_args->Add(value, zone()); | 5640 append_element_args->Add(value, zone()); |
| 5695 do_block->statements()->Add( | 5641 do_block->statements()->Add( |
| 5696 factory()->NewExpressionStatement( | 5642 factory()->NewExpressionStatement( |
| 5697 factory()->NewCallRuntime(Runtime::kAppendElement, | 5643 factory()->NewCallRuntime(Runtime::kAppendElement, |
| 5698 append_element_args, kNoSourcePosition), | 5644 append_element_args, kNoSourcePosition), |
| 5699 kNoSourcePosition), | 5645 kNoSourcePosition), |
| 5700 zone()); | 5646 zone()); |
| 5701 } else { | 5647 } else { |
| 5702 // If it's a spread, we're adding a for/of loop iterating through it. | 5648 // If it's a spread, we're adding a for/of loop iterating through it. |
| 5703 Variable* each = NewTemporary(ast_value_factory()->dot_for_string()); | 5649 Variable* each = NewTemporary(ast_value_factory()->dot_for_string()); |
| 5704 Expression* subject = spread->expression(); | 5650 Expression* subject = spread->expression(); |
| 5705 // %AppendElement($R, each) | 5651 // %AppendElement($R, each) |
| 5706 Statement* append_body; | 5652 Statement* append_body; |
| 5707 { | 5653 { |
| 5708 ZoneList<Expression*>* append_element_args = | 5654 ZoneList<Expression*>* append_element_args = NewExpressionList(2); |
| 5709 NewExpressionList(2, zone()); | |
| 5710 append_element_args->Add(factory()->NewVariableProxy(result), zone()); | 5655 append_element_args->Add(factory()->NewVariableProxy(result), zone()); |
| 5711 append_element_args->Add(factory()->NewVariableProxy(each), zone()); | 5656 append_element_args->Add(factory()->NewVariableProxy(each), zone()); |
| 5712 append_body = factory()->NewExpressionStatement( | 5657 append_body = factory()->NewExpressionStatement( |
| 5713 factory()->NewCallRuntime(Runtime::kAppendElement, | 5658 factory()->NewCallRuntime(Runtime::kAppendElement, |
| 5714 append_element_args, kNoSourcePosition), | 5659 append_element_args, kNoSourcePosition), |
| 5715 kNoSourcePosition); | 5660 kNoSourcePosition); |
| 5716 } | 5661 } |
| 5717 // for (each of spread) %AppendElement($R, each) | 5662 // for (each of spread) %AppendElement($R, each) |
| 5718 ForEachStatement* loop = factory()->NewForEachStatement( | 5663 ForEachStatement* loop = factory()->NewForEachStatement( |
| 5719 ForEachStatement::ITERATE, nullptr, kNoSourcePosition); | 5664 ForEachStatement::ITERATE, nullptr, kNoSourcePosition); |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5911 Expression* assignment = | 5856 Expression* assignment = |
| 5912 factory()->NewAssignment(Token::ASSIGN, output_proxy, | 5857 factory()->NewAssignment(Token::ASSIGN, output_proxy, |
| 5913 factory()->NewUndefinedLiteral(nopos), nopos); | 5858 factory()->NewUndefinedLiteral(nopos), nopos); |
| 5914 initialize_output = factory()->NewExpressionStatement(assignment, nopos); | 5859 initialize_output = factory()->NewExpressionStatement(assignment, nopos); |
| 5915 } | 5860 } |
| 5916 | 5861 |
| 5917 // let iterator = iterable[Symbol.iterator]; | 5862 // let iterator = iterable[Symbol.iterator]; |
| 5918 Variable* var_iterator = NewTemporary(ast_value_factory()->empty_string()); | 5863 Variable* var_iterator = NewTemporary(ast_value_factory()->empty_string()); |
| 5919 Statement* get_iterator; | 5864 Statement* get_iterator; |
| 5920 { | 5865 { |
| 5921 Expression* iterator = GetIterator(iterable, factory(), nopos); | 5866 Expression* iterator = GetIterator(iterable, nopos); |
| 5922 Expression* iterator_proxy = factory()->NewVariableProxy(var_iterator); | 5867 Expression* iterator_proxy = factory()->NewVariableProxy(var_iterator); |
| 5923 Expression* assignment = factory()->NewAssignment( | 5868 Expression* assignment = factory()->NewAssignment( |
| 5924 Token::ASSIGN, iterator_proxy, iterator, nopos); | 5869 Token::ASSIGN, iterator_proxy, iterator, nopos); |
| 5925 get_iterator = factory()->NewExpressionStatement(assignment, nopos); | 5870 get_iterator = factory()->NewExpressionStatement(assignment, nopos); |
| 5926 } | 5871 } |
| 5927 | 5872 |
| 5928 // if (!IS_RECEIVER(iterator)) throw MakeTypeError(kSymbolIteratorInvalid); | 5873 // if (!IS_RECEIVER(iterator)) throw MakeTypeError(kSymbolIteratorInvalid); |
| 5929 Statement* validate_iterator; | 5874 Statement* validate_iterator; |
| 5930 { | 5875 { |
| 5931 Expression* is_receiver_call; | 5876 Expression* is_receiver_call; |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6120 Expression* kthrow = | 6065 Expression* kthrow = |
| 6121 factory()->NewSmiLiteral(JSGeneratorObject::kThrow, nopos); | 6066 factory()->NewSmiLiteral(JSGeneratorObject::kThrow, nopos); |
| 6122 Expression* assignment = | 6067 Expression* assignment = |
| 6123 factory()->NewAssignment(Token::ASSIGN, mode_proxy, kthrow, nopos); | 6068 factory()->NewAssignment(Token::ASSIGN, mode_proxy, kthrow, nopos); |
| 6124 set_mode_throw = factory()->NewExpressionStatement(assignment, nopos); | 6069 set_mode_throw = factory()->NewExpressionStatement(assignment, nopos); |
| 6125 } | 6070 } |
| 6126 | 6071 |
| 6127 // input = function.sent; | 6072 // input = function.sent; |
| 6128 Statement* get_input; | 6073 Statement* get_input; |
| 6129 { | 6074 { |
| 6130 Expression* function_sent = FunctionSentExpression(factory(), nopos); | 6075 Expression* function_sent = FunctionSentExpression(nopos); |
| 6131 Expression* input_proxy = factory()->NewVariableProxy(var_input); | 6076 Expression* input_proxy = factory()->NewVariableProxy(var_input); |
| 6132 Expression* assignment = factory()->NewAssignment( | 6077 Expression* assignment = factory()->NewAssignment( |
| 6133 Token::ASSIGN, input_proxy, function_sent, nopos); | 6078 Token::ASSIGN, input_proxy, function_sent, nopos); |
| 6134 get_input = factory()->NewExpressionStatement(assignment, nopos); | 6079 get_input = factory()->NewExpressionStatement(assignment, nopos); |
| 6135 } | 6080 } |
| 6136 | 6081 |
| 6137 // if (mode === kReturn) { | 6082 // if (mode === kReturn) { |
| 6138 // return {value: output.value, done: true}; | 6083 // return {value: output.value, done: true}; |
| 6139 // } | 6084 // } |
| 6140 Statement* maybe_return_value; | 6085 Statement* maybe_return_value; |
| (...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6723 node->Print(Isolate::Current()); | 6668 node->Print(Isolate::Current()); |
| 6724 } | 6669 } |
| 6725 #endif // DEBUG | 6670 #endif // DEBUG |
| 6726 | 6671 |
| 6727 #undef CHECK_OK | 6672 #undef CHECK_OK |
| 6728 #undef CHECK_OK_VOID | 6673 #undef CHECK_OK_VOID |
| 6729 #undef CHECK_FAILED | 6674 #undef CHECK_FAILED |
| 6730 | 6675 |
| 6731 } // namespace internal | 6676 } // namespace internal |
| 6732 } // namespace v8 | 6677 } // namespace v8 |
| OLD | NEW |