mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-03-26 00:34:17 -07:00
Converting arena finish and describe methods to specialize instfinish and instdescribe.
Copied from Perforce Change: 191614 ServerID: perforce.ravenbrook.com
This commit is contained in:
parent
66f9fe6841
commit
139c44155b
5 changed files with 20 additions and 28 deletions
|
|
@ -43,8 +43,8 @@ static void ArenaTrivCompact(Arena arena, Trace trace);
|
|||
static void arenaFreePage(Arena arena, Addr base, Pool pool);
|
||||
static void arenaFreeLandFinish(Arena arena);
|
||||
static Res ArenaAbsInit(Arena arena, Size grainSize, ArgList args);
|
||||
static void ArenaAbsFinish(Arena arena);
|
||||
static Res ArenaAbsDescribe(Arena arena, mps_lib_FILE *stream, Count depth);
|
||||
static void ArenaAbsFinish(Inst inst);
|
||||
static Res ArenaAbsDescribe(Inst inst, mps_lib_FILE *stream, Count depth);
|
||||
|
||||
|
||||
static void ArenaNoFree(Addr base, Size size, Pool pool)
|
||||
|
|
@ -107,10 +107,11 @@ DEFINE_CLASS(Inst, ArenaClass, klass)
|
|||
DEFINE_CLASS(Arena, AbstractArena, klass)
|
||||
{
|
||||
INHERIT_CLASS(&klass->protocol, AbstractArena, Inst);
|
||||
klass->protocol.finish = ArenaAbsFinish;
|
||||
klass->protocol.describe = ArenaAbsDescribe;
|
||||
klass->size = sizeof(ArenaStruct);
|
||||
klass->varargs = ArgTrivVarargs;
|
||||
klass->init = ArenaAbsInit;
|
||||
klass->finish = ArenaAbsFinish;
|
||||
klass->create = ArenaNoCreate;
|
||||
klass->destroy = ArenaNoDestroy;
|
||||
klass->purgeSpare = ArenaNoPurgeSpare;
|
||||
|
|
@ -120,7 +121,6 @@ DEFINE_CLASS(Arena, AbstractArena, klass)
|
|||
klass->chunkInit = ArenaNoChunkInit;
|
||||
klass->chunkFinish = ArenaNoChunkFinish;
|
||||
klass->compact = ArenaTrivCompact;
|
||||
klass->describe = ArenaAbsDescribe;
|
||||
klass->pagesMarkAllocated = ArenaNoPagesMarkAllocated;
|
||||
klass->sig = ArenaClassSig;
|
||||
}
|
||||
|
|
@ -134,7 +134,6 @@ Bool ArenaClassCheck(ArenaClass klass)
|
|||
CHECKL(klass->size >= sizeof(ArenaStruct));
|
||||
CHECKL(FUNCHECK(klass->varargs));
|
||||
CHECKL(FUNCHECK(klass->init));
|
||||
CHECKL(FUNCHECK(klass->finish));
|
||||
CHECKL(FUNCHECK(klass->create));
|
||||
CHECKL(FUNCHECK(klass->destroy));
|
||||
CHECKL(FUNCHECK(klass->purgeSpare));
|
||||
|
|
@ -144,7 +143,6 @@ Bool ArenaClassCheck(ArenaClass klass)
|
|||
CHECKL(FUNCHECK(klass->chunkInit));
|
||||
CHECKL(FUNCHECK(klass->chunkFinish));
|
||||
CHECKL(FUNCHECK(klass->compact));
|
||||
CHECKL(FUNCHECK(klass->describe));
|
||||
CHECKL(FUNCHECK(klass->pagesMarkAllocated));
|
||||
CHECKS(ArenaClass, klass);
|
||||
return TRUE;
|
||||
|
|
@ -406,19 +404,15 @@ failInit:
|
|||
}
|
||||
|
||||
|
||||
/* ArenaAbsFinish -- finish the generic part of the arena
|
||||
*
|
||||
* .finish.caller: Unlike PoolFinish, this is called by the class finish
|
||||
* methods, not the generic Destroy. This is because the class is
|
||||
* responsible for deallocating the descriptor.
|
||||
*/
|
||||
/* ArenaAbsFinish -- finish the generic part of the arena */
|
||||
|
||||
static void ArenaAbsFinish(Arena arena)
|
||||
static void ArenaAbsFinish(Inst inst)
|
||||
{
|
||||
Arena arena = MustBeA(AbstractArena, inst);
|
||||
AVERC(Arena, arena);
|
||||
PoolFinish(ArenaCBSBlockPool(arena));
|
||||
arena->sig = SigInvalid;
|
||||
InstFinish(MustBeA(Inst, arena));
|
||||
NextMethod(Inst, AbstractArena, finish)(inst);
|
||||
GlobalsFinish(ArenaGlobals(arena));
|
||||
LocusFinish(arena);
|
||||
RingFinish(ArenaChunkRing(arena));
|
||||
|
|
@ -510,8 +504,9 @@ void ControlFinish(Arena arena)
|
|||
|
||||
/* ArenaDescribe -- describe the arena */
|
||||
|
||||
static Res ArenaAbsDescribe(Arena arena, mps_lib_FILE *stream, Count depth)
|
||||
static Res ArenaAbsDescribe(Inst inst, mps_lib_FILE *stream, Count depth)
|
||||
{
|
||||
Arena arena = CouldBeA(AbstractArena, inst);
|
||||
Res res;
|
||||
|
||||
if (!TESTC(AbstractArena, arena))
|
||||
|
|
@ -565,7 +560,7 @@ static Res ArenaAbsDescribe(Arena arena, mps_lib_FILE *stream, Count depth)
|
|||
|
||||
Res ArenaDescribe(Arena arena, mps_lib_FILE *stream, Count depth)
|
||||
{
|
||||
return Method(Arena, arena, describe)(arena, stream, depth);
|
||||
return Method(Inst, arena, describe)(MustBeA(Inst, arena), stream, depth);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -311,7 +311,7 @@ static Res ClientArenaCreate(Arena *arenaReturn, ArgList args)
|
|||
return ResOK;
|
||||
|
||||
failChunkCreate:
|
||||
NextMethod(Arena, ClientArena, finish)(arena);
|
||||
NextMethod(Inst, ClientArena, finish)(MustBeA(Inst, arena));
|
||||
failSuperInit:
|
||||
AVER(res != ResOK);
|
||||
return res;
|
||||
|
|
@ -336,7 +336,7 @@ static void ClientArenaDestroy(Arena arena)
|
|||
AVER(arena->reserved == 0);
|
||||
AVER(arena->committed == 0);
|
||||
|
||||
NextMethod(Arena, ClientArena, finish)(arena); /* <code/arena.c#finish.caller> */
|
||||
NextMethod(Inst, ClientArena, finish)(MustBeA(Inst, arena));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -187,17 +187,18 @@ static Bool VMArenaCheck(VMArena vmArena)
|
|||
|
||||
/* VMArenaDescribe -- describe the VMArena
|
||||
*/
|
||||
static Res VMArenaDescribe(Arena arena, mps_lib_FILE *stream, Count depth)
|
||||
static Res VMArenaDescribe(Inst inst, mps_lib_FILE *stream, Count depth)
|
||||
{
|
||||
Res res;
|
||||
Arena arena = CouldBeA(AbstractArena, inst);
|
||||
VMArena vmArena = CouldBeA(VMArena, arena);
|
||||
Res res;
|
||||
|
||||
if (!TESTC(VMArena, vmArena))
|
||||
return ResPARAM;
|
||||
if (stream == NULL)
|
||||
return ResPARAM;
|
||||
|
||||
res = NextMethod(Arena, VMArena, describe)(arena, stream, depth);
|
||||
res = NextMethod(Inst, VMArena, describe)(inst, stream, depth);
|
||||
if (res != ResOK)
|
||||
return res;
|
||||
|
||||
|
|
@ -666,7 +667,7 @@ static Res VMArenaCreate(Arena *arenaReturn, ArgList args)
|
|||
return ResOK;
|
||||
|
||||
failChunkCreate:
|
||||
NextMethod(Arena, VMArena, finish)(arena);
|
||||
NextMethod(Inst, VMArena, finish)(MustBeA(Inst, arena));
|
||||
failArenaInit:
|
||||
VMUnmap(vm, VMBase(vm), VMLimit(vm));
|
||||
failVMMap:
|
||||
|
|
@ -701,7 +702,7 @@ static void VMArenaDestroy(Arena arena)
|
|||
|
||||
vmArena->sig = SigInvalid;
|
||||
|
||||
NextMethod(Arena, VMArena, finish)(arena); /* <code/global.c#finish.caller> */
|
||||
NextMethod(Inst, VMArena, finish)(MustBeA(Inst, arena));
|
||||
|
||||
/* Copy VM descriptor to stack-local storage so that we can continue
|
||||
* using the descriptor after the VM has been unmapped. */
|
||||
|
|
@ -1195,6 +1196,7 @@ mps_res_t mps_arena_vm_growth(mps_arena_t mps_arena,
|
|||
DEFINE_CLASS(Arena, VMArena, klass)
|
||||
{
|
||||
INHERIT_CLASS(klass, VMArena, AbstractArena);
|
||||
klass->protocol.describe = VMArenaDescribe;
|
||||
klass->size = sizeof(VMArenaStruct);
|
||||
klass->varargs = VMArenaVarargs;
|
||||
klass->create = VMArenaCreate;
|
||||
|
|
@ -1205,7 +1207,6 @@ DEFINE_CLASS(Arena, VMArena, klass)
|
|||
klass->chunkInit = VMChunkInit;
|
||||
klass->chunkFinish = VMChunkFinish;
|
||||
klass->compact = VMCompact;
|
||||
klass->describe = VMArenaDescribe;
|
||||
klass->pagesMarkAllocated = VMPagesMarkAllocated;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -494,7 +494,6 @@ typedef struct mps_arena_class_s {
|
|||
size_t size; /* size of outer structure */
|
||||
ArenaVarargsMethod varargs;
|
||||
ArenaInitMethod init;
|
||||
ArenaFinishMethod finish;
|
||||
ArenaCreateMethod create;
|
||||
ArenaDestroyMethod destroy;
|
||||
ArenaPurgeSpareMethod purgeSpare;
|
||||
|
|
@ -504,7 +503,6 @@ typedef struct mps_arena_class_s {
|
|||
ArenaChunkInitMethod chunkInit;
|
||||
ArenaChunkFinishMethod chunkFinish;
|
||||
ArenaCompactMethod compact;
|
||||
ArenaDescribeMethod describe;
|
||||
ArenaPagesMarkAllocatedMethod pagesMarkAllocated;
|
||||
Sig sig;
|
||||
} ArenaClassStruct;
|
||||
|
|
|
|||
|
|
@ -114,7 +114,6 @@ typedef void (*ArenaVarargsMethod)(ArgStruct args[], va_list varargs);
|
|||
typedef Res (*ArenaCreateMethod)(Arena *arenaReturn, ArgList args);
|
||||
typedef void (*ArenaDestroyMethod)(Arena arena);
|
||||
typedef Res (*ArenaInitMethod)(Arena arena, Size grainSize, ArgList args);
|
||||
typedef void (*ArenaFinishMethod)(Arena arena);
|
||||
typedef Size (*ArenaPurgeSpareMethod)(Arena arena, Size size);
|
||||
typedef Res (*ArenaExtendMethod)(Arena arena, Addr base, Size size);
|
||||
typedef Res (*ArenaGrowMethod)(Arena arena, LocusPref pref, Size size);
|
||||
|
|
@ -122,7 +121,6 @@ typedef void (*ArenaFreeMethod)(Addr base, Size size, Pool pool);
|
|||
typedef Res (*ArenaChunkInitMethod)(Chunk chunk, BootBlock boot);
|
||||
typedef void (*ArenaChunkFinishMethod)(Chunk chunk);
|
||||
typedef void (*ArenaCompactMethod)(Arena arena, Trace trace);
|
||||
typedef Res (*ArenaDescribeMethod)(Arena arena, mps_lib_FILE *stream, Count depth);
|
||||
typedef Res (*ArenaPagesMarkAllocatedMethod)(Arena arena, Chunk chunk,
|
||||
Index baseIndex, Count pages,
|
||||
Pool pool);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue