| // Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| #ifndef RUNTIME_VM_COMPILER_FRONTEND_CONSTANT_READER_H_ | |
| #define RUNTIME_VM_COMPILER_FRONTEND_CONSTANT_READER_H_ | |
| #if defined(DART_PRECOMPILED_RUNTIME) | |
| #error "AOT runtime should not use compiler sources (including header files)" | |
| #endif // defined(DART_PRECOMPILED_RUNTIME) | |
| #include "vm/compiler/frontend/kernel_translation_helper.h" | |
| #include "vm/hash_table.h" | |
| #include "vm/object.h" | |
| namespace dart { | |
| namespace kernel { | |
| // Reads and caches constants from the kernel constant pool. | |
| class ConstantReader { | |
| public: | |
| ConstantReader(KernelReaderHelper* helper, ActiveClass* active_class); | |
| virtual ~ConstantReader() {} | |
| bool IsPragmaInstanceConstant(intptr_t constant_index, | |
| intptr_t* pragma_name_constant_index, | |
| intptr_t* pragma_options_constant_index); | |
| bool IsStringConstant(intptr_t constant_index, const char* name); | |
| bool GetStringConstant(intptr_t constant_index, String* out_value); | |
| InstancePtr ReadConstantInitializer(); | |
| InstancePtr ReadConstantExpression(); | |
| ObjectPtr ReadAnnotations(); | |
| // Peeks to see if constant at the given index will evaluate to | |
| // instance of the given clazz. | |
| bool IsInstanceConstant(intptr_t constant_index, const Class& clazz); | |
| // Reads a constant at the given index (possibly by recursing | |
| // into sub-constants). | |
| InstancePtr ReadConstant(intptr_t constant_index); | |
| intptr_t NumConstants(); | |
| private: | |
| InstancePtr ReadConstantInternal(intptr_t constant_index); | |
| intptr_t NavigateToIndex(KernelReaderHelper* reader, intptr_t constant_index); | |
| intptr_t NumConstants(KernelReaderHelper* reader); | |
| ScriptPtr Script() { | |
| if (active_class_ != nullptr) { | |
| return active_class_->ActiveScript(); | |
| } | |
| return Script::null(); | |
| } | |
| KernelReaderHelper* helper_; | |
| Zone* zone_; | |
| TranslationHelper& translation_helper_; | |
| ActiveClass* active_class_; | |
| Object& result_; | |
| DISALLOW_COPY_AND_ASSIGN(ConstantReader); | |
| }; | |
| } // namespace kernel | |
| } // namespace dart | |
| #endif // RUNTIME_VM_COMPILER_FRONTEND_CONSTANT_READER_H_ |