diff --git a/mps/src/buffer.c b/mps/src/buffer.c index 0b99980e5c4..056f65badd1 100644 --- a/mps/src/buffer.c +++ b/mps/src/buffer.c @@ -1,6 +1,6 @@ /* impl.c.buffer: ALLOCATION BUFFER IMPLEMENTATION * - * $HopeName: MMsrc!buffer.c(trunk.55) $ + * $HopeName: MMsrc!buffer.c(trunk.56) $ * Copyright (C) 1999. Harlequin Limited. All rights reserved. * * .purpose: This is (part of) the implementation of allocation buffers. @@ -22,7 +22,7 @@ #include "mpm.h" -SRCID(buffer, "$HopeName: MMsrc!buffer.c(trunk.55) $"); +SRCID(buffer, "$HopeName: MMsrc!buffer.c(trunk.56) $"); /* forward declarations */ @@ -1370,7 +1370,7 @@ static Res segBufInit (Buffer buffer, Pool pool, va_list args) segbuf = BufferSegBuf(buffer); /* Initialize the superclass fields first via next-method call */ - super = EnsureBufferClass(); + super = BUFFER_SUPERCLASS(SegBufClass); res = super->init(buffer, pool, args); if (res != ResOK) return res; @@ -1398,7 +1398,7 @@ static void segBufFinish (Buffer buffer) segbuf->sig = SigInvalid; /* finish the superclass fields last */ - super = EnsureBufferClass(); + super = BUFFER_SUPERCLASS(SegBufClass); super->finish(buffer); } @@ -1534,7 +1534,7 @@ static Res segBufDescribe(Buffer buffer, mps_lib_FILE *stream) return ResFAIL; /* Describe the superclass fields first via next-method call */ - super = EnsureBufferClass(); + super = BUFFER_SUPERCLASS(SegBufClass); res = super->describe(buffer, stream); if(res != ResOK) return res; @@ -1592,7 +1592,7 @@ static Res rankBufInit (Buffer buffer, Pool pool, va_list args) AVER(RankCheck(rank)); /* Initialize the superclass fields first via next-method call */ - super = EnsureSegBufClass(); + super = BUFFER_SUPERCLASS(RankBufClass); res = super->init(buffer, pool, args); if (res != ResOK) return res; diff --git a/mps/src/mpm.h b/mps/src/mpm.h index c29b5b94e47..fa5c3b0bf69 100644 --- a/mps/src/mpm.h +++ b/mps/src/mpm.h @@ -1,6 +1,6 @@ /* impl.h.mpm: MEMORY POOL MANAGER DEFINITIONS * - * $HopeName: MMsrc!mpm.h(trunk.128) $ + * $HopeName: MMsrc!mpm.h(trunk.129) $ * Copyright (C) 1999. Harlequin Limited. All rights reserved. */ @@ -441,6 +441,9 @@ extern AbstractCollectPoolClass EnsureAbstractCollectPoolClass(void); #define DEFINE_POOL_CLASS(className, var) \ DEFINE_ALIAS_CLASS(className, PoolClass, var) +#define POOL_SUPERCLASS(className) \ + (PoolClass)SUPERCLASS(className) + /* Message Interface -- see design.mps.message */ @@ -612,6 +615,9 @@ extern void ActionPoll(Arena arena); #define DEFINE_ARENA_CLASS(className, var) \ DEFINE_ALIAS_CLASS(className, ArenaClass, var) +#define ARENA_SUPERCLASS(className) \ + (ArenaClass)SUPERCLASS(className) + extern AbstractArenaClass EnsureAbstractArenaClass(void); extern Bool ArenaClassCheck(ArenaClass class); extern Bool ArenaCheck(Arena arena); @@ -830,6 +836,9 @@ extern void SegClassMixInNoSplitMerge(SegClass class); #define DEFINE_SEG_CLASS(className, var) \ DEFINE_ALIAS_CLASS(className, SegClass, var) +#define SEG_SUPERCLASS(className) \ + (SegClass)SUPERCLASS(className) + extern Size SegSize(Seg seg); extern Addr (SegBase)(Seg seg); extern Addr (SegLimit)(Seg seg); @@ -934,6 +943,8 @@ extern void BufferFrameSetState(Buffer buffer, FrameState state); #define DEFINE_BUFFER_CLASS(className, var) \ DEFINE_ALIAS_CLASS(className, BufferClass, var) +#define BUFFER_SUPERCLASS(className) \ + (BufferClass)SUPERCLASS(className) extern Bool BufferClassCheck(BufferClass class); extern BufferClass EnsureBufferClass(void);