| Index: src/ast.cc
|
| diff --git a/src/ast.cc b/src/ast.cc
|
| index 9ef8af411cbd158226f9097359ac235dcf849b54..6d69246de10bf3bfc98a3476553581f1044add15 100644
|
| --- a/src/ast.cc
|
| +++ b/src/ast.cc
|
| @@ -544,6 +544,56 @@ bool FunctionDeclaration::IsInlineable() const {
|
| }
|
|
|
|
|
| +SpreadOperation::SpreadOperation(Zone* zone, AstNodeFactory* factory,
|
| + AstValueFactory* value_factory, Scope* scope,
|
| + Expression* expression, int pos) :
|
| + Expression(zone, pos), expression_(expression) {
|
| + Variable* iterator = scope->DeclarationScope()->NewTemporary(
|
| + value_factory->dot_iterator_string());
|
| + Variable* result = scope->DeclarationScope()->NewTemporary(
|
| + value_factory->dot_result_string());
|
| +
|
| + // var iterator = subject[Symbol.iterator]();
|
| + assign_iterator_ = factory->NewAssignment(
|
| + Token::ASSIGN, factory->NewVariableProxy(iterator),
|
| + factory->GetIterator(expression), pos);
|
| +
|
| + // var result = iterator.next();
|
| + {
|
| + Expression* iterator_proxy = factory->NewVariableProxy(iterator);
|
| + Expression* next_literal = factory->NewStringLiteral(
|
| + value_factory->next_string(), RelocInfo::kNoPosition);
|
| + Expression* next_property = factory->NewProperty(
|
| + iterator_proxy, next_literal, RelocInfo::kNoPosition);
|
| + ZoneList<Expression*>* next_arguments =
|
| + new(zone) ZoneList<Expression*>(0, zone);
|
| + Expression* next_call = factory->NewCall(next_property, next_arguments,
|
| + pos);
|
| + Expression* result_proxy = factory->NewVariableProxy(result);
|
| + next_result_ = factory->NewAssignment(Token::ASSIGN, result_proxy,
|
| + next_call, pos);
|
| + }
|
| +
|
| + // result.done
|
| + {
|
| + Expression* done_literal = factory->NewStringLiteral(
|
| + value_factory->done_string(), RelocInfo::kNoPosition);
|
| + Expression* result_proxy = factory->NewVariableProxy(result);
|
| + result_done_ = factory->NewProperty(
|
| + result_proxy, done_literal, RelocInfo::kNoPosition);
|
| + }
|
| +
|
| + // result.value
|
| + {
|
| + Expression* value_literal = factory->NewStringLiteral(
|
| + value_factory->value_string(), RelocInfo::kNoPosition);
|
| + Expression* result_proxy = factory->NewVariableProxy(result);
|
| + result_value_ = factory->NewProperty(result_proxy, value_literal,
|
| + RelocInfo::kNoPosition);
|
| + }
|
| +}
|
| +
|
| +
|
| // ----------------------------------------------------------------------------
|
| // Recording of type feedback
|
|
|
|
|