diff options
| author | Richard Brooksby | 2013-05-09 18:25:53 +0100 |
|---|---|---|
| committer | Richard Brooksby | 2013-05-09 18:25:53 +0100 |
| commit | 688b5bf73d7462c8c2fabba7345d689c9aff2f21 (patch) | |
| tree | 7bf9792425b1cf20f6760a4a840db19f7153f829 /mps/code | |
| parent | af44d1241f83f6e0dd5a1309d68905cf128bd444 (diff) | |
| download | emacs-688b5bf73d7462c8c2fabba7345d689c9aff2f21.tar.gz emacs-688b5bf73d7462c8c2fabba7345d689c9aff2f21.zip | |
Converting varags on buffer and ap creation into keyword argument lists.
Copied from Perforce
Change: 181680
ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
| -rw-r--r-- | mps/code/arg.c | 5 | ||||
| -rw-r--r-- | mps/code/arg.h | 1 | ||||
| -rw-r--r-- | mps/code/buffer.c | 74 | ||||
| -rw-r--r-- | mps/code/mpm.h | 4 | ||||
| -rw-r--r-- | mps/code/mpmst.h | 1 | ||||
| -rw-r--r-- | mps/code/mpmtypes.h | 3 | ||||
| -rw-r--r-- | mps/code/mps.h | 4 | ||||
| -rw-r--r-- | mps/code/mpsi.c | 56 | ||||
| -rw-r--r-- | mps/code/pool.c | 1 | ||||
| -rw-r--r-- | mps/code/poolamc.c | 4 | ||||
| -rw-r--r-- | mps/code/poolsnc.c | 2 |
11 files changed, 92 insertions, 63 deletions
diff --git a/mps/code/arg.c b/mps/code/arg.c index 5cda234adb2..d8ab7277008 100644 --- a/mps/code/arg.c +++ b/mps/code/arg.c | |||
| @@ -87,6 +87,11 @@ Bool ArgCheckRankSet(Arg arg) { | |||
| 87 | return TRUE; | 87 | return TRUE; |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | Bool ArgCheckRank(Arg arg) { | ||
| 91 | CHECKL(RankCheck(arg->val.rank)); | ||
| 92 | return TRUE; | ||
| 93 | } | ||
| 94 | |||
| 90 | 95 | ||
| 91 | ARG_DEFINE_KEY(args_end, Shouldnt); | 96 | ARG_DEFINE_KEY(args_end, Shouldnt); |
| 92 | 97 | ||
diff --git a/mps/code/arg.h b/mps/code/arg.h index 7bf7f0390bf..e756da04182 100644 --- a/mps/code/arg.h +++ b/mps/code/arg.h | |||
| @@ -51,6 +51,7 @@ extern Bool ArgCheckBool(Arg arg); | |||
| 51 | extern Bool ArgCheckCount(Arg arg); | 51 | extern Bool ArgCheckCount(Arg arg); |
| 52 | extern Bool ArgCheckPointer(Arg arg); | 52 | extern Bool ArgCheckPointer(Arg arg); |
| 53 | extern Bool ArgCheckRankSet(Arg arg); | 53 | extern Bool ArgCheckRankSet(Arg arg); |
| 54 | extern Bool ArgCheckRank(Arg arg); | ||
| 54 | 55 | ||
| 55 | 56 | ||
| 56 | #endif /* arg_h */ | 57 | #endif /* arg_h */ |
diff --git a/mps/code/buffer.c b/mps/code/buffer.c index 1731b2d9826..434635c9d3a 100644 --- a/mps/code/buffer.c +++ b/mps/code/buffer.c | |||
| @@ -191,10 +191,10 @@ Res BufferDescribe(Buffer buffer, mps_lib_FILE *stream) | |||
| 191 | } | 191 | } |
| 192 | 192 | ||
| 193 | 193 | ||
| 194 | /* BufferInitV -- initialize an allocation buffer */ | 194 | /* BufferInit -- initialize an allocation buffer */ |
| 195 | 195 | ||
| 196 | static Res BufferInitV(Buffer buffer, BufferClass class, | 196 | static Res BufferInit(Buffer buffer, BufferClass class, |
| 197 | Pool pool, Bool isMutator, va_list args) | 197 | Pool pool, Bool isMutator, ArgList args) |
| 198 | { | 198 | { |
| 199 | Arena arena; | 199 | Arena arena; |
| 200 | Res res; | 200 | Res res; |
| @@ -266,24 +266,7 @@ failInit: | |||
| 266 | * See <design/buffer/#method.create>. */ | 266 | * See <design/buffer/#method.create>. */ |
| 267 | 267 | ||
| 268 | Res BufferCreate(Buffer *bufferReturn, BufferClass class, | 268 | Res BufferCreate(Buffer *bufferReturn, BufferClass class, |
| 269 | Pool pool, Bool isMutator, ...) | 269 | Pool pool, Bool isMutator, ArgList args) |
| 270 | { | ||
| 271 | Res res; | ||
| 272 | va_list args; | ||
| 273 | |||
| 274 | va_start(args, isMutator); | ||
| 275 | res = BufferCreateV(bufferReturn, class, pool, isMutator, args); | ||
| 276 | va_end(args); | ||
| 277 | return res; | ||
| 278 | } | ||
| 279 | |||
| 280 | |||
| 281 | /* BufferCreateV -- create an allocation buffer, with varargs | ||
| 282 | * | ||
| 283 | * See <design/buffer/#method.create>. */ | ||
| 284 | |||
| 285 | Res BufferCreateV(Buffer *bufferReturn, BufferClass class, | ||
| 286 | Pool pool, Bool isMutator, va_list args) | ||
| 287 | { | 270 | { |
| 288 | Res res; | 271 | Res res; |
| 289 | Buffer buffer; | 272 | Buffer buffer; |
| @@ -304,7 +287,7 @@ Res BufferCreateV(Buffer *bufferReturn, BufferClass class, | |||
| 304 | buffer = p; | 287 | buffer = p; |
| 305 | 288 | ||
| 306 | /* Initialize the buffer descriptor structure. */ | 289 | /* Initialize the buffer descriptor structure. */ |
| 307 | res = BufferInitV(buffer, class, pool, isMutator, args); | 290 | res = BufferInit(buffer, class, pool, isMutator, args); |
| 308 | if (res != ResOK) | 291 | if (res != ResOK) |
| 309 | goto failInit; | 292 | goto failInit; |
| 310 | 293 | ||
| @@ -1081,11 +1064,20 @@ void BufferRampReset(Buffer buffer) | |||
| 1081 | /* BufferClass -- support for the basic Buffer class */ | 1064 | /* BufferClass -- support for the basic Buffer class */ |
| 1082 | 1065 | ||
| 1083 | 1066 | ||
| 1067 | /* bufferTrivVarargs -- basic buffer varargs method */ | ||
| 1068 | |||
| 1069 | static void bufferTrivVarargs(ArgStruct args[], va_list varargs) { | ||
| 1070 | UNUSED(varargs); | ||
| 1071 | args[0].key = MPS_KEY_ARGS_END; | ||
| 1072 | AVER(ArgListCheck(args)); | ||
| 1073 | } | ||
| 1074 | |||
| 1075 | |||
| 1084 | /* bufferTrivInit -- basic buffer init method */ | 1076 | /* bufferTrivInit -- basic buffer init method */ |
| 1085 | 1077 | ||
| 1086 | static Res bufferTrivInit (Buffer buffer, Pool pool, va_list args) | 1078 | static Res bufferTrivInit(Buffer buffer, Pool pool, ArgList args) |
| 1087 | { | 1079 | { |
| 1088 | /* initialization happens in BufferInitV so checks are safe */ | 1080 | /* initialization happens in BufferInit so checks are safe */ |
| 1089 | AVERT(Buffer, buffer); | 1081 | AVERT(Buffer, buffer); |
| 1090 | AVERT(Pool, pool); | 1082 | AVERT(Pool, pool); |
| 1091 | UNUSED(args); | 1083 | UNUSED(args); |
| @@ -1096,7 +1088,7 @@ static Res bufferTrivInit (Buffer buffer, Pool pool, va_list args) | |||
| 1096 | 1088 | ||
| 1097 | /* bufferTrivFinish -- basic buffer finish method */ | 1089 | /* bufferTrivFinish -- basic buffer finish method */ |
| 1098 | 1090 | ||
| 1099 | static void bufferTrivFinish (Buffer buffer) | 1091 | static void bufferTrivFinish(Buffer buffer) |
| 1100 | { | 1092 | { |
| 1101 | /* No special finish for simple buffers */ | 1093 | /* No special finish for simple buffers */ |
| 1102 | AVERT(Buffer, buffer); | 1094 | AVERT(Buffer, buffer); |
| @@ -1136,7 +1128,7 @@ static void bufferTrivDetach(Buffer buffer) | |||
| 1136 | * .noseg: basic buffers don't support segments, so this method should | 1128 | * .noseg: basic buffers don't support segments, so this method should |
| 1137 | * not be called. */ | 1129 | * not be called. */ |
| 1138 | 1130 | ||
| 1139 | static Seg bufferNoSeg (Buffer buffer) | 1131 | static Seg bufferNoSeg(Buffer buffer) |
| 1140 | { | 1132 | { |
| 1141 | AVERT(Buffer, buffer); | 1133 | AVERT(Buffer, buffer); |
| 1142 | NOTREACHED; /* .noseg */ | 1134 | NOTREACHED; /* .noseg */ |
| @@ -1147,7 +1139,7 @@ static Seg bufferNoSeg (Buffer buffer) | |||
| 1147 | 1139 | ||
| 1148 | /* bufferTrivRankSet -- basic BufferRankSet accessor method */ | 1140 | /* bufferTrivRankSet -- basic BufferRankSet accessor method */ |
| 1149 | 1141 | ||
| 1150 | static RankSet bufferTrivRankSet (Buffer buffer) | 1142 | static RankSet bufferTrivRankSet(Buffer buffer) |
| 1151 | { | 1143 | { |
| 1152 | AVERT(Buffer, buffer); | 1144 | AVERT(Buffer, buffer); |
| 1153 | /* vanilla buffers can only have empty rank set */ | 1145 | /* vanilla buffers can only have empty rank set */ |
| @@ -1160,7 +1152,7 @@ static RankSet bufferTrivRankSet (Buffer buffer) | |||
| 1160 | * .norank: basic buffers don't support ranksets, so this method should | 1152 | * .norank: basic buffers don't support ranksets, so this method should |
| 1161 | * not be called. */ | 1153 | * not be called. */ |
| 1162 | 1154 | ||
| 1163 | static void bufferNoSetRankSet (Buffer buffer, RankSet rankset) | 1155 | static void bufferNoSetRankSet(Buffer buffer, RankSet rankset) |
| 1164 | { | 1156 | { |
| 1165 | AVERT(Buffer, buffer); | 1157 | AVERT(Buffer, buffer); |
| 1166 | AVERT(RankSet, rankset); | 1158 | AVERT(RankSet, rankset); |
| @@ -1173,7 +1165,7 @@ static void bufferNoSetRankSet (Buffer buffer, RankSet rankset) | |||
| 1173 | * .noseg: basic buffers don't support attachment to segments, so this | 1165 | * .noseg: basic buffers don't support attachment to segments, so this |
| 1174 | * method should not be called. */ | 1166 | * method should not be called. */ |
| 1175 | 1167 | ||
| 1176 | static void bufferNoReassignSeg (Buffer buffer, Seg seg) | 1168 | static void bufferNoReassignSeg(Buffer buffer, Seg seg) |
| 1177 | { | 1169 | { |
| 1178 | AVERT(Buffer, buffer); | 1170 | AVERT(Buffer, buffer); |
| 1179 | AVERT(Seg, seg); | 1171 | AVERT(Seg, seg); |
| @@ -1199,6 +1191,7 @@ Bool BufferClassCheck(BufferClass class) | |||
| 1199 | CHECKL(ProtocolClassCheck(&class->protocol)); | 1191 | CHECKL(ProtocolClassCheck(&class->protocol)); |
| 1200 | CHECKL(class->name != NULL); /* Should be <=6 char C identifier */ | 1192 | CHECKL(class->name != NULL); /* Should be <=6 char C identifier */ |
| 1201 | CHECKL(class->size >= sizeof(BufferStruct)); | 1193 | CHECKL(class->size >= sizeof(BufferStruct)); |
| 1194 | CHECKL(FUNCHECK(class->varargs)); | ||
| 1202 | CHECKL(FUNCHECK(class->init)); | 1195 | CHECKL(FUNCHECK(class->init)); |
| 1203 | CHECKL(FUNCHECK(class->finish)); | 1196 | CHECKL(FUNCHECK(class->finish)); |
| 1204 | CHECKL(FUNCHECK(class->attach)); | 1197 | CHECKL(FUNCHECK(class->attach)); |
| @@ -1222,6 +1215,7 @@ DEFINE_CLASS(BufferClass, class) | |||
| 1222 | INHERIT_CLASS(&class->protocol, ProtocolClass); | 1215 | INHERIT_CLASS(&class->protocol, ProtocolClass); |
| 1223 | class->name = "BUFFER"; | 1216 | class->name = "BUFFER"; |
| 1224 | class->size = sizeof(BufferStruct); | 1217 | class->size = sizeof(BufferStruct); |
| 1218 | class->varargs = bufferTrivVarargs; | ||
| 1225 | class->init = bufferTrivInit; | 1219 | class->init = bufferTrivInit; |
| 1226 | class->finish = bufferTrivFinish; | 1220 | class->finish = bufferTrivFinish; |
| 1227 | class->attach = bufferTrivAttach; | 1221 | class->attach = bufferTrivAttach; |
| @@ -1278,7 +1272,7 @@ Bool SegBufCheck(SegBuf segbuf) | |||
| 1278 | 1272 | ||
| 1279 | /* segBufInit -- SegBuf init method */ | 1273 | /* segBufInit -- SegBuf init method */ |
| 1280 | 1274 | ||
| 1281 | static Res segBufInit (Buffer buffer, Pool pool, va_list args) | 1275 | static Res segBufInit(Buffer buffer, Pool pool, ArgList args) |
| 1282 | { | 1276 | { |
| 1283 | BufferClass super; | 1277 | BufferClass super; |
| 1284 | SegBuf segbuf; | 1278 | SegBuf segbuf; |
| @@ -1490,16 +1484,31 @@ DEFINE_CLASS(SegBufClass, class) | |||
| 1490 | /* RankBufClass -- support for the RankBufClass subclass */ | 1484 | /* RankBufClass -- support for the RankBufClass subclass */ |
| 1491 | 1485 | ||
| 1492 | 1486 | ||
| 1487 | /* rankBufVarargs -- parse obsolete varargs into keywords */ | ||
| 1488 | |||
| 1489 | static void rankBufVarargs(ArgStruct args[], va_list varargs) | ||
| 1490 | { | ||
| 1491 | args[0].key = MPS_KEY_RANK; | ||
| 1492 | args[0].val.rank = va_arg(varargs, Rank); | ||
| 1493 | args[1].key = MPS_KEY_ARGS_END; | ||
| 1494 | AVER(ArgListCheck(args)); | ||
| 1495 | } | ||
| 1496 | |||
| 1497 | |||
| 1493 | /* rankBufInit -- RankBufClass init method */ | 1498 | /* rankBufInit -- RankBufClass init method */ |
| 1494 | 1499 | ||
| 1495 | static Res rankBufInit (Buffer buffer, Pool pool, va_list args) | 1500 | static Res rankBufInit(Buffer buffer, Pool pool, ArgList args) |
| 1496 | { | 1501 | { |
| 1497 | Rank rank = va_arg(args, Rank); | 1502 | Rank rank; |
| 1498 | BufferClass super; | 1503 | BufferClass super; |
| 1499 | Res res; | 1504 | Res res; |
| 1505 | ArgStruct arg; | ||
| 1500 | 1506 | ||
| 1501 | AVERT(Buffer, buffer); | 1507 | AVERT(Buffer, buffer); |
| 1502 | AVERT(Pool, pool); | 1508 | AVERT(Pool, pool); |
| 1509 | AVER(ArgListCheck(args)); | ||
| 1510 | ArgRequire(&arg, args, MPS_KEY_RANK); | ||
| 1511 | rank = arg.val.rank; | ||
| 1503 | AVER(RankCheck(rank)); | 1512 | AVER(RankCheck(rank)); |
| 1504 | 1513 | ||
| 1505 | /* Initialize the superclass fields first via next-method call */ | 1514 | /* Initialize the superclass fields first via next-method call */ |
| @@ -1528,6 +1537,7 @@ DEFINE_CLASS(RankBufClass, class) | |||
| 1528 | { | 1537 | { |
| 1529 | INHERIT_CLASS(class, SegBufClass); | 1538 | INHERIT_CLASS(class, SegBufClass); |
| 1530 | class->name = "RANKBUF"; | 1539 | class->name = "RANKBUF"; |
| 1540 | class->varargs = rankBufVarargs; | ||
| 1531 | class->init = rankBufInit; | 1541 | class->init = rankBufInit; |
| 1532 | } | 1542 | } |
| 1533 | 1543 | ||
diff --git a/mps/code/mpm.h b/mps/code/mpm.h index 52d2478017f..93390a3b2bd 100644 --- a/mps/code/mpm.h +++ b/mps/code/mpm.h | |||
| @@ -708,9 +708,7 @@ extern Addr (SegLimit)(Seg seg); | |||
| 708 | /* Buffer Interface -- see <code/buffer.c> */ | 708 | /* Buffer Interface -- see <code/buffer.c> */ |
| 709 | 709 | ||
| 710 | extern Res BufferCreate(Buffer *bufferReturn, BufferClass class, | 710 | extern Res BufferCreate(Buffer *bufferReturn, BufferClass class, |
| 711 | Pool pool, Bool isMutator, ...); | 711 | Pool pool, Bool isMutator, ArgList args); |
| 712 | extern Res BufferCreateV(Buffer *bufferReturn, BufferClass class, | ||
| 713 | Pool pool, Bool isMutator, va_list args); | ||
| 714 | extern void BufferDestroy(Buffer buffer); | 712 | extern void BufferDestroy(Buffer buffer); |
| 715 | extern Bool BufferCheck(Buffer buffer); | 713 | extern Bool BufferCheck(Buffer buffer); |
| 716 | extern Bool SegBufCheck(SegBuf segbuf); | 714 | extern Bool SegBufCheck(SegBuf segbuf); |
diff --git a/mps/code/mpmst.h b/mps/code/mpmst.h index 98e421ad823..6df155a80df 100644 --- a/mps/code/mpmst.h +++ b/mps/code/mpmst.h | |||
| @@ -331,6 +331,7 @@ typedef struct BufferClassStruct { | |||
| 331 | ProtocolClassStruct protocol; | 331 | ProtocolClassStruct protocol; |
| 332 | const char *name; /* class name string */ | 332 | const char *name; /* class name string */ |
| 333 | size_t size; /* size of outer structure */ | 333 | size_t size; /* size of outer structure */ |
| 334 | BufferVarargsMethod varargs; /* parse obsolete varargs */ | ||
| 334 | BufferInitMethod init; /* initialize the buffer */ | 335 | BufferInitMethod init; /* initialize the buffer */ |
| 335 | BufferFinishMethod finish; /* finish the buffer */ | 336 | BufferFinishMethod finish; /* finish the buffer */ |
| 336 | BufferAttachMethod attach; /* attach the buffer */ | 337 | BufferAttachMethod attach; /* attach the buffer */ |
diff --git a/mps/code/mpmtypes.h b/mps/code/mpmtypes.h index d7ced482b17..8dfe310ea70 100644 --- a/mps/code/mpmtypes.h +++ b/mps/code/mpmtypes.h | |||
| @@ -167,7 +167,8 @@ typedef Res (*SegSplitMethod)(Seg seg, Seg segHi, | |||
| 167 | 167 | ||
| 168 | /* Buffer*Method -- see <design/buffer/> */ | 168 | /* Buffer*Method -- see <design/buffer/> */ |
| 169 | 169 | ||
| 170 | typedef Res (*BufferInitMethod)(Buffer buffer, Pool pool, va_list args); | 170 | typedef void (*BufferVarargsMethod)(ArgStruct args[], va_list varargs); |
| 171 | typedef Res (*BufferInitMethod)(Buffer buffer, Pool pool, ArgList args); | ||
| 171 | typedef void (*BufferFinishMethod)(Buffer buffer); | 172 | typedef void (*BufferFinishMethod)(Buffer buffer); |
| 172 | typedef void (*BufferAttachMethod)(Buffer buffer, Addr base, Addr limit, | 173 | typedef void (*BufferAttachMethod)(Buffer buffer, Addr base, Addr limit, |
| 173 | Addr init, Size size); | 174 | Addr init, Size size); |
diff --git a/mps/code/mps.h b/mps/code/mps.h index 588caced9cb..4373c1861e7 100644 --- a/mps/code/mps.h +++ b/mps/code/mps.h | |||
| @@ -113,6 +113,7 @@ typedef struct mps_arg_s { | |||
| 113 | mps_align_t align; | 113 | mps_align_t align; |
| 114 | mps_word_t count; | 114 | mps_word_t count; |
| 115 | void *p; | 115 | void *p; |
| 116 | mps_rank_t rank; | ||
| 116 | } val; | 117 | } val; |
| 117 | } mps_arg_s; | 118 | } mps_arg_s; |
| 118 | 119 | ||
| @@ -126,6 +127,8 @@ extern const struct mps_key_s _mps_key_format; | |||
| 126 | #define MPS_KEY_FORMAT (&_mps_key_format) | 127 | #define MPS_KEY_FORMAT (&_mps_key_format) |
| 127 | extern const struct mps_key_s _mps_key_chain; | 128 | extern const struct mps_key_s _mps_key_chain; |
| 128 | #define MPS_KEY_CHAIN (&_mps_key_chain) | 129 | #define MPS_KEY_CHAIN (&_mps_key_chain) |
| 130 | extern const struct mps_key_s _mps_key_rank; | ||
| 131 | #define MPS_KEY_RANK (&_mps_key_rank) | ||
| 129 | 132 | ||
| 130 | extern const struct mps_key_s _mps_key_extend_by; | 133 | extern const struct mps_key_s _mps_key_extend_by; |
| 131 | #define MPS_KEY_EXTEND_BY (&_mps_key_extend_by) | 134 | #define MPS_KEY_EXTEND_BY (&_mps_key_extend_by) |
| @@ -418,6 +421,7 @@ extern void mps_free(mps_pool_t, mps_addr_t, size_t); | |||
| 418 | 421 | ||
| 419 | extern mps_res_t mps_ap_create(mps_ap_t *, mps_pool_t, ...); | 422 | extern mps_res_t mps_ap_create(mps_ap_t *, mps_pool_t, ...); |
| 420 | extern mps_res_t mps_ap_create_v(mps_ap_t *, mps_pool_t, va_list); | 423 | extern mps_res_t mps_ap_create_v(mps_ap_t *, mps_pool_t, va_list); |
| 424 | extern mps_res_t mps_ap_create_k(mps_ap_t *, mps_pool_t, mps_arg_s []); | ||
| 421 | extern void mps_ap_destroy(mps_ap_t); | 425 | extern void mps_ap_destroy(mps_ap_t); |
| 422 | 426 | ||
| 423 | extern mps_res_t (mps_reserve)(mps_addr_t *, mps_ap_t, size_t); | 427 | extern mps_res_t (mps_reserve)(mps_addr_t *, mps_ap_t, size_t); |
diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c index cde869c935a..121131c67a2 100644 --- a/mps/code/mpsi.c +++ b/mps/code/mpsi.c | |||
| @@ -318,9 +318,12 @@ mps_bool_t mps_arena_step(mps_arena_t arena, | |||
| 318 | mps_res_t mps_arena_create(mps_arena_t *mps_arena_o, | 318 | mps_res_t mps_arena_create(mps_arena_t *mps_arena_o, |
| 319 | mps_arena_class_t mps_arena_class, ...) | 319 | mps_arena_class_t mps_arena_class, ...) |
| 320 | { | 320 | { |
| 321 | mps_res_t res; | ||
| 321 | va_list varargs; | 322 | va_list varargs; |
| 322 | va_start(varargs, mps_arena_class); | 323 | va_start(varargs, mps_arena_class); |
| 323 | return mps_arena_create_v(mps_arena_o, mps_arena_class, varargs); | 324 | res = mps_arena_create_v(mps_arena_o, mps_arena_class, varargs); |
| 325 | va_end(varargs); | ||
| 326 | return res; | ||
| 324 | } | 327 | } |
| 325 | 328 | ||
| 326 | 329 | ||
| @@ -333,7 +336,6 @@ mps_res_t mps_arena_create_v(mps_arena_t *mps_arena_o, | |||
| 333 | mps_arg_s args[MPS_ARGS_MAX]; | 336 | mps_arg_s args[MPS_ARGS_MAX]; |
| 334 | AVERT(ArenaClass, arena_class); | 337 | AVERT(ArenaClass, arena_class); |
| 335 | arena_class->varargs(args, varargs); | 338 | arena_class->varargs(args, varargs); |
| 336 | va_end(varargs); | ||
| 337 | return mps_arena_create_args(mps_arena_o, arena_class, args); | 339 | return mps_arena_create_args(mps_arena_o, arena_class, args); |
| 338 | } | 340 | } |
| 339 | 341 | ||
| @@ -621,9 +623,12 @@ void mps_fmt_destroy(mps_fmt_t format) | |||
| 621 | mps_res_t mps_pool_create(mps_pool_t *mps_pool_o, mps_arena_t arena, | 623 | mps_res_t mps_pool_create(mps_pool_t *mps_pool_o, mps_arena_t arena, |
| 622 | mps_class_t mps_class, ...) | 624 | mps_class_t mps_class, ...) |
| 623 | { | 625 | { |
| 626 | mps_res_t res; | ||
| 624 | va_list varargs; | 627 | va_list varargs; |
| 625 | va_start(varargs, mps_class); | 628 | va_start(varargs, mps_class); |
| 626 | return mps_pool_create_v(mps_pool_o, arena, mps_class, varargs); | 629 | res = mps_pool_create_v(mps_pool_o, arena, mps_class, varargs); |
| 630 | va_end(varargs); | ||
| 631 | return res; | ||
| 627 | } | 632 | } |
| 628 | 633 | ||
| 629 | mps_res_t mps_pool_create_v(mps_pool_t *mps_pool_o, mps_arena_t arena, | 634 | mps_res_t mps_pool_create_v(mps_pool_t *mps_pool_o, mps_arena_t arena, |
| @@ -632,7 +637,6 @@ mps_res_t mps_pool_create_v(mps_pool_t *mps_pool_o, mps_arena_t arena, | |||
| 632 | mps_arg_s args[MPS_ARGS_MAX]; | 637 | mps_arg_s args[MPS_ARGS_MAX]; |
| 633 | AVERT(PoolClass, class); | 638 | AVERT(PoolClass, class); |
| 634 | class->varargs(args, varargs); | 639 | class->varargs(args, varargs); |
| 635 | va_end(varargs); | ||
| 636 | return mps_pool_create_k(mps_pool_o, arena, class, args); | 640 | return mps_pool_create_k(mps_pool_o, arena, class, args); |
| 637 | } | 641 | } |
| 638 | 642 | ||
| @@ -740,39 +744,42 @@ void mps_free(mps_pool_t pool, mps_addr_t p, size_t size) | |||
| 740 | 744 | ||
| 741 | mps_res_t mps_ap_create(mps_ap_t *mps_ap_o, mps_pool_t pool, ...) | 745 | mps_res_t mps_ap_create(mps_ap_t *mps_ap_o, mps_pool_t pool, ...) |
| 742 | { | 746 | { |
| 747 | mps_res_t res; | ||
| 748 | va_list varargs; | ||
| 749 | va_start(varargs, pool); | ||
| 750 | res = mps_ap_create_v(mps_ap_o, pool, varargs); | ||
| 751 | va_end(varargs); | ||
| 752 | return res; | ||
| 753 | } | ||
| 754 | |||
| 755 | |||
| 756 | /* mps_ap_create_v -- create an allocation point, with varargs */ | ||
| 757 | |||
| 758 | mps_res_t mps_ap_create_v(mps_ap_t *mps_ap_o, mps_pool_t pool, | ||
| 759 | va_list varargs) | ||
| 760 | { | ||
| 743 | Arena arena; | 761 | Arena arena; |
| 744 | Buffer buf; | ||
| 745 | BufferClass bufclass; | 762 | BufferClass bufclass; |
| 746 | Res res; | 763 | mps_arg_s args[MPS_ARGS_MAX]; |
| 747 | va_list args; | ||
| 748 | 764 | ||
| 749 | AVER(mps_ap_o != NULL); | 765 | AVER(mps_ap_o != NULL); |
| 750 | AVER(TESTT(Pool, pool)); | 766 | AVER(TESTT(Pool, pool)); |
| 751 | arena = PoolArena(pool); | 767 | arena = PoolArena(pool); |
| 752 | 768 | ||
| 753 | ArenaEnter(arena); | 769 | ArenaEnter(arena); |
| 754 | |||
| 755 | AVERT(Pool, pool); | 770 | AVERT(Pool, pool); |
| 756 | |||
| 757 | va_start(args, pool); | ||
| 758 | bufclass = PoolDefaultBufferClass(pool); | 771 | bufclass = PoolDefaultBufferClass(pool); |
| 759 | res = BufferCreateV(&buf, bufclass, pool, TRUE, args); | 772 | bufclass->varargs(args, varargs); |
| 760 | va_end(args); | ||
| 761 | |||
| 762 | ArenaLeave(arena); | 773 | ArenaLeave(arena); |
| 763 | 774 | ||
| 764 | if (res != ResOK) | 775 | return mps_ap_create_k(mps_ap_o, pool, args); |
| 765 | return res; | ||
| 766 | *mps_ap_o = BufferAP(buf); | ||
| 767 | return MPS_RES_OK; | ||
| 768 | } | 776 | } |
| 769 | 777 | ||
| 778 | /* mps_ap_create_k -- create an allocation point, with keyword args */ | ||
| 770 | 779 | ||
| 771 | /* mps_ap_create_v -- create an allocation point, with varargs */ | 780 | mps_res_t mps_ap_create_k(mps_ap_t *mps_ap_o, |
| 772 | 781 | mps_pool_t pool, | |
| 773 | mps_res_t mps_ap_create_v(mps_ap_t *mps_ap_o, mps_pool_t pool, | 782 | mps_arg_s args[]) { |
| 774 | va_list args) | ||
| 775 | { | ||
| 776 | Arena arena; | 783 | Arena arena; |
| 777 | Buffer buf; | 784 | Buffer buf; |
| 778 | BufferClass bufclass; | 785 | BufferClass bufclass; |
| @@ -787,12 +794,13 @@ mps_res_t mps_ap_create_v(mps_ap_t *mps_ap_o, mps_pool_t pool, | |||
| 787 | AVERT(Pool, pool); | 794 | AVERT(Pool, pool); |
| 788 | 795 | ||
| 789 | bufclass = PoolDefaultBufferClass(pool); | 796 | bufclass = PoolDefaultBufferClass(pool); |
| 790 | res = BufferCreateV(&buf, bufclass, pool, TRUE, args); | 797 | res = BufferCreate(&buf, bufclass, pool, TRUE, args); |
| 791 | 798 | ||
| 792 | ArenaLeave(arena); | 799 | ArenaLeave(arena); |
| 793 | 800 | ||
| 794 | if (res != ResOK) | 801 | if (res != ResOK) |
| 795 | return res; | 802 | return res; |
| 803 | |||
| 796 | *mps_ap_o = BufferAP(buf); | 804 | *mps_ap_o = BufferAP(buf); |
| 797 | return MPS_RES_OK; | 805 | return MPS_RES_OK; |
| 798 | } | 806 | } |
diff --git a/mps/code/pool.c b/mps/code/pool.c index ff31b09a8af..bab44c83c7f 100644 --- a/mps/code/pool.c +++ b/mps/code/pool.c | |||
| @@ -110,6 +110,7 @@ Bool PoolCheck(Pool pool) | |||
| 110 | 110 | ||
| 111 | ARG_DEFINE_KEY(format, Format); | 111 | ARG_DEFINE_KEY(format, Format); |
| 112 | ARG_DEFINE_KEY(chain, Chain); | 112 | ARG_DEFINE_KEY(chain, Chain); |
| 113 | ARG_DEFINE_KEY(rank, Rank); | ||
| 113 | ARG_DEFINE_KEY(extend_by, Size); | 114 | ARG_DEFINE_KEY(extend_by, Size); |
| 114 | ARG_DEFINE_KEY(min_size, Size); | 115 | ARG_DEFINE_KEY(min_size, Size); |
| 115 | ARG_DEFINE_KEY(mean_size, Size); | 116 | ARG_DEFINE_KEY(mean_size, Size); |
diff --git a/mps/code/poolamc.c b/mps/code/poolamc.c index 6ec1c63137b..59c4453c4ff 100644 --- a/mps/code/poolamc.c +++ b/mps/code/poolamc.c | |||
| @@ -611,7 +611,7 @@ static void amcBufSetGen(Buffer buffer, amcGen gen) | |||
| 611 | 611 | ||
| 612 | /* AMCBufInit -- Initialize an amcBuf */ | 612 | /* AMCBufInit -- Initialize an amcBuf */ |
| 613 | 613 | ||
| 614 | static Res AMCBufInit(Buffer buffer, Pool pool, va_list args) | 614 | static Res AMCBufInit(Buffer buffer, Pool pool, ArgList args) |
| 615 | { | 615 | { |
| 616 | AMC amc; | 616 | AMC amc; |
| 617 | amcBuf amcbuf; | 617 | amcBuf amcbuf; |
| @@ -696,7 +696,7 @@ static Res amcGenCreate(amcGen *genReturn, AMC amc, Serial genNr) | |||
| 696 | goto failControlAlloc; | 696 | goto failControlAlloc; |
| 697 | gen = (amcGen)p; | 697 | gen = (amcGen)p; |
| 698 | 698 | ||
| 699 | res = BufferCreate(&buffer, EnsureamcBufClass(), pool, FALSE); | 699 | res = BufferCreate(&buffer, EnsureamcBufClass(), pool, FALSE, argsNone); |
| 700 | if(res != ResOK) | 700 | if(res != ResOK) |
| 701 | goto failBufferCreate; | 701 | goto failBufferCreate; |
| 702 | 702 | ||
diff --git a/mps/code/poolsnc.c b/mps/code/poolsnc.c index 9f999abf9fc..358548b2e07 100644 --- a/mps/code/poolsnc.c +++ b/mps/code/poolsnc.c | |||
| @@ -127,7 +127,7 @@ static void sncBufferSetTopSeg(Buffer buffer, Seg seg) | |||
| 127 | 127 | ||
| 128 | /* SNCBufInit -- Initialize an SNCBuf */ | 128 | /* SNCBufInit -- Initialize an SNCBuf */ |
| 129 | 129 | ||
| 130 | static Res SNCBufInit (Buffer buffer, Pool pool, va_list args) | 130 | static Res SNCBufInit(Buffer buffer, Pool pool, ArgList args) |
| 131 | { | 131 | { |
| 132 | SNCBuf sncbuf; | 132 | SNCBuf sncbuf; |
| 133 | Res res; | 133 | Res res; |