Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 StreamingConstantEvaluator { | |
| 21 public: | |
| 22 StreamingConstantEvaluator(StreamingFlowGraphBuilder* builder, | |
| 23 Zone* zone, | |
| 24 TranslationHelper* h, | |
| 25 DartTypeTranslator* type_translator); | |
| 26 | |
| 27 virtual ~StreamingConstantEvaluator() {} | |
| 28 | |
| 29 Instance& EvaluateExpression(); | |
| 30 void EvaluateDoubleLiteral(); | |
| 31 | |
| 32 private: | |
| 33 bool GetCachedConstant(intptr_t kernel_offset, Instance* value); | |
| 34 void CacheConstantValue(intptr_t kernel_offset, const Instance& value); | |
| 35 | |
| 36 StreamingFlowGraphBuilder* builder_; | |
| 37 Isolate* isolate_; | |
| 38 Zone* zone_; | |
| 39 TranslationHelper& translation_helper_; | |
| 40 // DartTypeTranslator& type_translator_; | |
| 41 | |
| 42 Script& script_; | |
| 43 Instance& result_; | |
| 44 }; | |
| 45 | |
| 20 class StreamingFlowGraphBuilder { | 46 class StreamingFlowGraphBuilder { |
| 21 public: | 47 public: |
| 22 StreamingFlowGraphBuilder(FlowGraphBuilder* flowGraph_builder, | 48 StreamingFlowGraphBuilder(FlowGraphBuilder* flow_graph_builder, |
| 23 const uint8_t* buffer, | 49 const uint8_t* buffer, |
| 24 intptr_t buffer_length) | 50 intptr_t buffer_length) |
| 25 : flow_graph_builder_(flowGraph_builder), | 51 : flow_graph_builder_(flow_graph_builder), |
| 52 translation_helper_(flow_graph_builder->translation_helper_), | |
| 53 zone_(flow_graph_builder->zone_), | |
| 26 reader_(new kernel::Reader(buffer, buffer_length)), | 54 reader_(new kernel::Reader(buffer, buffer_length)), |
| 55 constant_evaluator_(this, | |
| 56 flow_graph_builder->zone_, | |
|
Kevin Millikin (Google)
2017/03/31 12:23:41
You should be able to use zone_ and &translation_h
| |
| 57 &flow_graph_builder->translation_helper_, | |
| 58 &flow_graph_builder->type_translator_), | |
| 27 string_table_offsets_(NULL), | 59 string_table_offsets_(NULL), |
| 28 string_table_size_(-1), | 60 string_table_size_(-1), |
| 29 string_table_entries_read_(0) {} | 61 string_table_entries_read_(0) {} |
| 30 | 62 |
| 31 virtual ~StreamingFlowGraphBuilder() { | 63 virtual ~StreamingFlowGraphBuilder() { |
| 32 delete reader_; | 64 delete reader_; |
| 33 if (string_table_offsets_ != NULL) { | 65 if (string_table_offsets_ != NULL) { |
| 34 delete[] string_table_offsets_; | 66 delete[] string_table_offsets_; |
| 35 } | 67 } |
| 36 } | 68 } |
| 37 | 69 |
| 38 Fragment BuildAt(intptr_t kernel_offset); | 70 Fragment BuildAt(intptr_t kernel_offset); |
| 39 | 71 |
| 40 private: | 72 private: |
| 41 intptr_t GetStringTableOffset(intptr_t index); | 73 intptr_t GetStringTableOffset(intptr_t index); |
| 42 | 74 |
| 75 intptr_t ReaderOffset(); | |
| 76 void SetOffset(intptr_t offset); | |
| 77 void SkipBytes(intptr_t skip); | |
| 43 uint32_t ReadUInt(); | 78 uint32_t ReadUInt(); |
| 44 intptr_t ReadListLength(); | 79 intptr_t ReadListLength(); |
| 45 TokenPosition ReadPosition(bool record = true); | 80 TokenPosition ReadPosition(bool record = true); |
| 81 Tag ReadTag(uint8_t* payload = NULL); | |
| 46 | 82 |
| 47 CatchBlock* catch_block(); | 83 CatchBlock* catch_block(); |
| 48 ScopeBuildingResult* scopes(); | 84 ScopeBuildingResult* scopes(); |
| 85 ParsedFunction* parsed_function(); | |
| 86 | |
| 87 dart::String& DartSymbol(intptr_t str_index); | |
| 88 dart::String& DartString(intptr_t str_index); | |
| 49 | 89 |
| 50 Fragment DebugStepCheck(TokenPosition position); | 90 Fragment DebugStepCheck(TokenPosition position); |
| 51 Fragment LoadLocal(LocalVariable* variable); | 91 Fragment LoadLocal(LocalVariable* variable); |
| 52 Fragment PushArgument(); | 92 Fragment PushArgument(); |
| 53 Fragment RethrowException(TokenPosition position, int catch_try_index); | 93 Fragment RethrowException(TokenPosition position, int catch_try_index); |
| 54 Fragment ThrowNoSuchMethodError(); | 94 Fragment ThrowNoSuchMethodError(); |
| 55 Fragment Constant(const Object& value); | 95 Fragment Constant(const Object& value); |
| 56 Fragment IntConstant(int64_t value); | 96 Fragment IntConstant(int64_t value); |
| 57 | 97 |
| 58 Fragment BuildInvalidExpression(); | 98 Fragment BuildInvalidExpression(); |
| 59 Fragment BuildThisExpression(); | 99 Fragment BuildThisExpression(); |
| 60 Fragment BuildRethrow(); | 100 Fragment BuildRethrow(); |
| 61 Fragment BuildStringLiteral(); | 101 Fragment BuildStringLiteral(); |
| 62 Fragment BuildIntLiteral(uint8_t payload); | 102 Fragment BuildIntLiteral(uint8_t payload); |
| 63 Fragment BuildIntLiteral(bool is_negative); | 103 Fragment BuildIntLiteral(bool is_negative); |
| 104 Fragment BuildDoubleLiteral(); | |
| 64 Fragment BuildBoolLiteral(bool value); | 105 Fragment BuildBoolLiteral(bool value); |
| 65 Fragment BuildNullLiteral(); | 106 Fragment BuildNullLiteral(); |
| 66 | 107 |
| 67 FlowGraphBuilder* flow_graph_builder_; | 108 FlowGraphBuilder* flow_graph_builder_; |
| 109 TranslationHelper& translation_helper_; | |
| 110 Zone* zone_; | |
| 68 kernel::Reader* reader_; | 111 kernel::Reader* reader_; |
| 112 StreamingConstantEvaluator constant_evaluator_; | |
| 69 intptr_t* string_table_offsets_; | 113 intptr_t* string_table_offsets_; |
| 70 intptr_t string_table_size_; | 114 intptr_t string_table_size_; |
| 71 intptr_t string_table_entries_read_; | 115 intptr_t string_table_entries_read_; |
| 116 | |
| 117 friend class StreamingConstantEvaluator; | |
| 72 }; | 118 }; |
| 73 | 119 |
| 74 } // namespace kernel | 120 } // namespace kernel |
| 75 } // namespace dart | 121 } // namespace dart |
| 76 | 122 |
| 77 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 123 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| 78 #endif // RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_ | 124 #endif // RUNTIME_VM_KERNEL_BINARY_FLOWGRAPH_H_ |
| OLD | NEW |