1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-03 10:31:37 -08:00

New function chaindescribe describes a chain.

Also GenDescDescribe and PoolGenDescribe.
GlobalsDescribe now describes chains.

Copied from Perforce
 Change: 185727
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Gareth Rees 2014-04-22 00:53:18 +01:00
parent a8aee50de6
commit 3f46ffffd3
3 changed files with 93 additions and 0 deletions

View file

@ -126,6 +126,36 @@ static Size GenDescTotalSize(GenDesc gen)
}
/* GenDescDescribe -- describe a generation in a chain */
Res GenDescDescribe(GenDesc gen, mps_lib_FILE *stream)
{
Res res;
Ring node, nextNode;
if (!TESTT(GenDesc, gen)) return ResFAIL;
if (stream == NULL) return ResFAIL;
res = WriteF(stream,
"GenDesc $P {\n", (WriteFP)gen,
"zones $B\n", (WriteFB)gen->zones,
"capacity $U\n", (WriteFU)gen->capacity,
"mortality $D\n", (WriteFD)gen->mortality,
"proflow $D\n", (WriteFD)gen->proflow,
NULL);
if (res != ResOK) return res;
RING_FOR(node, &gen->locusRing, nextNode) {
PoolGen pgen = RING_ELT(PoolGen, genRing, node);
res = PoolGenDescribe(pgen, stream);
if (res != ResOK) return res;
}
res = WriteF(stream, "} GenDesc $P\n", (WriteFP)gen, NULL);
return res;
}
/* ChainCreate -- create a generation chain */
Res ChainCreate(Chain *chainReturn, Arena arena, size_t genCount,
@ -411,6 +441,35 @@ void ChainEndGC(Chain chain, Trace trace)
}
/* ChainDescribe -- describe a chain */
Res ChainDescribe(Chain chain, mps_lib_FILE *stream)
{
Res res;
size_t i;
if (!TESTT(Chain, chain)) return ResFAIL;
if (stream == NULL) return ResFAIL;
res = WriteF(stream,
"Chain $P {\n", (WriteFP)chain,
"arena $P\n", (WriteFP)chain->arena,
"activeTraces $B\n", (WriteFB)chain->activeTraces,
NULL);
if (res != ResOK) return res;
for (i = 0; i < chain->genCount; ++i) {
res = GenDescDescribe(&chain->gens[i], stream);
if (res != ResOK) return res;
}
res = WriteF(stream,
"} Chain $P\n", (WriteFP)chain,
NULL);
return res;
}
/* PoolGenInit -- initialize a PoolGen */
Res PoolGenInit(PoolGen gen, Chain chain, Serial nr, Pool pool)
@ -464,6 +523,30 @@ Bool PoolGenCheck(PoolGen gen)
}
/* PoolGenDescribe -- describe a PoolGen */
Res PoolGenDescribe(PoolGen pgen, mps_lib_FILE *stream)
{
Res res;
if (!TESTT(PoolGen, pgen)) return ResFAIL;
if (stream == NULL) return ResFAIL;
res = WriteF(stream,
"PoolGen $P ($U) {\n", (WriteFP)pgen, (WriteFU)pgen->nr,
"pool $P ($U) \"$S\"\n",
(WriteFP)pgen->pool, (WriteFU)pgen->pool->serial,
(WriteFS)pgen->pool->class->name,
"chain $P\n", (WriteFP)pgen->chain,
"totalSize $U\n", (WriteFU)pgen->totalSize,
"newSize $U\n", (WriteFU)pgen->newSize,
"newSizeAtCreate $U\n", (WriteFU)pgen->newSizeAtCreate,
"} PoolGen $P\n", (WriteFP)pgen,
NULL);
return res;
}
/* LocusInit -- initialize the locus module */
void LocusInit(Arena arena)