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

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

Issue 2891053003: Add support for converted closures with explicit contexts to VM (Closed)
Patch Set: Temporarily disable Run step in closures test suite Created 3 years, 5 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) 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>
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 void VisitNode(); 110 void VisitNode();
111 void VisitInitializer(); 111 void VisitInitializer();
112 void VisitExpression(); 112 void VisitExpression();
113 void VisitStatement(); 113 void VisitStatement();
114 void VisitArguments(); 114 void VisitArguments();
115 void VisitVariableDeclaration(); 115 void VisitVariableDeclaration();
116 void VisitDartType(); 116 void VisitDartType();
117 void VisitInterfaceType(bool simple); 117 void VisitInterfaceType(bool simple);
118 void VisitFunctionType(bool simple); 118 void VisitFunctionType(bool simple);
119 void VisitTypeParameterType(); 119 void VisitTypeParameterType();
120 void VisitVectorType();
120 void HandleLocalFunction(intptr_t parent_kernel_offset); 121 void HandleLocalFunction(intptr_t parent_kernel_offset);
121 122
122 void EnterScope(intptr_t kernel_offset); 123 void EnterScope(intptr_t kernel_offset);
123 void ExitScope(TokenPosition start_position, TokenPosition end_position); 124 void ExitScope(TokenPosition start_position, TokenPosition end_position);
124 125
125 /** 126 /**
126 * This assumes that the reader is at a FunctionNode, 127 * This assumes that the reader is at a FunctionNode,
127 * about to read the positional parameters. 128 * about to read the positional parameters.
128 */ 129 */
129 void AddPositionalAndNamedParameters(intptr_t pos = 0); 130 void AddPositionalAndNamedParameters(intptr_t pos = 0);
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 */ 366 */
366 intptr_t ReadUntilFunctionNode(); 367 intptr_t ReadUntilFunctionNode();
367 StringIndex GetNameFromVariableDeclaration(intptr_t kernel_offset); 368 StringIndex GetNameFromVariableDeclaration(intptr_t kernel_offset);
368 369
369 FlowGraph* BuildGraphOfStaticFieldInitializer(); 370 FlowGraph* BuildGraphOfStaticFieldInitializer();
370 FlowGraph* BuildGraphOfFieldAccessor(LocalVariable* setter_value); 371 FlowGraph* BuildGraphOfFieldAccessor(LocalVariable* setter_value);
371 void SetupDefaultParameterValues(); 372 void SetupDefaultParameterValues();
372 Fragment BuildFieldInitializer(NameIndex canonical_name); 373 Fragment BuildFieldInitializer(NameIndex canonical_name);
373 Fragment BuildInitializers(intptr_t constructor_class_parent_offset); 374 Fragment BuildInitializers(intptr_t constructor_class_parent_offset);
374 FlowGraph* BuildGraphOfImplicitClosureFunction(const Function& function); 375 FlowGraph* BuildGraphOfImplicitClosureFunction(const Function& function);
376 FlowGraph* BuildGraphOfConvertedClosureFunction(const Function& function);
375 FlowGraph* BuildGraphOfFunction( 377 FlowGraph* BuildGraphOfFunction(
376 intptr_t constructor_class_parent_offset = -1); 378 intptr_t constructor_class_parent_offset = -1);
377 379
378 Fragment BuildExpression(TokenPosition* position = NULL); 380 Fragment BuildExpression(TokenPosition* position = NULL);
379 Fragment BuildStatement(); 381 Fragment BuildStatement();
380 382
381 intptr_t ReaderOffset(); 383 intptr_t ReaderOffset();
382 void SetOffset(intptr_t offset); 384 void SetOffset(intptr_t offset);
383 void SkipBytes(intptr_t skip); 385 void SkipBytes(intptr_t skip);
384 bool ReadBool(); 386 bool ReadBool();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 CatchBlock* catch_block(); 437 CatchBlock* catch_block();
436 ActiveClass* active_class(); 438 ActiveClass* active_class();
437 ScopeBuildingResult* scopes(); 439 ScopeBuildingResult* scopes();
438 void set_scopes(ScopeBuildingResult* scope); 440 void set_scopes(ScopeBuildingResult* scope);
439 ParsedFunction* parsed_function(); 441 ParsedFunction* parsed_function();
440 TryFinallyBlock* try_finally_block(); 442 TryFinallyBlock* try_finally_block();
441 SwitchBlock* switch_block(); 443 SwitchBlock* switch_block();
442 BreakableBlock* breakable_block(); 444 BreakableBlock* breakable_block();
443 GrowableArray<YieldContinuation>& yield_continuations(); 445 GrowableArray<YieldContinuation>& yield_continuations();
444 Value* stack(); 446 Value* stack();
447 void Push(Definition* definition);
445 Value* Pop(); 448 Value* Pop();
446 449
447 Tag PeekArgumentsFirstPositionalTag(); 450 Tag PeekArgumentsFirstPositionalTag();
448 const TypeArguments& PeekArgumentsInstantiatedType(const dart::Class& klass); 451 const TypeArguments& PeekArgumentsInstantiatedType(const dart::Class& klass);
449 intptr_t PeekArgumentsCount(); 452 intptr_t PeekArgumentsCount();
450 intptr_t PeekArgumentsTypeCount(); 453 intptr_t PeekArgumentsTypeCount();
451 void SkipArgumentsBeforeActualArguments(); 454 void SkipArgumentsBeforeActualArguments();
452 455
453 LocalVariable* LookupVariable(intptr_t kernel_offset); 456 LocalVariable* LookupVariable(intptr_t kernel_offset);
454 LocalVariable* MakeTemporary(); 457 LocalVariable* MakeTemporary();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 const Array& argument_names, 493 const Array& argument_names,
491 intptr_t checked_argument_count); 494 intptr_t checked_argument_count);
492 Fragment ThrowException(TokenPosition position); 495 Fragment ThrowException(TokenPosition position);
493 Fragment BooleanNegate(); 496 Fragment BooleanNegate();
494 Fragment TranslateInstantiatedTypeArguments( 497 Fragment TranslateInstantiatedTypeArguments(
495 const TypeArguments& type_arguments); 498 const TypeArguments& type_arguments);
496 Fragment StrictCompare(Token::Kind kind, bool number_check = false); 499 Fragment StrictCompare(Token::Kind kind, bool number_check = false);
497 Fragment AllocateObject(TokenPosition position, 500 Fragment AllocateObject(TokenPosition position,
498 const dart::Class& klass, 501 const dart::Class& klass,
499 intptr_t argument_count); 502 intptr_t argument_count);
503 Fragment AllocateObject(const dart::Class& klass,
504 const Function& closure_function);
505 Fragment AllocateContext(intptr_t size);
506 Fragment LoadField(intptr_t offset);
500 Fragment StoreLocal(TokenPosition position, LocalVariable* variable); 507 Fragment StoreLocal(TokenPosition position, LocalVariable* variable);
501 Fragment StoreStaticField(TokenPosition position, const dart::Field& field); 508 Fragment StoreStaticField(TokenPosition position, const dart::Field& field);
509 Fragment StoreInstanceField(TokenPosition position, intptr_t offset);
502 Fragment StringInterpolate(TokenPosition position); 510 Fragment StringInterpolate(TokenPosition position);
503 Fragment StringInterpolateSingle(TokenPosition position); 511 Fragment StringInterpolateSingle(TokenPosition position);
504 Fragment ThrowTypeError(); 512 Fragment ThrowTypeError();
505 Fragment LoadInstantiatorTypeArguments(); 513 Fragment LoadInstantiatorTypeArguments();
506 Fragment LoadFunctionTypeArguments(); 514 Fragment LoadFunctionTypeArguments();
507 Fragment InstantiateType(const AbstractType& type); 515 Fragment InstantiateType(const AbstractType& type);
508 Fragment CreateArray(); 516 Fragment CreateArray();
509 Fragment StoreIndexed(intptr_t class_id); 517 Fragment StoreIndexed(intptr_t class_id);
510 Fragment CheckStackOverflow(); 518 Fragment CheckStackOverflow();
511 Fragment CloneContext(); 519 Fragment CloneContext();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 Fragment BuildMapLiteral(bool is_const, TokenPosition* position); 587 Fragment BuildMapLiteral(bool is_const, TokenPosition* position);
580 Fragment BuildFunctionExpression(); 588 Fragment BuildFunctionExpression();
581 Fragment BuildLet(TokenPosition* position); 589 Fragment BuildLet(TokenPosition* position);
582 Fragment BuildBigIntLiteral(TokenPosition* position); 590 Fragment BuildBigIntLiteral(TokenPosition* position);
583 Fragment BuildStringLiteral(TokenPosition* position); 591 Fragment BuildStringLiteral(TokenPosition* position);
584 Fragment BuildIntLiteral(uint8_t payload, TokenPosition* position); 592 Fragment BuildIntLiteral(uint8_t payload, TokenPosition* position);
585 Fragment BuildIntLiteral(bool is_negative, TokenPosition* position); 593 Fragment BuildIntLiteral(bool is_negative, TokenPosition* position);
586 Fragment BuildDoubleLiteral(TokenPosition* position); 594 Fragment BuildDoubleLiteral(TokenPosition* position);
587 Fragment BuildBoolLiteral(bool value, TokenPosition* position); 595 Fragment BuildBoolLiteral(bool value, TokenPosition* position);
588 Fragment BuildNullLiteral(TokenPosition* position); 596 Fragment BuildNullLiteral(TokenPosition* position);
597 Fragment BuildVectorCreation(TokenPosition* position);
598 Fragment BuildVectorGet(TokenPosition* position);
599 Fragment BuildVectorSet(TokenPosition* position);
600 Fragment BuildVectorCopy(TokenPosition* position);
601 Fragment BuildClosureCreation(TokenPosition* position);
589 602
590 Fragment BuildInvalidStatement(); 603 Fragment BuildInvalidStatement();
591 Fragment BuildExpressionStatement(); 604 Fragment BuildExpressionStatement();
592 Fragment BuildBlock(); 605 Fragment BuildBlock();
593 Fragment BuildEmptyStatement(); 606 Fragment BuildEmptyStatement();
594 Fragment BuildAssertStatement(); 607 Fragment BuildAssertStatement();
595 Fragment BuildLabeledStatement(); 608 Fragment BuildLabeledStatement();
596 Fragment BuildBreakStatement(); 609 Fragment BuildBreakStatement();
597 Fragment BuildWhileStatement(); 610 Fragment BuildWhileStatement();
598 Fragment BuildDoStatement(); 611 Fragment BuildDoStatement();
(...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after
1517 private: 1530 private:
1518 Reader* reader_; 1531 Reader* reader_;
1519 intptr_t saved_offset_; 1532 intptr_t saved_offset_;
1520 }; 1533 };
1521 1534
1522 } // namespace kernel 1535 } // namespace kernel
1523 } // namespace dart 1536 } // namespace dart
1524 1537
1525 #endif // !defined(DART_PRECOMPILED_RUNTIME) 1538 #endif // !defined(DART_PRECOMPILED_RUNTIME)
1526 #endif // RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_ 1539 #endif // RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_
OLDNEW
« no previous file with comments | « pkg/kernel/testcases/closures/uncaptured_for_in_loop.dart.expect ('k') | runtime/vm/kernel_binary_flowgraph.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698