Sha256: c326d2bcc3585462d559209d08fe78ec2f88849be5685134909fa8ed14c4e796
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
#include <stdlib.h> #include <map> #include <set> #include "bandit/bandit.h" using std::map; using std::set; static bool _enabled = false; static size_t _allocation_count = 0; static map<void *, size_t> _outstanding_allocations; namespace record_alloc { void start() { _enabled = true; _allocation_count = 0; _outstanding_allocations.clear(); } void stop() { _enabled = false; } set<size_t> outstanding_allocation_indices() { set<size_t> result; for (const auto &entry : _outstanding_allocations) { result.insert(entry.second); } return result; } size_t allocation_count() { return _allocation_count; } } // namespace record_alloc extern "C" { static void *record_allocation(void *result) { if (!_enabled) return result; _outstanding_allocations[result] = _allocation_count; _allocation_count++; return result; } static void record_deallocation(void *pointer) { if (!_enabled) return; auto entry = _outstanding_allocations.find(pointer); if (entry != _outstanding_allocations.end()) { _outstanding_allocations.erase(entry); } } void *ts_record_malloc(size_t size) { return record_allocation(malloc(size)); } void *ts_record_realloc(void *pointer, size_t size) { record_deallocation(pointer); return record_allocation(realloc(pointer, size)); } void *ts_record_calloc(size_t count, size_t size) { return record_allocation(calloc(count, size)); } void ts_record_free(void *pointer) { free(pointer); record_deallocation(pointer); } bool ts_record_allocations_toggle(bool value) { bool previous_value = _enabled; _enabled = value; return previous_value; } }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
tree-sitter-0.0.1 | ext/tree-sitter/tree-sitter/spec/helpers/record_alloc.cc |