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

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

Issue 2692803006: Track the 'awaiter return' call stack use it to detect uncaught exceptions in async functions (Closed)
Patch Set: rmacnak review Created 3 years, 9 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
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 RUNTIME_VM_FLOW_GRAPH_BUILDER_H_ 5 #ifndef RUNTIME_VM_FLOW_GRAPH_BUILDER_H_
6 #define RUNTIME_VM_FLOW_GRAPH_BUILDER_H_ 6 #define RUNTIME_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 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 // OSR entry point. 165 // OSR entry point.
166 void PruneUnreachable(); 166 void PruneUnreachable();
167 167
168 // Returns address where the constant 'value' is stored or 0 if not found. 168 // Returns address where the constant 'value' is stored or 0 if not found.
169 static uword FindDoubleConstant(double value); 169 static uword FindDoubleConstant(double value);
170 170
171 Thread* thread() const { return parsed_function().thread(); } 171 Thread* thread() const { return parsed_function().thread(); }
172 Isolate* isolate() const { return parsed_function().isolate(); } 172 Isolate* isolate() const { return parsed_function().isolate(); }
173 Zone* zone() const { return parsed_function().zone(); } 173 Zone* zone() const { return parsed_function().zone(); }
174 174
175 void AppendAwaitTokenPosition(TokenPosition token_pos);
176
177 ZoneGrowableArray<TokenPosition>* await_token_positions() const {
178 return await_token_positions_;
179 }
180
175 private: 181 private:
176 friend class NestedStatement; // Explicit access to nesting_stack_. 182 friend class NestedStatement; // Explicit access to nesting_stack_.
177 friend class Intrinsifier; 183 friend class Intrinsifier;
178 184
179 intptr_t parameter_count() const { 185 intptr_t parameter_count() const {
180 return num_copied_params_ + num_non_copied_params_; 186 return num_copied_params_ + num_non_copied_params_;
181 } 187 }
182 intptr_t variable_count() const { 188 intptr_t variable_count() const {
183 return parameter_count() + num_stack_locals_; 189 return parameter_count() + num_stack_locals_;
184 } 190 }
(...skipping 20 matching lines...) Expand all
205 211
206 // A stack of enclosing nested statements. 212 // A stack of enclosing nested statements.
207 NestedStatement* nesting_stack_; 213 NestedStatement* nesting_stack_;
208 214
209 // The deopt id of the OSR entry orCompiler::kNoOSRDeoptId if not compiling 215 // The deopt id of the OSR entry orCompiler::kNoOSRDeoptId if not compiling
210 // for OSR. 216 // for OSR.
211 const intptr_t osr_id_; 217 const intptr_t osr_id_;
212 218
213 intptr_t jump_count_; 219 intptr_t jump_count_;
214 ZoneGrowableArray<JoinEntryInstr*>* await_joins_; 220 ZoneGrowableArray<JoinEntryInstr*>* await_joins_;
221 ZoneGrowableArray<TokenPosition>* await_token_positions_;
215 222
216 DISALLOW_IMPLICIT_CONSTRUCTORS(FlowGraphBuilder); 223 DISALLOW_IMPLICIT_CONSTRUCTORS(FlowGraphBuilder);
217 }; 224 };
218 225
219 226
220 // Translate an AstNode to a control-flow graph fragment for its effects 227 // Translate an AstNode to a control-flow graph fragment for its effects
221 // (e.g., a statement or an expression in an effect context). Implements a 228 // (e.g., a statement or an expression in an effect context). Implements a
222 // function from an AstNode and next temporary index to a graph fragment 229 // function from an AstNode and next temporary index to a graph fragment
223 // with a single entry and at most one exit. The fragment is represented by 230 // with a single entry and at most one exit. The fragment is represented by
224 // an (entry, exit) pair of Instruction pointers: 231 // an (entry, exit) pair of Instruction pointers:
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 // Output parameters. 563 // Output parameters.
557 GrowableArray<TargetEntryInstr**> true_successor_addresses_; 564 GrowableArray<TargetEntryInstr**> true_successor_addresses_;
558 GrowableArray<TargetEntryInstr**> false_successor_addresses_; 565 GrowableArray<TargetEntryInstr**> false_successor_addresses_;
559 566
560 TokenPosition condition_token_pos_; 567 TokenPosition condition_token_pos_;
561 }; 568 };
562 569
563 } // namespace dart 570 } // namespace dart
564 571
565 #endif // RUNTIME_VM_FLOW_GRAPH_BUILDER_H_ 572 #endif // RUNTIME_VM_FLOW_GRAPH_BUILDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698