mirror of
https://review.haiku-os.org/buildtools
synced 2025-02-14 09:47:56 +01:00
Updated dependencies: * GMP 6.2.1 * ISL 0.24 * MPL 1.2.1 * MPFR 4.1.0 The dependencies were pulled in by running the ./contrib/download_prerequisites script and then manually removing the symbolic links and archives, and renaming the directories (i.e mv isl-0.24 to isl)
199 lines
4.2 KiB
D
199 lines
4.2 KiB
D
/**
|
|
* Contains the internal GC interface.
|
|
*
|
|
* Copyright: Copyright Digital Mars 2016.
|
|
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
|
|
* Authors: Walter Bright, Sean Kelly, Jeremy DeHaan
|
|
*/
|
|
|
|
/* Copyright Digital Mars 2016.
|
|
* Distributed under the Boost Software License, Version 1.0.
|
|
* (See accompanying file LICENSE or copy at
|
|
* http://www.boost.org/LICENSE_1_0.txt)
|
|
*/
|
|
module core.gc.gcinterface;
|
|
|
|
static import core.memory;
|
|
alias BlkAttr = core.memory.GC.BlkAttr;
|
|
alias BlkInfo = core.memory.GC.BlkInfo;
|
|
|
|
alias RootIterator = int delegate(scope int delegate(ref Root) nothrow dg);
|
|
alias RangeIterator = int delegate(scope int delegate(ref Range) nothrow dg);
|
|
|
|
|
|
struct Root
|
|
{
|
|
void* proot;
|
|
alias proot this;
|
|
}
|
|
|
|
struct Range
|
|
{
|
|
void* pbot;
|
|
void* ptop;
|
|
TypeInfo ti; // should be tail const, but doesn't exist for references
|
|
alias pbot this; // only consider pbot for relative ordering (opCmp)
|
|
bool opEquals(const scope Range rhs) nothrow const { return pbot == rhs.pbot; }
|
|
}
|
|
|
|
interface GC
|
|
{
|
|
/**
|
|
*
|
|
*/
|
|
void enable();
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void disable();
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void collect() nothrow;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void collectNoStack() nothrow;
|
|
|
|
/**
|
|
* minimize free space usage
|
|
*/
|
|
void minimize() nothrow;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
uint getAttr(void* p) nothrow;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
uint setAttr(void* p, uint mask) nothrow;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
uint clrAttr(void* p, uint mask) nothrow;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void* malloc(size_t size, uint bits, const TypeInfo ti) nothrow;
|
|
|
|
/*
|
|
*
|
|
*/
|
|
BlkInfo qalloc(size_t size, uint bits, const scope TypeInfo ti) nothrow;
|
|
|
|
/*
|
|
*
|
|
*/
|
|
void* calloc(size_t size, uint bits, const TypeInfo ti) nothrow;
|
|
|
|
/*
|
|
*
|
|
*/
|
|
void* realloc(void* p, size_t size, uint bits, const TypeInfo ti) nothrow;
|
|
|
|
/**
|
|
* Attempt to in-place enlarge the memory block pointed to by p by at least
|
|
* minsize bytes, up to a maximum of maxsize additional bytes.
|
|
* This does not attempt to move the memory block (like realloc() does).
|
|
*
|
|
* Returns:
|
|
* 0 if could not extend p,
|
|
* total size of entire memory block if successful.
|
|
*/
|
|
size_t extend(void* p, size_t minsize, size_t maxsize, const TypeInfo ti) nothrow;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
size_t reserve(size_t size) nothrow;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void free(void* p) nothrow @nogc;
|
|
|
|
/**
|
|
* Determine the base address of the block containing p. If p is not a gc
|
|
* allocated pointer, return null.
|
|
*/
|
|
void* addrOf(void* p) nothrow @nogc;
|
|
|
|
/**
|
|
* Determine the allocated size of pointer p. If p is an interior pointer
|
|
* or not a gc allocated pointer, return 0.
|
|
*/
|
|
size_t sizeOf(void* p) nothrow @nogc;
|
|
|
|
/**
|
|
* Determine the base address of the block containing p. If p is not a gc
|
|
* allocated pointer, return null.
|
|
*/
|
|
BlkInfo query(void* p) nothrow;
|
|
|
|
/**
|
|
* Retrieve statistics about garbage collection.
|
|
* Useful for debugging and tuning.
|
|
*/
|
|
core.memory.GC.Stats stats() @safe nothrow @nogc;
|
|
|
|
/**
|
|
* Retrieve profile statistics about garbage collection.
|
|
* Useful for debugging and tuning.
|
|
*/
|
|
core.memory.GC.ProfileStats profileStats() @safe nothrow @nogc;
|
|
|
|
/**
|
|
* add p to list of roots
|
|
*/
|
|
void addRoot(void* p) nothrow @nogc;
|
|
|
|
/**
|
|
* remove p from list of roots
|
|
*/
|
|
void removeRoot(void* p) nothrow @nogc;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
@property RootIterator rootIter() @nogc;
|
|
|
|
/**
|
|
* add range to scan for roots
|
|
*/
|
|
void addRange(void* p, size_t sz, const TypeInfo ti) nothrow @nogc;
|
|
|
|
/**
|
|
* remove range
|
|
*/
|
|
void removeRange(void* p) nothrow @nogc;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
@property RangeIterator rangeIter() @nogc;
|
|
|
|
/**
|
|
* run finalizers
|
|
*/
|
|
void runFinalizers(const scope void[] segment) nothrow;
|
|
|
|
/*
|
|
*
|
|
*/
|
|
bool inFinalizer() nothrow @nogc @safe;
|
|
|
|
/**
|
|
* Returns the number of bytes allocated for the current thread
|
|
* since program start. It is the same as
|
|
* GC.stats().allocatedInCurrentThread, but faster.
|
|
*/
|
|
ulong allocatedInCurrentThread() nothrow;
|
|
}
|