Chromium Code Reviews| Index: runtime/vm/kernel_binary_flowgraph.h |
| diff --git a/runtime/vm/kernel_binary_flowgraph.h b/runtime/vm/kernel_binary_flowgraph.h |
| index 37135cae03a8401c11b4d15463fe750a191559a3..f143a291d3e85cae6081cc92008655865eb044d2 100644 |
| --- a/runtime/vm/kernel_binary_flowgraph.h |
| +++ b/runtime/vm/kernel_binary_flowgraph.h |
| @@ -17,13 +17,45 @@ |
| namespace dart { |
| namespace kernel { |
| +class StreamingConstantEvaluator { |
| + public: |
| + StreamingConstantEvaluator(StreamingFlowGraphBuilder* builder, |
| + Zone* zone, |
| + TranslationHelper* h, |
| + DartTypeTranslator* type_translator); |
| + |
| + virtual ~StreamingConstantEvaluator() {} |
| + |
| + Instance& EvaluateExpression(); |
| + void EvaluateDoubleLiteral(); |
| + |
| + private: |
| + bool GetCachedConstant(intptr_t kernel_offset, Instance* value); |
| + void CacheConstantValue(intptr_t kernel_offset, const Instance& value); |
| + |
| + StreamingFlowGraphBuilder* builder_; |
| + Isolate* isolate_; |
| + Zone* zone_; |
| + TranslationHelper& translation_helper_; |
| + // DartTypeTranslator& type_translator_; |
| + |
| + Script& script_; |
| + Instance& result_; |
| +}; |
| + |
| class StreamingFlowGraphBuilder { |
| public: |
| - StreamingFlowGraphBuilder(FlowGraphBuilder* flowGraph_builder, |
| + StreamingFlowGraphBuilder(FlowGraphBuilder* flow_graph_builder, |
| const uint8_t* buffer, |
| intptr_t buffer_length) |
| - : flow_graph_builder_(flowGraph_builder), |
| + : flow_graph_builder_(flow_graph_builder), |
| + translation_helper_(flow_graph_builder->translation_helper_), |
| + zone_(flow_graph_builder->zone_), |
| reader_(new kernel::Reader(buffer, buffer_length)), |
| + constant_evaluator_(this, |
| + flow_graph_builder->zone_, |
|
Kevin Millikin (Google)
2017/03/31 12:23:41
You should be able to use zone_ and &translation_h
|
| + &flow_graph_builder->translation_helper_, |
| + &flow_graph_builder->type_translator_), |
| string_table_offsets_(NULL), |
| string_table_size_(-1), |
| string_table_entries_read_(0) {} |
| @@ -40,12 +72,20 @@ class StreamingFlowGraphBuilder { |
| private: |
| intptr_t GetStringTableOffset(intptr_t index); |
| + intptr_t ReaderOffset(); |
| + void SetOffset(intptr_t offset); |
| + void SkipBytes(intptr_t skip); |
| uint32_t ReadUInt(); |
| intptr_t ReadListLength(); |
| TokenPosition ReadPosition(bool record = true); |
| + Tag ReadTag(uint8_t* payload = NULL); |
| CatchBlock* catch_block(); |
| ScopeBuildingResult* scopes(); |
| + ParsedFunction* parsed_function(); |
| + |
| + dart::String& DartSymbol(intptr_t str_index); |
| + dart::String& DartString(intptr_t str_index); |
| Fragment DebugStepCheck(TokenPosition position); |
| Fragment LoadLocal(LocalVariable* variable); |
| @@ -61,14 +101,20 @@ class StreamingFlowGraphBuilder { |
| Fragment BuildStringLiteral(); |
| Fragment BuildIntLiteral(uint8_t payload); |
| Fragment BuildIntLiteral(bool is_negative); |
| + Fragment BuildDoubleLiteral(); |
| Fragment BuildBoolLiteral(bool value); |
| Fragment BuildNullLiteral(); |
| FlowGraphBuilder* flow_graph_builder_; |
| + TranslationHelper& translation_helper_; |
| + Zone* zone_; |
| kernel::Reader* reader_; |
| + StreamingConstantEvaluator constant_evaluator_; |
| intptr_t* string_table_offsets_; |
| intptr_t string_table_size_; |
| intptr_t string_table_entries_read_; |
| + |
| + friend class StreamingConstantEvaluator; |
| }; |
| } // namespace kernel |