Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Side by Side Diff: src/parsing/parser.cc

Issue 2274113002: [parser] Clean up (pre)parser traits, part 4 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698