/* Tuplr: A programming language * Copyright (C) 2008-2009 David Robillard * * Tuplr is free software: you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * Tuplr is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General * Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Tuplr. If not, see . */ #include "tuplr.hpp" #include #include #include extern "C" { static const size_t COLLECT_SIZE = 8 * 1024 * 1024; // 8 MiB void tuplr_gc_collect() { Object::pool.collect(Object::pool.roots()); } void* tuplr_gc_allocate(unsigned size, uint8_t tag) { static size_t allocated = 0; allocated += size; if (allocated > COLLECT_SIZE) { tuplr_gc_collect(); allocated = 0; } return Object::pool.alloc(size, (GC::Tag)tag); } }