diff options
| author | Richard Kistruck | 2008-11-24 15:44:27 +0000 |
|---|---|---|
| committer | Richard Kistruck | 2008-11-24 15:44:27 +0000 |
| commit | c7cc77b06ba4a62cd0d6293edd16f6d3d3314497 (patch) | |
| tree | ed18aa3dd3599192988d215274edf1fc2b77c378 /mps/code/message.c | |
| parent | 2c8ce4aa55e0c0d47e02bd903171b7033de4ef66 (diff) | |
| download | emacs-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.c | 28 |
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 | ||
| 50 | Bool MessageCheck(Message message) | 51 | Bool 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 | ||
| 97 | void MessageFinish(Message message) | 98 | void 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 */ |
| 286 | MessageType MessageGetType(Message message) | 287 | MessageType 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, | |||
| 335 | Size MessageGCLiveSize(Message message) | 339 | Size 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) | |||
| 343 | Size MessageGCCondemnedSize(Message message) | 347 | Size 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) | |||
| 351 | Size MessageGCNotCondemnedSize(Message message) | 355 | Size 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) | |||
| 359 | const char *MessageGCStartWhy(Message message) | 363 | const 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 | } |