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

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

Issue 2941483003: Revert "[kernel] Stream everything. Replace .kernel_function with .kernel_offset" (Closed)
Patch Set: Created 3 years, 6 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
« no previous file with comments | « runtime/vm/kernel_binary.cc ('k') | runtime/vm/kernel_binary_flowgraph.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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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_KERNEL_BINARY_FLOWGRAPH_H_ 5 #ifndef RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_
6 #define RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_ 6 #define RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_
7 7
8 #if !defined(DART_PRECOMPILED_RUNTIME) 8 #if !defined(DART_PRECOMPILED_RUNTIME)
9 9
10 #include <map> 10 #include <map>
11 11
12 #include "vm/kernel.h" 12 #include "vm/kernel.h"
13 #include "vm/kernel_binary.h" 13 #include "vm/kernel_binary.h"
14 #include "vm/kernel_to_il.h" 14 #include "vm/kernel_to_il.h"
15 #include "vm/object.h" 15 #include "vm/object.h"
16 16
17 namespace dart { 17 namespace dart {
18 namespace kernel { 18 namespace kernel {
19 19
20 class StreamingDartTypeTranslator { 20 class StreamingDartTypeTranslator {
21 public: 21 public:
22 StreamingDartTypeTranslator(StreamingFlowGraphBuilder* builder, 22 StreamingDartTypeTranslator(StreamingFlowGraphBuilder* builder,
23 bool finalize = false); 23 bool finalize = false);
24 24
25 // Can return a malformed type. 25 // Can return a malformed type.
26 AbstractType& BuildType(); 26 AbstractType& BuildType();
27 // Can return a malformed type.
28 AbstractType& BuildTypeWithoutFinalization();
29 // Is guaranteed to be not malformed. 27 // Is guaranteed to be not malformed.
30 AbstractType& BuildVariableType(); 28 AbstractType& BuildVariableType();
31 29
32 // Will return `TypeArguments::null()` in case any of the arguments are 30 // Will return `TypeArguments::null()` in case any of the arguments are
33 // malformed. 31 // malformed.
34 const TypeArguments& BuildTypeArguments(intptr_t length); 32 const TypeArguments& BuildTypeArguments(intptr_t length);
35 33
36 // Will return `TypeArguments::null()` in case any of the arguments are 34 // Will return `TypeArguments::null()` in case any of the arguments are
37 // malformed. 35 // malformed.
38 const TypeArguments& BuildInstantiatedTypeArguments( 36 const TypeArguments& BuildInstantiatedTypeArguments(
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 intptr_t kernel_offset, 94 intptr_t kernel_offset,
97 const uint8_t* buffer, 95 const uint8_t* buffer,
98 intptr_t buffer_length); 96 intptr_t buffer_length);
99 97
100 virtual ~StreamingScopeBuilder(); 98 virtual ~StreamingScopeBuilder();
101 99
102 ScopeBuildingResult* BuildScopes(); 100 ScopeBuildingResult* BuildScopes();
103 101
104 private: 102 private:
105 void VisitField(); 103 void VisitField();
104 void ReadFieldUntilAnnotation(TokenPosition* position,
105 TokenPosition* end_position,
106 word* flags,
107 intptr_t* parent_offset);
106 108
109 /**
110 * Will read until the function node; as this is optional, will return the tag
111 * (i.e. either kSomething or kNothing).
112 */
113 Tag ReadProcedureUntilFunctionNode(word* kind, intptr_t* parent_offset);
114 void GetTypeParameterInfoForPossibleProcedure(
115 intptr_t outermost_kernel_offset,
116 bool* member_is_procedure,
117 bool* is_factory_procedure,
118 intptr_t* member_type_parameters,
119 intptr_t* member_type_parameters_offset_start);
107 void VisitProcedure(); 120 void VisitProcedure();
108 121
122 /**
123 * Will return binary offset of parent class.
124 */
125 intptr_t ReadConstructorUntilFunctionNode();
109 void VisitConstructor(); 126 void VisitConstructor();
110 127
128 void ReadClassUntilTypeParameters();
129 void ReadClassUntilFields();
130
131 void ReadFunctionNodeUntilTypeParameters(word* async_marker,
132 word* dart_async_marker);
111 void VisitFunctionNode(); 133 void VisitFunctionNode();
134
135 void DiscoverEnclosingElements(Zone* zone,
136 const Function& function,
137 Function* outermost_function,
138 intptr_t* outermost_kernel_offset,
139 intptr_t* parent_class_offset);
140 intptr_t GetParentOffset(intptr_t offset);
141 void GetTypeParameterInfoForClass(intptr_t class_offset,
142 intptr_t* type_paremeter_counts,
143 intptr_t* type_paremeter_offset);
112 void VisitNode(); 144 void VisitNode();
113 void VisitInitializer(); 145 void VisitInitializer();
114 void VisitExpression(); 146 void VisitExpression();
115 void VisitStatement(); 147 void VisitStatement();
116 void VisitArguments(); 148 void VisitArguments();
117 void VisitVariableDeclaration(); 149 void VisitVariableDeclaration();
118 void VisitDartType(); 150 void VisitDartType();
119 void VisitInterfaceType(bool simple); 151 void VisitInterfaceType(bool simple);
120 void VisitFunctionType(bool simple); 152 void VisitFunctionType(bool simple);
121 void VisitTypeParameterType(); 153 void VisitTypeParameterType();
(...skipping 20 matching lines...) Expand all
142 174
143 void AddExceptionVariable(GrowableArray<LocalVariable*>* variables, 175 void AddExceptionVariable(GrowableArray<LocalVariable*>* variables,
144 const char* prefix, 176 const char* prefix,
145 intptr_t nesting_depth); 177 intptr_t nesting_depth);
146 178
147 void AddTryVariables(); 179 void AddTryVariables();
148 void AddCatchVariables(); 180 void AddCatchVariables();
149 void AddIteratorVariable(); 181 void AddIteratorVariable();
150 void AddSwitchVariable(); 182 void AddSwitchVariable();
151 183
184 StringIndex GetNameFromVariableDeclaration(intptr_t kernel_offset);
185
152 // Record an assignment or reference to a variable. If the occurrence is 186 // Record an assignment or reference to a variable. If the occurrence is
153 // in a nested function, ensure that the variable is handled properly as a 187 // in a nested function, ensure that the variable is handled properly as a
154 // captured variable. 188 // captured variable.
155 void LookupVariable(intptr_t declaration_binary_offest); 189 void LookupVariable(intptr_t declaration_binary_offest);
156 190
157 const dart::String& GenerateName(const char* prefix, intptr_t suffix); 191 const dart::String& GenerateName(const char* prefix, intptr_t suffix);
158 192
159 void HandleSpecialLoad(LocalVariable** variable, const dart::String& symbol); 193 void HandleSpecialLoad(LocalVariable** variable, const dart::String& symbol);
160 void LookupCapturedVariableByName(LocalVariable** variable, 194 void LookupCapturedVariableByName(LocalVariable** variable,
161 const dart::String& name); 195 const dart::String& name);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 229
196 bool needs_expr_temp_; 230 bool needs_expr_temp_;
197 TokenPosition first_body_token_position_; 231 TokenPosition first_body_token_position_;
198 232
199 StreamingFlowGraphBuilder* builder_; 233 StreamingFlowGraphBuilder* builder_;
200 StreamingDartTypeTranslator type_translator_; 234 StreamingDartTypeTranslator type_translator_;
201 235
202 word unused_word; 236 word unused_word;
203 intptr_t unused_intptr; 237 intptr_t unused_intptr;
204 TokenPosition unused_tokenposition; 238 TokenPosition unused_tokenposition;
205 NameIndex unused_nameindex;
206 }; 239 };
207 240
208 241
209 // There are several cases when we are compiling constant expressions:
210 //
211 // * constant field initializers:
212 // const FieldName = <expr>;
213 //
214 // * constant expressions:
215 // const [<expr>, ...]
216 // const {<expr> : <expr>, ...}
217 // const Constructor(<expr>, ...)
218 //
219 // * constant default parameters:
220 // f(a, [b = <expr>])
221 // f(a, {b: <expr>})
222 //
223 // * constant values to compare in a [SwitchCase]
224 // case <expr>:
225 //
226 // In all cases `<expr>` must be recursively evaluated and canonicalized at
227 // compile-time.
228 class StreamingConstantEvaluator { 242 class StreamingConstantEvaluator {
229 public: 243 public:
230 explicit StreamingConstantEvaluator(StreamingFlowGraphBuilder* builder); 244 explicit StreamingConstantEvaluator(StreamingFlowGraphBuilder* builder);
231 245
232 virtual ~StreamingConstantEvaluator() {} 246 virtual ~StreamingConstantEvaluator() {}
233 247
234 Instance& EvaluateExpression(intptr_t offset, bool reset_position = true); 248 Instance& EvaluateExpression(intptr_t offset, bool reset_position = true);
235 Instance& EvaluateListLiteral(intptr_t offset, bool reset_position = true); 249 Instance& EvaluateListLiteral(intptr_t offset, bool reset_position = true);
236 Instance& EvaluateMapLiteral(intptr_t offset, bool reset_position = true); 250 Instance& EvaluateMapLiteral(intptr_t offset, bool reset_position = true);
237 Instance& EvaluateConstructorInvocation(intptr_t offset, 251 Instance& EvaluateConstructorInvocation(intptr_t offset,
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 StreamingFlowGraphBuilder(FlowGraphBuilder* flow_graph_builder, 321 StreamingFlowGraphBuilder(FlowGraphBuilder* flow_graph_builder,
308 const uint8_t* buffer, 322 const uint8_t* buffer,
309 intptr_t buffer_length) 323 intptr_t buffer_length)
310 : flow_graph_builder_(flow_graph_builder), 324 : flow_graph_builder_(flow_graph_builder),
311 translation_helper_(flow_graph_builder->translation_helper_), 325 translation_helper_(flow_graph_builder->translation_helper_),
312 zone_(flow_graph_builder->zone_), 326 zone_(flow_graph_builder->zone_),
313 reader_(new Reader(buffer, buffer_length)), 327 reader_(new Reader(buffer, buffer_length)),
314 constant_evaluator_(this), 328 constant_evaluator_(this),
315 type_translator_(this, /* finalize= */ true) {} 329 type_translator_(this, /* finalize= */ true) {}
316 330
331 ~StreamingFlowGraphBuilder() { delete reader_; }
332
333 Fragment BuildExpressionAt(intptr_t kernel_offset);
334 Fragment BuildStatementAt(intptr_t kernel_offset);
335
336 private:
317 StreamingFlowGraphBuilder(TranslationHelper* translation_helper, 337 StreamingFlowGraphBuilder(TranslationHelper* translation_helper,
318 Zone* zone, 338 Zone* zone,
319 const uint8_t* buffer, 339 const uint8_t* buffer,
320 intptr_t buffer_length) 340 intptr_t buffer_length)
321 : flow_graph_builder_(NULL), 341 : flow_graph_builder_(NULL),
322 translation_helper_(*translation_helper), 342 translation_helper_(*translation_helper),
323 zone_(zone), 343 zone_(zone),
324 reader_(new Reader(buffer, buffer_length)), 344 reader_(new Reader(buffer, buffer_length)),
325 constant_evaluator_(this), 345 constant_evaluator_(this),
326 type_translator_(this, /* finalize= */ true) {} 346 type_translator_(this, /* finalize= */ true) {}
327 347
328 ~StreamingFlowGraphBuilder() { delete reader_; }
329
330 FlowGraph* BuildGraph(intptr_t kernel_offset);
331
332 Fragment BuildStatementAt(intptr_t kernel_offset);
333 RawObject* BuildParameterDescriptor(intptr_t kernel_offset);
334 RawObject* EvaluateMetadata(intptr_t kernel_offset);
335
336 private:
337 void DiscoverEnclosingElements(Zone* zone,
338 const Function& function,
339 Function* outermost_function,
340 intptr_t* outermost_kernel_offset,
341 intptr_t* parent_class_offset);
342 intptr_t GetParentOffset(intptr_t offset);
343 void GetTypeParameterInfoForClass(intptr_t class_offset,
344 intptr_t* type_paremeter_counts,
345 intptr_t* type_paremeter_offset);
346 void ReadClassUntilFields();
347 void ReadClassUntilTypeParameters();
348 /**
349 * Will return binary offset of parent class.
350 */
351 intptr_t ReadConstructorUntilFunctionNode();
352 /**
353 * Will read until the function node; as this is optional, will return the tag
354 * (i.e. either kSomething or kNothing).
355 */
356 Tag ReadProcedureUntilFunctionNode(word* kind, intptr_t* parent_offset);
357
358 void ReadFieldUntilAnnotation(NameIndex* canonical_name,
359 TokenPosition* position,
360 TokenPosition* end_position,
361 word* flags,
362 intptr_t* parent_offset);
363 void GetTypeParameterInfoForPossibleProcedure(
364 intptr_t outermost_kernel_offset,
365 bool* member_is_procedure,
366 bool* is_factory_procedure,
367 intptr_t* member_type_parameters,
368 intptr_t* member_type_parameters_offset_start);
369 void ReadFunctionNodeUntilTypeParameters(TokenPosition* position,
370 TokenPosition* end_position,
371 word* async_marker,
372 word* dart_async_marker);
373 /**
374 * Will return kernel offset for parent class if reading a constructor.
375 * Will otherwise return -1.
376 */
377 intptr_t ReadUntilFunctionNode();
378 StringIndex GetNameFromVariableDeclaration(intptr_t kernel_offset);
379
380 FlowGraph* BuildGraphOfStaticFieldInitializer();
381 FlowGraph* BuildGraphOfFieldAccessor(LocalVariable* setter_value);
382 void SetupDefaultParameterValues();
383 Fragment BuildFieldInitializer(NameIndex canonical_name);
384 Fragment BuildInitializers(intptr_t constructor_class_parent_offset);
385 FlowGraph* BuildGraphOfImplicitClosureFunction(const Function& function);
386 FlowGraph* BuildGraphOfFunction(
387 bool is_in_builtin_library_toplevel,
388 intptr_t constructor_class_parent_offset = -1);
389 Fragment BuildGetMainClosure();
390
391 Fragment BuildExpression(TokenPosition* position = NULL); 348 Fragment BuildExpression(TokenPosition* position = NULL);
392 Fragment BuildStatement(); 349 Fragment BuildStatement();
393 350
394 intptr_t ReaderOffset(); 351 intptr_t ReaderOffset();
395 void SetOffset(intptr_t offset); 352 void SetOffset(intptr_t offset);
396 void SkipBytes(intptr_t skip); 353 void SkipBytes(intptr_t skip);
397 bool ReadBool(); 354 bool ReadBool();
398 uint8_t ReadByte(); 355 uint8_t ReadByte();
399 uint32_t ReadUInt(); 356 uint32_t ReadUInt();
400 uint32_t PeekUInt(); 357 uint32_t PeekUInt();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 void catch_depth_dec(); 392 void catch_depth_dec();
436 void try_depth_inc(); 393 void try_depth_inc();
437 void try_depth_dec(); 394 void try_depth_dec();
438 intptr_t CurrentTryIndex(); 395 intptr_t CurrentTryIndex();
439 intptr_t AllocateTryIndex(); 396 intptr_t AllocateTryIndex();
440 LocalVariable* CurrentException(); 397 LocalVariable* CurrentException();
441 LocalVariable* CurrentStackTrace(); 398 LocalVariable* CurrentStackTrace();
442 CatchBlock* catch_block(); 399 CatchBlock* catch_block();
443 ActiveClass* active_class(); 400 ActiveClass* active_class();
444 ScopeBuildingResult* scopes(); 401 ScopeBuildingResult* scopes();
445 void set_scopes(ScopeBuildingResult* scope);
446 ParsedFunction* parsed_function(); 402 ParsedFunction* parsed_function();
447 TryFinallyBlock* try_finally_block(); 403 TryFinallyBlock* try_finally_block();
448 SwitchBlock* switch_block(); 404 SwitchBlock* switch_block();
449 BreakableBlock* breakable_block(); 405 BreakableBlock* breakable_block();
450 GrowableArray<YieldContinuation>& yield_continuations(); 406 GrowableArray<YieldContinuation>& yield_continuations();
451 Value* stack(); 407 Value* stack();
452 Value* Pop(); 408 Value* Pop();
453 409
454 Tag PeekArgumentsFirstPositionalTag(); 410 Tag PeekArgumentsFirstPositionalTag();
455 const TypeArguments& PeekArgumentsInstantiatedType(const dart::Class& klass); 411 const TypeArguments& PeekArgumentsInstantiatedType(const dart::Class& klass);
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 Fragment BuildStringConcatenation(TokenPosition* position); 530 Fragment BuildStringConcatenation(TokenPosition* position);
575 Fragment BuildIsExpression(TokenPosition* position); 531 Fragment BuildIsExpression(TokenPosition* position);
576 Fragment BuildAsExpression(TokenPosition* position); 532 Fragment BuildAsExpression(TokenPosition* position);
577 Fragment BuildSymbolLiteral(TokenPosition* position); 533 Fragment BuildSymbolLiteral(TokenPosition* position);
578 Fragment BuildTypeLiteral(TokenPosition* position); 534 Fragment BuildTypeLiteral(TokenPosition* position);
579 Fragment BuildThisExpression(TokenPosition* position); 535 Fragment BuildThisExpression(TokenPosition* position);
580 Fragment BuildRethrow(TokenPosition* position); 536 Fragment BuildRethrow(TokenPosition* position);
581 Fragment BuildThrow(TokenPosition* position); 537 Fragment BuildThrow(TokenPosition* position);
582 Fragment BuildListLiteral(bool is_const, TokenPosition* position); 538 Fragment BuildListLiteral(bool is_const, TokenPosition* position);
583 Fragment BuildMapLiteral(bool is_const, TokenPosition* position); 539 Fragment BuildMapLiteral(bool is_const, TokenPosition* position);
584 Fragment BuildFunctionExpression();
585 Fragment BuildLet(TokenPosition* position); 540 Fragment BuildLet(TokenPosition* position);
586 Fragment BuildBigIntLiteral(TokenPosition* position); 541 Fragment BuildBigIntLiteral(TokenPosition* position);
587 Fragment BuildStringLiteral(TokenPosition* position); 542 Fragment BuildStringLiteral(TokenPosition* position);
588 Fragment BuildIntLiteral(uint8_t payload, TokenPosition* position); 543 Fragment BuildIntLiteral(uint8_t payload, TokenPosition* position);
589 Fragment BuildIntLiteral(bool is_negative, TokenPosition* position); 544 Fragment BuildIntLiteral(bool is_negative, TokenPosition* position);
590 Fragment BuildDoubleLiteral(TokenPosition* position); 545 Fragment BuildDoubleLiteral(TokenPosition* position);
591 Fragment BuildBoolLiteral(bool value, TokenPosition* position); 546 Fragment BuildBoolLiteral(bool value, TokenPosition* position);
592 Fragment BuildNullLiteral(TokenPosition* position); 547 Fragment BuildNullLiteral(TokenPosition* position);
593 548
594 Fragment BuildInvalidStatement(); 549 Fragment BuildInvalidStatement();
595 Fragment BuildExpressionStatement(); 550 Fragment BuildExpressionStatement();
596 Fragment BuildBlock(); 551 Fragment BuildBlock();
597 Fragment BuildEmptyStatement(); 552 Fragment BuildEmptyStatement();
598 Fragment BuildAssertStatement(); 553 Fragment BuildAssertStatement();
599 Fragment BuildLabeledStatement(); 554 Fragment BuildLabeledStatement();
600 Fragment BuildBreakStatement(); 555 Fragment BuildBreakStatement();
601 Fragment BuildWhileStatement(); 556 Fragment BuildWhileStatement();
602 Fragment BuildDoStatement(); 557 Fragment BuildDoStatement();
603 Fragment BuildForStatement(); 558 Fragment BuildForStatement();
604 Fragment BuildForInStatement(bool async); 559 Fragment BuildForInStatement(bool async);
605 Fragment BuildSwitchStatement(); 560 Fragment BuildSwitchStatement();
606 Fragment BuildContinueSwitchStatement(); 561 Fragment BuildContinueSwitchStatement();
607 Fragment BuildIfStatement(); 562 Fragment BuildIfStatement();
608 Fragment BuildReturnStatement(); 563 Fragment BuildReturnStatement();
609 Fragment BuildTryCatch(); 564 Fragment BuildTryCatch();
610 Fragment BuildTryFinally(); 565 Fragment BuildTryFinally();
611 Fragment BuildYieldStatement(); 566 Fragment BuildYieldStatement();
612 Fragment BuildVariableDeclaration(); 567 Fragment BuildVariableDeclaration();
613 Fragment BuildFunctionDeclaration();
614 Fragment BuildFunctionNode(intptr_t parent_kernel_offset,
615 TokenPosition parent_position,
616 bool declaration,
617 intptr_t variable_offeset);
618 void SetupFunctionParameters(const dart::Class& klass,
619 const dart::Function& function,
620 bool is_method,
621 bool is_closure);
622 568
623 FlowGraphBuilder* flow_graph_builder_; 569 FlowGraphBuilder* flow_graph_builder_;
624 TranslationHelper& translation_helper_; 570 TranslationHelper& translation_helper_;
625 Zone* zone_; 571 Zone* zone_;
626 Reader* reader_; 572 Reader* reader_;
627 StreamingConstantEvaluator constant_evaluator_; 573 StreamingConstantEvaluator constant_evaluator_;
628 StreamingDartTypeTranslator type_translator_; 574 StreamingDartTypeTranslator type_translator_;
629 575
630 word unused_word;
631 intptr_t unused_intptr;
632 TokenPosition unused_tokenposition;
633 NameIndex unused_nameindex;
634
635 friend class StreamingConstantEvaluator; 576 friend class StreamingConstantEvaluator;
636 friend class StreamingDartTypeTranslator; 577 friend class StreamingDartTypeTranslator;
637 friend class StreamingScopeBuilder; 578 friend class StreamingScopeBuilder;
638 }; 579 };
639 580
640 // A helper class that saves the current reader position, goes to another reader 581 // A helper class that saves the current reader position, goes to another reader
641 // position, and upon destruction, resets to the original reader position. 582 // position, and upon destruction, resets to the original reader position.
642 class AlternativeReadingScope { 583 class AlternativeReadingScope {
643 public: 584 public:
644 AlternativeReadingScope(Reader* reader, intptr_t new_position) 585 AlternativeReadingScope(Reader* reader, intptr_t new_position)
645 : reader_(reader), saved_offset_(reader_->offset()) { 586 : reader_(reader), saved_offset_(reader_->offset()) {
646 reader_->set_offset(new_position); 587 reader_->set_offset(new_position);
647 } 588 }
648 589
649 explicit AlternativeReadingScope(Reader* reader) 590 explicit AlternativeReadingScope(Reader* reader)
650 : reader_(reader), saved_offset_(reader_->offset()) {} 591 : reader_(reader), saved_offset_(reader_->offset()) {}
651 592
652 ~AlternativeReadingScope() { reader_->set_offset(saved_offset_); } 593 ~AlternativeReadingScope() { reader_->set_offset(saved_offset_); }
653 594
654 private: 595 private:
655 Reader* reader_; 596 Reader* reader_;
656 intptr_t saved_offset_; 597 intptr_t saved_offset_;
657 }; 598 };
658 599
659 } // namespace kernel 600 } // namespace kernel
660 } // namespace dart 601 } // namespace dart
661 602
662 #endif // !defined(DART_PRECOMPILED_RUNTIME) 603 #endif // !defined(DART_PRECOMPILED_RUNTIME)
663 #endif // RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_ 604 #endif // RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_
OLDNEW
« no previous file with comments | « runtime/vm/kernel_binary.cc ('k') | runtime/vm/kernel_binary_flowgraph.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698