Index: src/ast/ast.h |
diff --git a/src/ast/ast.h b/src/ast/ast.h |
index ba67f8f674cdb719fba14d21c5b80edfaa4ae1e2..551d47f9c13adb4442c030f4581e0908672e3534 100644 |
--- a/src/ast/ast.h |
+++ b/src/ast/ast.h |
@@ -2961,8 +2961,11 @@ class EmptyParentheses final : public Expression { |
// (defined at https://tc39.github.io/ecma262/#sec-getiterator). Ignition |
// desugars this into a LoadIC / JSLoadNamed, CallIC, and a type-check to |
// validate return value of the Symbol.iterator() call. |
+enum class IteratorType { kNormal, kAsync }; |
class GetIterator final : public Expression { |
public: |
+ IteratorType hint() const { return hint_; } |
+ |
Expression* iterable() const { return iterable_; } |
void set_iterable(Expression* iterable) { iterable_ = iterable; } |
@@ -2972,6 +2975,10 @@ class GetIterator final : public Expression { |
FeedbackSlotCache* cache) { |
iterator_property_feedback_slot_ = spec->AddLoadICSlot(); |
iterator_call_feedback_slot_ = spec->AddCallICSlot(); |
+ if (hint() == IteratorType::kAsync) { |
+ async_iterator_property_feedback_slot_ = spec->AddLoadICSlot(); |
+ async_iterator_call_feedback_slot_ = spec->AddCallICSlot(); |
+ } |
} |
FeedbackSlot IteratorPropertyFeedbackSlot() const { |
@@ -2982,15 +2989,26 @@ class GetIterator final : public Expression { |
return iterator_call_feedback_slot_; |
} |
+ FeedbackSlot AsyncIteratorPropertyFeedbackSlot() const { |
+ return async_iterator_property_feedback_slot_; |
+ } |
+ |
+ FeedbackSlot AsyncIteratorCallFeedbackSlot() const { |
+ return async_iterator_call_feedback_slot_; |
+ } |
+ |
private: |
friend class AstNodeFactory; |
- explicit GetIterator(Expression* iterable, int pos) |
- : Expression(pos, kGetIterator), iterable_(iterable) {} |
+ explicit GetIterator(Expression* iterable, IteratorType hint, int pos) |
+ : Expression(pos, kGetIterator), hint_(hint), iterable_(iterable) {} |
+ IteratorType hint_; |
Expression* iterable_; |
FeedbackSlot iterator_property_feedback_slot_; |
FeedbackSlot iterator_call_feedback_slot_; |
+ FeedbackSlot async_iterator_property_feedback_slot_; |
+ FeedbackSlot async_iterator_call_feedback_slot_; |
}; |
// ---------------------------------------------------------------------------- |
@@ -3206,6 +3224,11 @@ class AstNodeFactory final BASE_EMBEDDED { |
return NULL; |
} |
+ ForOfStatement* NewForOfStatement(ZoneList<const AstRawString*>* labels, |
+ int pos) { |
+ return new (zone_) ForOfStatement(labels, pos); |
+ } |
+ |
ExpressionStatement* NewExpressionStatement(Expression* expression, int pos) { |
return new (zone_) ExpressionStatement(expression, pos); |
} |
@@ -3572,8 +3595,9 @@ class AstNodeFactory final BASE_EMBEDDED { |
return new (zone_) EmptyParentheses(pos); |
} |
- GetIterator* NewGetIterator(Expression* iterable, int pos) { |
- return new (zone_) GetIterator(iterable, pos); |
+ GetIterator* NewGetIterator(Expression* iterable, IteratorType hint, |
+ int pos) { |
+ return new (zone_) GetIterator(iterable, hint, pos); |
} |
Zone* zone() const { return zone_; } |