OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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_TO_IL_H_ | 5 #ifndef RUNTIME_VM_KERNEL_TO_IL_H_ |
6 #define RUNTIME_VM_KERNEL_TO_IL_H_ | 6 #define RUNTIME_VM_KERNEL_TO_IL_H_ |
7 | 7 |
8 #if !defined(DART_PRECOMPILED_RUNTIME) | 8 #if !defined(DART_PRECOMPILED_RUNTIME) |
9 | 9 |
10 #include "vm/growable_array.h" | 10 #include "vm/growable_array.h" |
11 #include "vm/hash_map.h" | 11 #include "vm/hash_map.h" |
12 | 12 |
13 #include "vm/flow_graph.h" | 13 #include "vm/flow_graph.h" |
14 #include "vm/flow_graph_builder.h" | 14 #include "vm/flow_graph_builder.h" |
15 #include "vm/intermediate_language.h" | 15 #include "vm/intermediate_language.h" |
16 #include "vm/kernel.h" | 16 #include "vm/kernel.h" |
17 | 17 |
18 namespace dart { | 18 namespace dart { |
19 namespace kernel { | 19 namespace kernel { |
20 | 20 |
| 21 class StreamingFlowGraphBuilder; |
| 22 |
21 // TODO(27590): Instead of using [dart::kernel::TreeNode]s as keys we | 23 // TODO(27590): Instead of using [dart::kernel::TreeNode]s as keys we |
22 // should use [TokenPosition]s. | 24 // should use [TokenPosition]s. |
23 class KernelConstMapKeyEqualsTraits { | 25 class KernelConstMapKeyEqualsTraits { |
24 public: | 26 public: |
25 static const char* Name() { return "KernelConstMapKeyEqualsTraits"; } | 27 static const char* Name() { return "KernelConstMapKeyEqualsTraits"; } |
26 static bool ReportStats() { return false; } | 28 static bool ReportStats() { return false; } |
27 | 29 |
28 static bool IsMatch(const Object& a, const Object& b) { | 30 static bool IsMatch(const Object& a, const Object& b) { |
29 const Smi& key1 = Smi::Cast(a); | 31 const Smi& key1 = Smi::Cast(a); |
30 const Smi& key2 = Smi::Cast(b); | 32 const Smi& key2 = Smi::Cast(b); |
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 DartTypeTranslator type_translator_; | 732 DartTypeTranslator type_translator_; |
731 | 733 |
732 FunctionNode* current_function_node_; | 734 FunctionNode* current_function_node_; |
733 LocalScope* current_function_scope_; | 735 LocalScope* current_function_scope_; |
734 LocalScope* scope_; | 736 LocalScope* scope_; |
735 DepthState depth_; | 737 DepthState depth_; |
736 | 738 |
737 intptr_t name_index_; | 739 intptr_t name_index_; |
738 }; | 740 }; |
739 | 741 |
740 | |
741 class FlowGraphBuilder : public ExpressionVisitor, public StatementVisitor { | 742 class FlowGraphBuilder : public ExpressionVisitor, public StatementVisitor { |
742 public: | 743 public: |
743 FlowGraphBuilder(TreeNode* node, | 744 FlowGraphBuilder(TreeNode* node, |
744 ParsedFunction* parsed_function, | 745 ParsedFunction* parsed_function, |
745 const ZoneGrowableArray<const ICData*>& ic_data_array, | 746 const ZoneGrowableArray<const ICData*>& ic_data_array, |
746 InlineExitCollector* exit_collector, | 747 InlineExitCollector* exit_collector, |
747 intptr_t osr_id, | 748 intptr_t osr_id, |
748 intptr_t first_block_id = 1); | 749 intptr_t first_block_id = 1); |
749 virtual ~FlowGraphBuilder(); | 750 virtual ~FlowGraphBuilder(); |
750 | 751 |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1060 intptr_t next_used_try_index_; | 1061 intptr_t next_used_try_index_; |
1061 | 1062 |
1062 // A chained list of catch blocks. Chaining and lookup is done by the | 1063 // A chained list of catch blocks. Chaining and lookup is done by the |
1063 // [CatchBlock] class. | 1064 // [CatchBlock] class. |
1064 CatchBlock* catch_block_; | 1065 CatchBlock* catch_block_; |
1065 | 1066 |
1066 ActiveClass active_class_; | 1067 ActiveClass active_class_; |
1067 DartTypeTranslator type_translator_; | 1068 DartTypeTranslator type_translator_; |
1068 ConstantEvaluator constant_evaluator_; | 1069 ConstantEvaluator constant_evaluator_; |
1069 | 1070 |
| 1071 StreamingFlowGraphBuilder* streaming_flow_graph_builder_; |
| 1072 |
1070 friend class BreakableBlock; | 1073 friend class BreakableBlock; |
1071 friend class CatchBlock; | 1074 friend class CatchBlock; |
1072 friend class ConstantEvaluator; | 1075 friend class ConstantEvaluator; |
1073 friend class DartTypeTranslator; | 1076 friend class DartTypeTranslator; |
| 1077 friend class StreamingFlowGraphBuilder; |
1074 friend class ScopeBuilder; | 1078 friend class ScopeBuilder; |
1075 friend class SwitchBlock; | 1079 friend class SwitchBlock; |
1076 friend class TryCatchBlock; | 1080 friend class TryCatchBlock; |
1077 friend class TryFinallyBlock; | 1081 friend class TryFinallyBlock; |
1078 }; | 1082 }; |
1079 | 1083 |
| 1084 |
| 1085 class CatchBlock { |
| 1086 public: |
| 1087 CatchBlock(FlowGraphBuilder* builder, |
| 1088 LocalVariable* exception_var, |
| 1089 LocalVariable* stack_trace_var, |
| 1090 intptr_t catch_try_index) |
| 1091 : builder_(builder), |
| 1092 outer_(builder->catch_block_), |
| 1093 exception_var_(exception_var), |
| 1094 stack_trace_var_(stack_trace_var), |
| 1095 catch_try_index_(catch_try_index) { |
| 1096 builder_->catch_block_ = this; |
| 1097 } |
| 1098 ~CatchBlock() { builder_->catch_block_ = outer_; } |
| 1099 |
| 1100 LocalVariable* exception_var() { return exception_var_; } |
| 1101 LocalVariable* stack_trace_var() { return stack_trace_var_; } |
| 1102 intptr_t catch_try_index() { return catch_try_index_; } |
| 1103 |
| 1104 private: |
| 1105 FlowGraphBuilder* builder_; |
| 1106 CatchBlock* outer_; |
| 1107 LocalVariable* exception_var_; |
| 1108 LocalVariable* stack_trace_var_; |
| 1109 intptr_t catch_try_index_; |
| 1110 }; |
| 1111 |
| 1112 |
1080 RawObject* EvaluateMetadata(TreeNode* const kernel_node); | 1113 RawObject* EvaluateMetadata(TreeNode* const kernel_node); |
1081 RawObject* BuildParameterDescriptor(TreeNode* const kernel_node); | 1114 RawObject* BuildParameterDescriptor(TreeNode* const kernel_node); |
1082 | 1115 |
1083 | 1116 |
1084 } // namespace kernel | 1117 } // namespace kernel |
1085 } // namespace dart | 1118 } // namespace dart |
1086 | 1119 |
1087 #else // !defined(DART_PRECOMPILED_RUNTIME) | 1120 #else // !defined(DART_PRECOMPILED_RUNTIME) |
1088 | 1121 |
1089 #include "vm/object.h" | 1122 #include "vm/object.h" |
1090 #include "vm/kernel.h" | 1123 #include "vm/kernel.h" |
1091 | 1124 |
1092 namespace dart { | 1125 namespace dart { |
1093 namespace kernel { | 1126 namespace kernel { |
1094 | 1127 |
1095 RawObject* EvaluateMetadata(TreeNode* const kernel_node); | 1128 RawObject* EvaluateMetadata(TreeNode* const kernel_node); |
1096 RawObject* BuildParameterDescriptor(TreeNode* const kernel_node); | 1129 RawObject* BuildParameterDescriptor(TreeNode* const kernel_node); |
1097 | 1130 |
1098 } // namespace kernel | 1131 } // namespace kernel |
1099 } // namespace dart | 1132 } // namespace dart |
1100 | 1133 |
1101 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 1134 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
1102 #endif // RUNTIME_VM_KERNEL_TO_IL_H_ | 1135 #endif // RUNTIME_VM_KERNEL_TO_IL_H_ |
OLD | NEW |