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

Side by Side Diff: runtime/vm/flow_graph_builder.h

Issue 484933003: Await it! (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: rebase Created 6 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/ast_transformer.cc ('k') | runtime/vm/flow_graph_builder.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_FLOW_GRAPH_BUILDER_H_ 5 #ifndef VM_FLOW_GRAPH_BUILDER_H_
6 #define VM_FLOW_GRAPH_BUILDER_H_ 6 #define VM_FLOW_GRAPH_BUILDER_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "platform/globals.h" 9 #include "platform/globals.h"
10 #include "vm/allocation.h" 10 #include "vm/allocation.h"
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 intptr_t loop_depth() const { return loop_depth_; } 172 intptr_t loop_depth() const { return loop_depth_; }
173 173
174 // Manage the currently active try index. 174 // Manage the currently active try index.
175 void set_try_index(intptr_t value) { try_index_ = value; } 175 void set_try_index(intptr_t value) { try_index_ = value; }
176 intptr_t try_index() const { return try_index_; } 176 intptr_t try_index() const { return try_index_; }
177 177
178 // Manage the currently active catch-handler try index. 178 // Manage the currently active catch-handler try index.
179 void set_catch_try_index(intptr_t value) { catch_try_index_ = value; } 179 void set_catch_try_index(intptr_t value) { catch_try_index_ = value; }
180 intptr_t catch_try_index() const { return catch_try_index_; } 180 intptr_t catch_try_index() const { return catch_try_index_; }
181 181
182 intptr_t next_await_counter() { return jump_cnt_++; }
183
184 ZoneGrowableArray<intptr_t>* await_levels() const { return await_levels_; }
185 ZoneGrowableArray<JoinEntryInstr*>* await_joins() const {
186 return await_joins_;
187 }
188
182 void AddCatchEntry(CatchBlockEntryInstr* entry); 189 void AddCatchEntry(CatchBlockEntryInstr* entry);
183 190
184 intptr_t num_copied_params() const { 191 intptr_t num_copied_params() const {
185 return num_copied_params_; 192 return num_copied_params_;
186 } 193 }
187 intptr_t num_non_copied_params() const { 194 intptr_t num_non_copied_params() const {
188 return num_non_copied_params_; 195 return num_non_copied_params_;
189 } 196 }
190 intptr_t num_stack_locals() const { 197 intptr_t num_stack_locals() const {
191 return num_stack_locals_; 198 return num_stack_locals_;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 NestedStatement* nesting_stack_; 267 NestedStatement* nesting_stack_;
261 268
262 // The deopt id of the OSR entry or Isolate::kNoDeoptId if not compiling 269 // The deopt id of the OSR entry or Isolate::kNoDeoptId if not compiling
263 // for OSR. 270 // for OSR.
264 const intptr_t osr_id_; 271 const intptr_t osr_id_;
265 272
266 // The graph is being rebuilt for the optimizing compiler. 273 // The graph is being rebuilt for the optimizing compiler.
267 // Do not generate a different graph based on this flag. 274 // Do not generate a different graph based on this flag.
268 const bool is_optimizing_; 275 const bool is_optimizing_;
269 276
277 intptr_t jump_cnt_;
278 ZoneGrowableArray<JoinEntryInstr*>* await_joins_;
279 ZoneGrowableArray<intptr_t>* await_levels_;
280
270 DISALLOW_IMPLICIT_CONSTRUCTORS(FlowGraphBuilder); 281 DISALLOW_IMPLICIT_CONSTRUCTORS(FlowGraphBuilder);
271 }; 282 };
272 283
273 284
274 // Translate an AstNode to a control-flow graph fragment for its effects 285 // Translate an AstNode to a control-flow graph fragment for its effects
275 // (e.g., a statement or an expression in an effect context). Implements a 286 // (e.g., a statement or an expression in an effect context). Implements a
276 // function from an AstNode and next temporary index to a graph fragment 287 // function from an AstNode and next temporary index to a graph fragment
277 // with a single entry and at most one exit. The fragment is represented by 288 // with a single entry and at most one exit. The fragment is represented by
278 // an (entry, exit) pair of Instruction pointers: 289 // an (entry, exit) pair of Instruction pointers:
279 // 290 //
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 const AbstractType& dst_type, 461 const AbstractType& dst_type,
451 const String& dst_name); 462 const String& dst_name);
452 463
453 // Helpers for allocating and deallocating temporary locals on top of the 464 // Helpers for allocating and deallocating temporary locals on top of the
454 // expression stack. 465 // expression stack.
455 LocalVariable* EnterTempLocalScope(Value* value); 466 LocalVariable* EnterTempLocalScope(Value* value);
456 Definition* ExitTempLocalScope(LocalVariable* var); 467 Definition* ExitTempLocalScope(LocalVariable* var);
457 468
458 void BuildLetTempExpressions(LetNode* node); 469 void BuildLetTempExpressions(LetNode* node);
459 470
471 void BuildAwaitJump(LocalScope* lookup_scope,
472 const intptr_t old_ctx_level,
473 JoinEntryInstr* target);
474
460 Isolate* isolate() const { return owner()->isolate(); } 475 Isolate* isolate() const { return owner()->isolate(); }
461 476
462 private: 477 private:
463 friend class TempLocalScope; // For ReturnDefinition. 478 friend class TempLocalScope; // For ReturnDefinition.
464 479
465 // Helper to drop the result value. 480 // Helper to drop the result value.
466 virtual void ReturnValue(Value* value) { 481 virtual void ReturnValue(Value* value) {
467 Do(new DropTempsInstr(0, value)); 482 Do(new DropTempsInstr(0, value));
468 } 483 }
469 484
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 // Output parameters. 603 // Output parameters.
589 GrowableArray<TargetEntryInstr**> true_successor_addresses_; 604 GrowableArray<TargetEntryInstr**> true_successor_addresses_;
590 GrowableArray<TargetEntryInstr**> false_successor_addresses_; 605 GrowableArray<TargetEntryInstr**> false_successor_addresses_;
591 606
592 intptr_t condition_token_pos_; 607 intptr_t condition_token_pos_;
593 }; 608 };
594 609
595 } // namespace dart 610 } // namespace dart
596 611
597 #endif // VM_FLOW_GRAPH_BUILDER_H_ 612 #endif // VM_FLOW_GRAPH_BUILDER_H_
OLDNEW
« no previous file with comments | « runtime/vm/ast_transformer.cc ('k') | runtime/vm/flow_graph_builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698