Chromium Code Reviews| 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(); |