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 |