Index: src/parsing/parser.cc |
diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc |
index ebe17b2a75e07782a74efe4c2beaac1d9c937d56..65cdd5c9a5884c467a62f2ed01b13535c3ac9f22 100644 |
--- a/src/parsing/parser.cc |
+++ b/src/parsing/parser.cc |
@@ -504,15 +504,6 @@ Literal* Parser::ExpressionFromLiteral(Token::Value token, int pos) { |
return NULL; |
} |
-Expression* Parser::GetIterator(Expression* iterable, int pos) { |
- Expression* iterator_symbol_literal = |
- factory()->NewSymbolLiteral("iterator_symbol", kNoSourcePosition); |
- Expression* prop = |
- factory()->NewProperty(iterable, iterator_symbol_literal, pos); |
- ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(0, zone()); |
- return factory()->NewCall(prop, args, pos); |
-} |
- |
void Parser::MarkTailPosition(Expression* expression) { |
expression->MarkTail(); |
} |
@@ -2078,7 +2069,8 @@ Statement* Parser::InitializeForOfStatement(ForOfStatement* for_of, |
{ |
assign_iterator = factory()->NewAssignment( |
Token::ASSIGN, factory()->NewVariableProxy(iterator), |
- GetIterator(iterable, iterable->position()), iterable->position()); |
+ factory()->NewGetIterator(iterable, iterable->position()), |
+ iterable->position()); |
} |
// !%_IsJSReceiver(result = iterator.next()) && |
@@ -4569,8 +4561,7 @@ void Parser::SetFunctionName(Expression* value, const AstRawString* name) { |
// let mode = kNext; |
// let output = undefined; |
// |
-// let iterator = iterable[Symbol.iterator](); |
-// if (!IS_RECEIVER(iterator)) throw MakeTypeError(kSymbolIteratorInvalid); |
+// let iterator = GetIterator(iterable); |
// |
// while (true) { |
// // From the generator to the iterator: |
@@ -4677,37 +4668,13 @@ Expression* Parser::RewriteYieldStar(Expression* generator, |
Variable* var_iterator = NewTemporary(ast_value_factory()->empty_string()); |
Statement* get_iterator; |
{ |
- Expression* iterator = GetIterator(iterable, nopos); |
+ Expression* iterator = factory()->NewGetIterator(iterable, nopos); |
Expression* iterator_proxy = factory()->NewVariableProxy(var_iterator); |
Expression* assignment = factory()->NewAssignment( |
Token::ASSIGN, iterator_proxy, iterator, nopos); |
get_iterator = factory()->NewExpressionStatement(assignment, nopos); |
} |
- // if (!IS_RECEIVER(iterator)) throw MakeTypeError(kSymbolIteratorInvalid); |
- Statement* validate_iterator; |
- { |
- Expression* is_receiver_call; |
- { |
- auto args = new (zone()) ZoneList<Expression*>(1, zone()); |
- args->Add(factory()->NewVariableProxy(var_iterator), zone()); |
- is_receiver_call = |
- factory()->NewCallRuntime(Runtime::kInlineIsJSReceiver, args, nopos); |
- } |
- |
- Statement* throw_call; |
- { |
- Expression* call = |
- NewThrowTypeError(MessageTemplate::kSymbolIteratorInvalid, |
- ast_value_factory()->empty_string(), nopos); |
- throw_call = factory()->NewExpressionStatement(call, nopos); |
- } |
- |
- validate_iterator = factory()->NewIfStatement( |
- is_receiver_call, factory()->NewEmptyStatement(nopos), throw_call, |
- nopos); |
- } |
- |
// output = iterator.next(input); |
Statement* call_next; |
{ |
@@ -5012,12 +4979,11 @@ Expression* Parser::RewriteYieldStar(Expression* generator, |
// The rewriter needs to process the get_value statement only, hence we |
// put the preceding statements into an init block. |
- Block* do_block_ = factory()->NewBlock(nullptr, 7, true, nopos); |
+ Block* do_block_ = factory()->NewBlock(nullptr, 6, true, nopos); |
do_block_->statements()->Add(initialize_input, zone()); |
do_block_->statements()->Add(initialize_mode, zone()); |
do_block_->statements()->Add(initialize_output, zone()); |
do_block_->statements()->Add(get_iterator, zone()); |
- do_block_->statements()->Add(validate_iterator, zone()); |
do_block_->statements()->Add(loop, zone()); |
do_block_->statements()->Add(maybe_return_value, zone()); |