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

Unified Diff: runtime/vm/parser.h

Issue 447003003: Introduce await (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/parser.h
diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h
index b2fbfe64f738404fcdd7f834e1e90183c2e39638..c5b1b22da8c5ca449053fca2efeda55b9fbd203a 100644
--- a/runtime/vm/parser.h
+++ b/runtime/vm/parser.h
@@ -47,11 +47,14 @@ class ParsedFunction : public ZoneAllocated {
saved_current_context_var_(NULL),
saved_entry_context_var_(NULL),
expression_temp_var_(NULL),
+ await_temps_scope_(NULL),
deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()),
first_parameter_index_(0),
first_stack_local_index_(0),
num_copied_params_(0),
num_stack_locals_(0),
+ num_awaits_(0),
+ seen_await_expr_(false),
isolate_(isolate) {
ASSERT(function.IsZoneHandle());
}
@@ -123,6 +126,23 @@ class ParsedFunction : public ZoneAllocated {
void AllocateVariables();
+ void set_await_temps_scope(LocalScope* scope) {
+ ASSERT(await_temps_scope_ == NULL);
+ await_temps_scope_ = scope;
+ }
+ LocalScope* await_temps_scope() const {
+ ASSERT(await_temps_scope_ != NULL);
+ return await_temps_scope_;
+ }
+
+ int num_awaits() const { return num_awaits_; }
+ void record_await() {
+ num_awaits_++;
+ seen_await_expr_ = true;
+ }
+ void reset_seen_await() { seen_await_expr_ = false; }
+ bool seen_await() const { return seen_await_expr_; }
hausner 2014/08/07 21:48:43 I'd prefer have_seen_await() and have_seen_await_e
Michael Lippautz (Google) 2014/08/08 18:12:18 Done.
+
Isolate* isolate() const { return isolate_; }
private:
@@ -134,12 +154,15 @@ class ParsedFunction : public ZoneAllocated {
LocalVariable* saved_current_context_var_;
LocalVariable* saved_entry_context_var_;
LocalVariable* expression_temp_var_;
+ LocalScope* await_temps_scope_;
ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_;
int first_parameter_index_;
int first_stack_local_index_;
int num_copied_params_;
int num_stack_locals_;
+ int num_awaits_;
+ bool seen_await_expr_;
Isolate* isolate_;
@@ -486,6 +509,7 @@ class Parser : public ValueObject {
void OpenBlock();
void OpenLoopBlock();
void OpenFunctionBlock(const Function& func);
+ void OpenAsyncClosure();
RawFunction* OpenAsyncFunction(intptr_t formal_param_pos);
SequenceNode* CloseBlock();
SequenceNode* CloseAsyncFunction(const Function& closure,
@@ -570,6 +594,9 @@ class Parser : public ValueObject {
static const bool kAllowConst = false;
static const bool kConsumeCascades = true;
static const bool kNoCascades = false;
+ AstNode* ParseAwaitableExpr(bool require_compiletime_const,
+ bool consume_cascades);
+ AstNode* ParseAwaitExpr();
AstNode* ParseExpr(bool require_compiletime_const, bool consume_cascades);
AstNode* ParseExprList();
AstNode* ParseConditionalExpr();

Powered by Google App Engine
This is Rietveld 408576698