aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code/message.c
diff options
context:
space:
mode:
authorRichard Kistruck2008-11-24 15:44:27 +0000
committerRichard Kistruck2008-11-24 15:44:27 +0000
commitc7cc77b06ba4a62cd0d6293edd16f6d3d3314497 (patch)
treeed18aa3dd3599192988d215274edf1fc2b77c378 /mps/code/message.c
parent2c8ce4aa55e0c0d47e02bd903171b7033de4ef66 (diff)
downloademacs-c7cc77b06ba4a62cd0d6293edd16f6d3d3314497.tar.gz
emacs-c7cc77b06ba4a62cd0d6293edd16f6d3d3314497.zip
Mps br/timing: move field "messagetype type" out of messagestruct
and into MessageClassStruct. Copied from Perforce Change: 166795 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code/message.c')
-rw-r--r--mps/code/message.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/mps/code/message.c b/mps/code/message.c
index 3e87f389ba9..424b0d7ed90 100644
--- a/mps/code/message.c
+++ b/mps/code/message.c
@@ -45,14 +45,14 @@ Bool MessageTypeCheck(MessageType type)
45 45
46/* See .message.clocked. Currently finalization messages are the */ 46/* See .message.clocked. Currently finalization messages are the */
47/* only ones that can be numerous. */ 47/* only ones that can be numerous. */
48#define MessageClocked(message) ((message)->type != MessageTypeFINALIZATION) 48#define MessageClocked(message) ((message)->class->type \
49 != MessageTypeFINALIZATION)
49 50
50Bool MessageCheck(Message message) 51Bool MessageCheck(Message message)
51{ 52{
52 CHECKS(Message, message); 53 CHECKS(Message, message);
53 CHECKU(Arena, message->arena); 54 CHECKU(Arena, message->arena);
54 CHECKL(MessageTypeCheck(message->type)); 55 CHECKD(MessageClass, message->class);
55 CHECKU(MessageClass, message->class);
56 CHECKL(RingCheck(&message->queueRing)); 56 CHECKL(RingCheck(&message->queueRing));
57 /* postedClock is uncheckable for clocked message types, */ 57 /* postedClock is uncheckable for clocked message types, */
58 /* but must be 0 for unclocked message types: */ 58 /* but must be 0 for unclocked message types: */
@@ -65,6 +65,7 @@ Bool MessageClassCheck(MessageClass class)
65{ 65{
66 CHECKS(MessageClass, class); 66 CHECKS(MessageClass, class);
67 CHECKL(class->name != NULL); 67 CHECKL(class->name != NULL);
68 CHECKL(MessageTypeCheck(class->type));
68 CHECKL(FUNCHECK(class->delete)); 69 CHECKL(FUNCHECK(class->delete));
69 CHECKL(FUNCHECK(class->finalizationRef)); 70 CHECKL(FUNCHECK(class->finalizationRef));
70 CHECKL(FUNCHECK(class->gcLiveSize)); 71 CHECKL(FUNCHECK(class->gcLiveSize));
@@ -87,11 +88,11 @@ void MessageInit(Arena arena, Message message, MessageClass class,
87 message->arena = arena; 88 message->arena = arena;
88 message->class = class; 89 message->class = class;
89 RingInit(&message->queueRing); 90 RingInit(&message->queueRing);
90 message->type = type;
91 message->postedClock = 0; 91 message->postedClock = 0;
92 message->sig = MessageSig; 92 message->sig = MessageSig;
93 93
94 AVERT(Message, message); 94 AVERT(Message, message);
95 AVER(MessageGetType(message) == type);
95} 96}
96 97
97void MessageFinish(Message message) 98void MessageFinish(Message message)
@@ -127,7 +128,7 @@ void MessagePost(Arena arena, Message message)
127 /* queueRing field must be a singleton, see */ 128 /* queueRing field must be a singleton, see */
128 /* <design/message/#fun.post.singleton> */ 129 /* <design/message/#fun.post.singleton> */
129 AVER(!MessageOnQueue(message)); 130 AVER(!MessageOnQueue(message));
130 if(MessageTypeEnabled(arena, message->type)) { 131 if(MessageTypeEnabled(arena, MessageGetType(message))) {
131 /* .message.clocked: Reading the clock with ClockNow() */ 132 /* .message.clocked: Reading the clock with ClockNow() */
132 /* involves an mpslib call, so we avoid it for message */ 133 /* involves an mpslib call, so we avoid it for message */
133 /* types that may be numerous. */ 134 /* types that may be numerous. */
@@ -285,9 +286,13 @@ void MessageDiscard(Arena arena, Message message)
285/* Return the type of a message */ 286/* Return the type of a message */
286MessageType MessageGetType(Message message) 287MessageType MessageGetType(Message message)
287{ 288{
289 MessageClass class;
288 AVERT(Message, message); 290 AVERT(Message, message);
291
292 class = message->class;
293 AVERT(MessageClass, class);
289 294
290 return message->type; 295 return class->type;
291} 296}
292 297
293/* Return the class of a message */ 298/* Return the class of a message */
@@ -324,8 +329,7 @@ void MessageFinalizationRef(Ref *refReturn, Arena arena,
324 AVER(refReturn != NULL); 329 AVER(refReturn != NULL);
325 AVERT(Arena, arena); 330 AVERT(Arena, arena);
326 AVERT(Message, message); 331 AVERT(Message, message);
327 332 AVER(MessageGetType(message) == MessageTypeFINALIZATION);
328 AVER(message->type == MessageTypeFINALIZATION);
329 333
330 (*message->class->finalizationRef)(refReturn, arena, message); 334 (*message->class->finalizationRef)(refReturn, arena, message);
331 335
@@ -335,7 +339,7 @@ void MessageFinalizationRef(Ref *refReturn, Arena arena,
335Size MessageGCLiveSize(Message message) 339Size MessageGCLiveSize(Message message)
336{ 340{
337 AVERT(Message, message); 341 AVERT(Message, message);
338 AVER(message->type == MessageTypeGC); 342 AVER(MessageGetType(message) == MessageTypeGC);
339 343
340 return (*message->class->gcLiveSize)(message); 344 return (*message->class->gcLiveSize)(message);
341} 345}
@@ -343,7 +347,7 @@ Size MessageGCLiveSize(Message message)
343Size MessageGCCondemnedSize(Message message) 347Size MessageGCCondemnedSize(Message message)
344{ 348{
345 AVERT(Message, message); 349 AVERT(Message, message);
346 AVER(message->type == MessageTypeGC); 350 AVER(MessageGetType(message) == MessageTypeGC);
347 351
348 return (*message->class->gcCondemnedSize)(message); 352 return (*message->class->gcCondemnedSize)(message);
349} 353}
@@ -351,7 +355,7 @@ Size MessageGCCondemnedSize(Message message)
351Size MessageGCNotCondemnedSize(Message message) 355Size MessageGCNotCondemnedSize(Message message)
352{ 356{
353 AVERT(Message, message); 357 AVERT(Message, message);
354 AVER(message->type == MessageTypeGC); 358 AVER(MessageGetType(message) == MessageTypeGC);
355 359
356 return (*message->class->gcNotCondemnedSize)(message); 360 return (*message->class->gcNotCondemnedSize)(message);
357} 361}
@@ -359,7 +363,7 @@ Size MessageGCNotCondemnedSize(Message message)
359const char *MessageGCStartWhy(Message message) 363const char *MessageGCStartWhy(Message message)
360{ 364{
361 AVERT(Message, message); 365 AVERT(Message, message);
362 AVER(message->type == MessageTypeGCSTART); 366 AVER(MessageGetType(message) == MessageTypeGCSTART);
363 367
364 return (*message->class->gcStartWhy)(message); 368 return (*message->class->gcStartWhy)(message);
365} 369}