aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code/buffer.c
diff options
context:
space:
mode:
authorRichard Brooksby2013-05-09 18:25:53 +0100
committerRichard Brooksby2013-05-09 18:25:53 +0100
commit688b5bf73d7462c8c2fabba7345d689c9aff2f21 (patch)
tree7bf9792425b1cf20f6760a4a840db19f7153f829 /mps/code/buffer.c
parentaf44d1241f83f6e0dd5a1309d68905cf128bd444 (diff)
downloademacs-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/buffer.c')
-rw-r--r--mps/code/buffer.c74
1 files changed, 42 insertions, 32 deletions
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
196static Res BufferInitV(Buffer buffer, BufferClass class, 196static 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
268Res BufferCreate(Buffer *bufferReturn, BufferClass class, 268Res 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
285Res 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
1069static 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
1086static Res bufferTrivInit (Buffer buffer, Pool pool, va_list args) 1078static 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
1099static void bufferTrivFinish (Buffer buffer) 1091static 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
1139static Seg bufferNoSeg (Buffer buffer) 1131static 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
1150static RankSet bufferTrivRankSet (Buffer buffer) 1142static 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
1163static void bufferNoSetRankSet (Buffer buffer, RankSet rankset) 1155static 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
1176static void bufferNoReassignSeg (Buffer buffer, Seg seg) 1168static 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
1281static Res segBufInit (Buffer buffer, Pool pool, va_list args) 1275static 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
1489static 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
1495static Res rankBufInit (Buffer buffer, Pool pool, va_list args) 1500static 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