blob: 3b3810475d30cfc9d5ae58dd1a7850100e039c06 [file] [log] [blame]
// 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_