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

Unified Diff: src/ast/ast.h

Issue 2637403008: [async-iteration] add support for for-await-of loops in Async Functions (Closed)
Patch Set: [async-iteration] add support for for-await-of loops in Async Functions Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/interpreter/bytecode-generator.h » ('j') | src/parsing/parser.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/ast.h
diff --git a/src/ast/ast.h b/src/ast/ast.h
index d5fffda23912a01696b4cbf9615375764686e370..c661871486c478824db7fccbc4e59a292956d330 100644
--- a/src/ast/ast.h
+++ b/src/ast/ast.h
@@ -2973,8 +2973,13 @@ 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:
+ using Hint = IteratorType;
neis 2017/01/24 12:49:19 I think it's fine to use IteratorType directly bel
caitp 2017/01/24 22:51:55 done
+
+ Hint hint() const { return hint_; }
+
Expression* iterable() const { return iterable_; }
void set_iterable(Expression* iterable) { iterable_ = iterable; }
@@ -2986,6 +2991,14 @@ class GetIterator final : public Expression {
spec->AddSlot(FeedbackVectorSlotKind::LOAD_IC);
iterator_call_feedback_slot_ =
spec->AddSlot(FeedbackVectorSlotKind::CALL_IC);
+
+ if (hint() == Hint::kAsync) {
+ // Can we just re-use the other slots?
+ async_iterator_property_feedback_slot_ =
+ spec->AddSlot(FeedbackVectorSlotKind::LOAD_IC);
+ async_iterator_call_feedback_slot_ =
+ spec->AddSlot(FeedbackVectorSlotKind::CALL_IC);
+ }
}
FeedbackVectorSlot IteratorPropertyFeedbackSlot() const {
@@ -2996,15 +3009,26 @@ class GetIterator final : public Expression {
return iterator_call_feedback_slot_;
}
+ FeedbackVectorSlot AsyncIteratorPropertyFeedbackSlot() const {
+ return async_iterator_property_feedback_slot_;
+ }
+
+ FeedbackVectorSlot 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, Hint hint, int pos)
+ : Expression(pos, kGetIterator), hint_(hint), iterable_(iterable) {}
+ Hint hint_;
Expression* iterable_;
FeedbackVectorSlot iterator_property_feedback_slot_;
FeedbackVectorSlot iterator_call_feedback_slot_;
+ FeedbackVectorSlot async_iterator_property_feedback_slot_;
+ FeedbackVectorSlot async_iterator_call_feedback_slot_;
};
// ----------------------------------------------------------------------------
@@ -3584,8 +3608,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, GetIterator::Hint hint,
+ int pos) {
+ return new (zone_) GetIterator(iterable, hint, pos);
}
Zone* zone() const { return zone_; }
« no previous file with comments | « no previous file | src/interpreter/bytecode-generator.h » ('j') | src/parsing/parser.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698