| // Copyright (c) 2019, 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_LLVM_CODEGEN_CODEGEN_CUSTOM_ZONE_H_ |
| #define RUNTIME_LLVM_CODEGEN_CODEGEN_CUSTOM_ZONE_H_ |
| |
| #include <vector> |
| |
| // We use a custom zone here which doesn't depend on VM internals (e.g. handles, |
| // thread, ...) |
| #if defined(RUNTIME_VM_ZONE_H_) |
| #error "We want our own zone implementation" |
| #endif |
| #define RUNTIME_VM_ZONE_H_ |
| |
| namespace dart { |
| |
| class Zone { |
| public: |
| Zone() {} |
| ~Zone(); |
| |
| template <class ElementType> |
| inline ElementType* Alloc(intptr_t length) { |
| return static_cast<ElementType*>( |
| AllocUnsafe(sizeof(ElementType) * length)); |
| } |
| |
| template <class ElementType> |
| inline ElementType* Realloc(ElementType* old_array, |
| intptr_t old_length, |
| intptr_t new_length) { |
| void* memory = AllocUnsafe(sizeof(ElementType) * new_length); |
| memmove(memory, old_array, sizeof(ElementType) * old_length); |
| return static_cast<ElementType*>(memory); |
| } |
| |
| template <class ElementType> |
| void Free(ElementType* old_array, intptr_t len) {} |
| |
| void* AllocUnsafe(intptr_t size); |
| |
| private: |
| Zone(const Zone&) = delete; |
| void operator=(const Zone&) = delete; |
| std::vector<void*> buffers_; |
| }; |
| |
| } // namespace dart |
| |
| #endif // RUNTIME_LLVM_CODEGEN_CODEGEN_CUSTOM_ZONE_H_ |