Chromium Code Reviews| Index: runtime/vm/parser.h |
| diff --git a/runtime/vm/parser.h b/runtime/vm/parser.h |
| index d249655e9947fd59f05c10031ed9d09a4c967015..258a00994498fc7648f79cc41b5795822031b18a 100644 |
| --- a/runtime/vm/parser.h |
| +++ b/runtime/vm/parser.h |
| @@ -48,7 +48,6 @@ class ParsedFunction : public ZoneAllocated { |
| saved_entry_context_var_(NULL), |
| expression_temp_var_(NULL), |
| finally_return_temp_var_(NULL), |
| - await_temps_scope_(NULL), |
| deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()), |
| first_parameter_index_(0), |
| first_stack_local_index_(0), |
| @@ -56,7 +55,7 @@ class ParsedFunction : public ZoneAllocated { |
| num_stack_locals_(0), |
| have_seen_await_expr_(false), |
| saved_try_ctx_(NULL), |
| - async_saved_try_ctx_(NULL), |
| + async_saved_try_ctx_name_(String::ZoneHandle(isolate, String::null())), |
| isolate_(isolate) { |
| ASSERT(function.IsZoneHandle()); |
| } |
| @@ -142,15 +141,6 @@ 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_; |
| - } |
| - |
| void record_await() { |
| have_seen_await_expr_ = true; |
| } |
| @@ -158,20 +148,21 @@ class ParsedFunction : public ZoneAllocated { |
| bool have_seen_await() const { return have_seen_await_expr_; } |
| void set_saved_try_ctx(LocalVariable* saved_try_ctx) { |
| - ASSERT((saved_try_ctx != NULL) && !saved_try_ctx->is_captured()); |
| + ASSERT((saved_try_ctx == NULL) || !saved_try_ctx->is_captured()); |
| saved_try_ctx_ = saved_try_ctx; |
| } |
| LocalVariable* saved_try_ctx() const { return saved_try_ctx_; } |
| - void set_async_saved_try_ctx(LocalVariable* async_saved_try_ctx) { |
| - ASSERT((async_saved_try_ctx != NULL) && async_saved_try_ctx->is_captured()); |
| - async_saved_try_ctx_ = async_saved_try_ctx; |
| + void set_async_saved_try_ctx_name(const String& async_saved_try_ctx_name) { |
| + async_saved_try_ctx_name_ = async_saved_try_ctx_name.raw(); |
| + } |
| + RawString* async_saved_try_ctx_name() const { |
| + return async_saved_try_ctx_name_.raw(); |
| } |
| - LocalVariable* async_saved_try_ctx() const { return async_saved_try_ctx_; } |
| void reset_saved_try_ctx_vars() { |
| saved_try_ctx_ = NULL; |
| - async_saved_try_ctx_ = NULL; |
| + async_saved_try_ctx_name_ = String::null(); |
| } |
| Isolate* isolate() const { return isolate_; } |
| @@ -186,7 +177,6 @@ class ParsedFunction : public ZoneAllocated { |
| LocalVariable* saved_entry_context_var_; |
| LocalVariable* expression_temp_var_; |
| LocalVariable* finally_return_temp_var_; |
| - LocalScope* await_temps_scope_; |
| ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_; |
| int first_parameter_index_; |
| @@ -195,7 +185,7 @@ class ParsedFunction : public ZoneAllocated { |
| int num_stack_locals_; |
| bool have_seen_await_expr_; |
| LocalVariable* saved_try_ctx_; |
| - LocalVariable* async_saved_try_ctx_; |
| + String& async_saved_try_ctx_name_; |
|
Michael Lippautz (Google)
2014/09/02 18:22:11
It's not ideal that we need to save the symbol in
|
| Isolate* isolate_; |
| @@ -557,6 +547,7 @@ class Parser : public ValueObject { |
| SequenceNode* CloseAsyncFunction(const Function& closure, |
| SequenceNode* closure_node); |
| void CloseAsyncClosure(SequenceNode* body); |
| + void AddAsyncClosureVariables(); |
| LocalVariable* LookupPhaseParameter(); |
| @@ -731,9 +722,10 @@ class Parser : public ValueObject { |
| InvocationMirror::Type type, |
| const Function* func); |
| - void SetupSavedTryContext(LocalScope* saved_try_context_scope, |
| - int16_t try_index, |
| - SequenceNode* target); |
| + void SetupSavedTryContext(LocalVariable* saved_try_context); |
| + void RestoreSavedTryContext(LocalScope* saved_try_context_scope, |
| + int16_t try_index, |
| + SequenceNode* target); |
| void CheckOperatorArity(const MemberDesc& member); |
| @@ -817,6 +809,8 @@ class Parser : public ValueObject { |
| bool unregister_pending_function_; |
| + LocalScope* async_temp_scope_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(Parser); |
| }; |