aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorRichard Brooksby2013-05-09 15:15:40 +0100
committerRichard Brooksby2013-05-09 15:15:40 +0100
commitf4416c7efc53e2092dbacd6a2e1d67c4ec3b0a68 (patch)
tree2a0f20245f4fc6c8fc1fbcb3e16f3bf87caab56d /mps/code
parent5acbbfa97e8911961ac3025f6e4f90deb22cf321 (diff)
downloademacs-f4416c7efc53e2092dbacd6a2e1d67c4ec3b0a68.tar.gz
emacs-f4416c7efc53e2092dbacd6a2e1d67c4ec3b0a68.zip
Changing required keyword arguments to cause an assertion rather than return a status code, and removing repetition in how this is expressed.
Copied from Perforce Change: 181674 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/arenacl.c20
-rw-r--r--mps/code/arenavm.c8
-rw-r--r--mps/code/arg.c9
-rw-r--r--mps/code/arg.h2
-rw-r--r--mps/code/dbgpool.c10
-rw-r--r--mps/code/poolamc.c4
-rw-r--r--mps/code/poolams.c27
-rw-r--r--mps/code/poolawl.c18
-rw-r--r--mps/code/poollo.c10
-rw-r--r--mps/code/poolmfs.c16
-rw-r--r--mps/code/poolmv2.c37
-rw-r--r--mps/code/poolsnc.c12
-rw-r--r--mps/code/segsmss.c12
13 files changed, 57 insertions, 128 deletions
diff --git a/mps/code/arenacl.c b/mps/code/arenacl.c
index db10accd6fe..d0e65a53ac1 100644
--- a/mps/code/arenacl.c
+++ b/mps/code/arenacl.c
@@ -216,19 +216,11 @@ static Res ClientArenaInit(Arena *arenaReturn, ArenaClass class, ArgList args)
216 AVER(arenaReturn != NULL); 216 AVER(arenaReturn != NULL);
217 AVER((ArenaClass)mps_arena_class_cl() == class); 217 AVER((ArenaClass)mps_arena_class_cl() == class);
218 AVER(ArgListCheck(args)); 218 AVER(ArgListCheck(args));
219 219
220 if (ArgPick(&arg, args, MPS_KEY_ARENA_SIZE)) { 220 ArgRequire(&arg, args, MPS_KEY_ARENA_SIZE);
221 size = arg.val.size; 221 size = arg.val.size;
222 if (ArgPick(&arg, args, MPS_KEY_ARENA_CL_ADDR)) 222 ArgRequire(&arg, args, MPS_KEY_ARENA_CL_ADDR);
223 base = arg.val.addr; 223 base = arg.val.addr;
224 else {
225 res = ResPARAM;
226 goto failParam;
227 }
228 } else {
229 res = ResPARAM;
230 goto failParam;
231 }
232 224
233 AVER(base != (Addr)0); 225 AVER(base != (Addr)0);
234 226
@@ -272,7 +264,7 @@ static Res ClientArenaInit(Arena *arenaReturn, ArenaClass class, ArgList args)
272 264
273failChunkCreate: 265failChunkCreate:
274 ArenaFinish(arena); 266 ArenaFinish(arena);
275failParam: 267 AVER(res != ResOK);
276 return res; 268 return res;
277} 269}
278 270
diff --git a/mps/code/arenavm.c b/mps/code/arenavm.c
index 0bb83500f25..9904ada470a 100644
--- a/mps/code/arenavm.c
+++ b/mps/code/arenavm.c
@@ -478,12 +478,8 @@ static Res VMArenaInit(Arena *arenaReturn, ArenaClass class, ArgList args)
478 AVER(class == VMArenaClassGet() || class == VMNZArenaClassGet()); 478 AVER(class == VMArenaClassGet() || class == VMNZArenaClassGet());
479 AVER(ArgListCheck(args)); 479 AVER(ArgListCheck(args));
480 480
481 if (ArgPick(&arg, args, MPS_KEY_ARENA_SIZE)) 481 ArgRequire(&arg, args, MPS_KEY_ARENA_SIZE);
482 userSize = arg.val.size; 482 userSize = arg.val.size;
483 else {
484 res = ResPARAM;
485 goto failVMCreate;
486 }
487 483
488 AVER(userSize > 0); 484 AVER(userSize > 0);
489 485
diff --git a/mps/code/arg.c b/mps/code/arg.c
index 4d2447e5c00..14170c3ed35 100644
--- a/mps/code/arg.c
+++ b/mps/code/arg.c
@@ -142,6 +142,15 @@ found:
142} 142}
143 143
144 144
145/* ArgRequire -- take a required argument out of the argument list by keyword */
146
147void ArgRequire(ArgStruct *argOut, ArgList args, Key key) {
148 if (ArgPick(argOut, args, key))
149 return;
150 NOTREACHED;
151}
152
153
145/* C. COPYRIGHT AND LICENSE 154/* C. COPYRIGHT AND LICENSE
146 * 155 *
147 * Copyright (C) 2001-2013 Ravenbrook Limited <http://www.ravenbrook.com/>. 156 * Copyright (C) 2001-2013 Ravenbrook Limited <http://www.ravenbrook.com/>.
diff --git a/mps/code/arg.h b/mps/code/arg.h
index 2647937c201..dc1e8a2a991 100644
--- a/mps/code/arg.h
+++ b/mps/code/arg.h
@@ -37,7 +37,7 @@ extern Bool ArgCheck(Arg arg);
37extern Bool ArgListCheck(ArgList args); 37extern Bool ArgListCheck(ArgList args);
38 38
39extern Bool ArgPick(ArgStruct *argOut, ArgList args, Key key); 39extern Bool ArgPick(ArgStruct *argOut, ArgList args, Key key);
40extern void ArgRequired(ArgStruct *argOut, ArgList args, Key key); 40extern void ArgRequire(ArgStruct *argOut, ArgList args, Key key);
41 41
42extern Bool ArgCheckCant(Arg arg); 42extern Bool ArgCheckCant(Arg arg);
43extern Bool ArgCheckFormat(Arg arg); 43extern Bool ArgCheckFormat(Arg arg);
diff --git a/mps/code/dbgpool.c b/mps/code/dbgpool.c
index d70e855adc3..88dec0532b6 100644
--- a/mps/code/dbgpool.c
+++ b/mps/code/dbgpool.c
@@ -132,12 +132,8 @@ static Res DebugPoolInit(Pool pool, ArgList args)
132 132
133 /* TODO: Split this structure into separate keyword arguments, 133 /* TODO: Split this structure into separate keyword arguments,
134 now that we can support them. */ 134 now that we can support them. */
135 if (ArgPick(&arg, args, MPS_KEY_POOL_DEBUG_OPTIONS)) 135 ArgRequire(&arg, args, MPS_KEY_POOL_DEBUG_OPTIONS);
136 options = (PoolDebugOptions)arg.val.pool_debug_options; 136 options = (PoolDebugOptions)arg.val.pool_debug_options;
137 else {
138 res = ResPARAM;
139 goto failParam;
140 }
141 137
142 AVERT(PoolDebugOptions, options); 138 AVERT(PoolDebugOptions, options);
143 139
@@ -208,7 +204,7 @@ static Res DebugPoolInit(Pool pool, ArgList args)
208tagFail: 204tagFail:
209alignFail: 205alignFail:
210 SuperclassOfPool(pool)->finish(pool); 206 SuperclassOfPool(pool)->finish(pool);
211failParam: 207 AVER(res != ResOK);
212 return res; 208 return res;
213} 209}
214 210
diff --git a/mps/code/poolamc.c b/mps/code/poolamc.c
index 8235b66c05f..b6b4e5c0289 100644
--- a/mps/code/poolamc.c
+++ b/mps/code/poolamc.c
@@ -973,9 +973,9 @@ static Res amcInitComm(Pool pool, RankSet rankSet, ArgList args)
973 amc = Pool2AMC(pool); 973 amc = Pool2AMC(pool);
974 arena = PoolArena(pool); 974 arena = PoolArena(pool);
975 975
976 ArgRequired(&arg, args, MPS_KEY_FORMAT); 976 ArgRequire(&arg, args, MPS_KEY_FORMAT);
977 pool->format = arg.val.format; 977 pool->format = arg.val.format;
978 ArgRequired(&arg, args, MPS_KEY_CHAIN); 978 ArgRequire(&arg, args, MPS_KEY_CHAIN);
979 amc->chain = arg.val.chain; 979 amc->chain = arg.val.chain;
980 980
981 AVERT(Format, pool->format); 981 AVERT(Format, pool->format);
diff --git a/mps/code/poolams.c b/mps/code/poolams.c
index 6d4b8615abf..e5e4b249bcb 100644
--- a/mps/code/poolams.c
+++ b/mps/code/poolams.c
@@ -769,24 +769,12 @@ static Res AMSInit(Pool pool, ArgList args)
769 AVERT(Pool, pool); 769 AVERT(Pool, pool);
770 AVER(ArgListCheck(args)); 770 AVER(ArgListCheck(args));
771 771
772 if (ArgPick(&arg, args, MPS_KEY_CHAIN)) 772 ArgRequire(&arg, args, MPS_KEY_CHAIN);
773 chain = arg.val.chain; 773 chain = arg.val.chain;
774 else { 774 ArgRequire(&arg, args, MPS_KEY_FORMAT);
775 res = ResPARAM; 775 format = arg.val.format;
776 goto failParam; 776 ArgRequire(&arg, args, MPS_KEY_AMS_SUPPORT_AMBIGUOUS);
777 } 777 supportAmbiguous = arg.val.b;
778 if (ArgPick(&arg, args, MPS_KEY_FORMAT))
779 format = arg.val.format;
780 else {
781 res = ResPARAM;
782 goto failParam;
783 }
784 if (ArgPick(&arg, args, MPS_KEY_AMS_SUPPORT_AMBIGUOUS))
785 supportAmbiguous = arg.val.b;
786 else {
787 res = ResPARAM;
788 goto failParam;
789 }
790 778
791 /* .ambiguous.noshare: If the pool is required to support ambiguous */ 779 /* .ambiguous.noshare: If the pool is required to support ambiguous */
792 /* references, the alloc and white tables cannot be shared. */ 780 /* references, the alloc and white tables cannot be shared. */
@@ -795,9 +783,6 @@ static Res AMSInit(Pool pool, ArgList args)
795 EVENT3(PoolInitAMS, pool, PoolArena(pool), format); 783 EVENT3(PoolInitAMS, pool, PoolArena(pool), format);
796 } 784 }
797 return res; 785 return res;
798
799failParam:
800 return res;
801} 786}
802 787
803 788
diff --git a/mps/code/poolawl.c b/mps/code/poolawl.c
index 95534d66958..96f0d2bef03 100644
--- a/mps/code/poolawl.c
+++ b/mps/code/poolawl.c
@@ -541,18 +541,10 @@ static Res AWLInit(Pool pool, ArgList args)
541 541
542 awl = Pool2AWL(pool); 542 awl = Pool2AWL(pool);
543 543
544 if (ArgPick(&arg, args, MPS_KEY_FORMAT)) 544 ArgRequire(&arg, args, MPS_KEY_FORMAT);
545 format = arg.val.format; 545 format = arg.val.format;
546 else { 546 ArgRequire(&arg, args, MPS_KEY_AWL_FIND_DEPENDENT);
547 res = ResPARAM; 547 findDependent = (FindDependentMethod)arg.val.addr_method;
548 goto failParam;
549 }
550 if (ArgPick(&arg, args, MPS_KEY_AWL_FIND_DEPENDENT))
551 findDependent = (FindDependentMethod)arg.val.addr_method;
552 else {
553 res = ResPARAM;
554 goto failParam;
555 }
556 548
557 AVERT(Format, format); 549 AVERT(Format, format);
558 pool->format = format; 550 pool->format = format;
@@ -584,7 +576,7 @@ static Res AWLInit(Pool pool, ArgList args)
584 576
585failGenInit: 577failGenInit:
586 ChainDestroy(chain); 578 ChainDestroy(chain);
587failParam: 579 AVER(res != ResOK);
588 return res; 580 return res;
589} 581}
590 582
diff --git a/mps/code/poollo.c b/mps/code/poollo.c
index 541f0901781..8943f37c8ba 100644
--- a/mps/code/poollo.c
+++ b/mps/code/poollo.c
@@ -493,12 +493,8 @@ static Res LOInit(Pool pool, ArgList args)
493 493
494 arena = PoolArena(pool); 494 arena = PoolArena(pool);
495 495
496 if (ArgPick(&arg, args, MPS_KEY_FORMAT)) 496 ArgRequire(&arg, args, MPS_KEY_FORMAT);
497 format = arg.val.format; 497 format = arg.val.format;
498 else {
499 res = ResPARAM;
500 goto failParam;
501 }
502 498
503 AVERT(Format, format); 499 AVERT(Format, format);
504 500
@@ -525,7 +521,7 @@ static Res LOInit(Pool pool, ArgList args)
525 521
526failGenInit: 522failGenInit:
527 ChainDestroy(lo->chain); 523 ChainDestroy(lo->chain);
528failParam: 524 AVER(res != ResOK);
529 return res; 525 return res;
530} 526}
531 527
diff --git a/mps/code/poolmfs.c b/mps/code/poolmfs.c
index 4a33ed050a1..538be571934 100644
--- a/mps/code/poolmfs.c
+++ b/mps/code/poolmfs.c
@@ -93,8 +93,8 @@ ARG_DEFINE_KEY(mfs_unit_size, Size);
93 93
94static Res MFSInit(Pool pool, ArgList args) 94static Res MFSInit(Pool pool, ArgList args)
95{ 95{
96 Res res; 96 Size extendBy = MFS_EXTEND_BY_DEFAULT;
97 Size extendBy, unitSize; 97 Size unitSize;
98 MFS mfs; 98 MFS mfs;
99 Arena arena; 99 Arena arena;
100 ArgStruct arg; 100 ArgStruct arg;
@@ -102,16 +102,11 @@ static Res MFSInit(Pool pool, ArgList args)
102 AVER(pool != NULL); 102 AVER(pool != NULL);
103 AVER(ArgListCheck(args)); 103 AVER(ArgListCheck(args));
104 104
105 if (ArgPick(&arg, args, MPS_KEY_MFS_UNIT_SIZE)) 105 ArgRequire(&arg, args, MPS_KEY_MFS_UNIT_SIZE);
106 unitSize = arg.val.size; 106 unitSize = arg.val.size;
107 else {
108 res = ResPARAM;
109 goto failParam;
110 }
111 if (ArgPick(&arg, args, MPS_KEY_EXTEND_BY)) 107 if (ArgPick(&arg, args, MPS_KEY_EXTEND_BY))
112 extendBy = arg.val.size; 108 extendBy = arg.val.size;
113 else { 109 else {
114 extendBy = MFS_EXTEND_BY_DEFAULT;
115 if (extendBy < unitSize) 110 if (extendBy < unitSize)
116 extendBy = unitSize; 111 extendBy = unitSize;
117 } 112 }
@@ -137,9 +132,6 @@ static Res MFSInit(Pool pool, ArgList args)
137 AVERT(MFS, mfs); 132 AVERT(MFS, mfs);
138 EVENT4(PoolInitMFS, pool, arena, extendBy, unitSize); 133 EVENT4(PoolInitMFS, pool, arena, extendBy, unitSize);
139 return ResOK; 134 return ResOK;
140
141failParam:
142 return res;
143} 135}
144 136
145 137
diff --git a/mps/code/poolmv2.c b/mps/code/poolmv2.c
index 203bf5a8e36..076d39563b4 100644
--- a/mps/code/poolmv2.c
+++ b/mps/code/poolmv2.c
@@ -242,36 +242,23 @@ static Res MVTInit(Pool pool, ArgList args)
242 arena = PoolArena(pool); 242 arena = PoolArena(pool);
243 AVERT(Arena, arena); 243 AVERT(Arena, arena);
244 244
245 245 if (ArgPick(&arg, args, MPS_KEY_MIN_SIZE))
246 /* FIXME: Inconsistent reporting of bad arguments. Elsewhere we assert or return ResPARAM. */
247 /* --- Should there be a ResBADARG ? */
248 if (ArgPick(&arg, args, MPS_KEY_MIN_SIZE)) {
249 minSize = arg.val.size; 246 minSize = arg.val.size;
250 unless (minSize > 0) 247 if (ArgPick(&arg, args, MPS_KEY_MEAN_SIZE))
251 return ResLIMIT;
252 }
253 if (ArgPick(&arg, args, MPS_KEY_MEAN_SIZE)) {
254 meanSize = arg.val.size; 248 meanSize = arg.val.size;
255 unless (meanSize >= minSize) 249 if (ArgPick(&arg, args, MPS_KEY_MAX_SIZE))
256 return ResLIMIT;
257 }
258 if (ArgPick(&arg, args, MPS_KEY_MAX_SIZE)) {
259 maxSize = arg.val.size; 250 maxSize = arg.val.size;
260 unless (maxSize >= meanSize) 251 if (ArgPick(&arg, args, MPS_KEY_MVT_RESERVE_DEPTH))
261 return ResLIMIT;
262 }
263 if (ArgPick(&arg, args, MPS_KEY_MVT_RESERVE_DEPTH)) {
264 /* --- check that maxSize is not too large */
265 reserveDepth = arg.val.count; 252 reserveDepth = arg.val.count;
266 unless (reserveDepth > 0) 253 if (ArgPick(&arg, args, MPS_KEY_MVT_FRAG_LIMIT))
267 return ResLIMIT;
268 }
269 if (ArgPick(&arg, args, MPS_KEY_MVT_FRAG_LIMIT)) {
270 /* --- check that reserveDepth is not too large or small */
271 fragLimit = arg.val.count; 254 fragLimit = arg.val.count;
272 unless (fragLimit <= 100) 255
273 return ResLIMIT; 256 AVER(0 < minSize);
274 } 257 AVER(minSize <= meanSize);
258 AVER(meanSize <= maxSize);
259 AVER(reserveDepth > 0);
260 AVER(fragLimit <= 100);
261 /* TODO: More sanity checks possible? */
275 262
276 /* see <design/poolmvt/#arch.parameters> */ 263 /* see <design/poolmvt/#arch.parameters> */
277 fillSize = SizeAlignUp(maxSize, ArenaAlign(arena)); 264 fillSize = SizeAlignUp(maxSize, ArenaAlign(arena));
diff --git a/mps/code/poolsnc.c b/mps/code/poolsnc.c
index 6b01c3a9b02..70c618bf385 100644
--- a/mps/code/poolsnc.c
+++ b/mps/code/poolsnc.c
@@ -363,7 +363,6 @@ static Bool sncFindFreeSeg(Seg *segReturn, SNC snc, Size size)
363 363
364static Res SNCInit(Pool pool, ArgList args) 364static Res SNCInit(Pool pool, ArgList args)
365{ 365{
366 Res res;
367 SNC snc; 366 SNC snc;
368 Format format; 367 Format format;
369 ArgStruct arg; 368 ArgStruct arg;
@@ -373,12 +372,8 @@ static Res SNCInit(Pool pool, ArgList args)
373 372
374 snc = Pool2SNC(pool); 373 snc = Pool2SNC(pool);
375 374
376 if (ArgPick(&arg, args, MPS_KEY_FORMAT)) 375 ArgRequire(&arg, args, MPS_KEY_FORMAT);
377 format = arg.val.format; 376 format = arg.val.format;
378 else {
379 res = ResPARAM;
380 goto failParam;
381 }
382 377
383 AVERT(Format, format); 378 AVERT(Format, format);
384 pool->format = format; 379 pool->format = format;
@@ -391,9 +386,6 @@ static Res SNCInit(Pool pool, ArgList args)
391 AVERT(SNC, snc); 386 AVERT(SNC, snc);
392 EVENT2(PoolInitSNC, pool, format); 387 EVENT2(PoolInitSNC, pool, format);
393 return ResOK; 388 return ResOK;
394
395failParam:
396 return res;
397} 389}
398 390
399 391
diff --git a/mps/code/segsmss.c b/mps/code/segsmss.c
index 9d69aff302a..02b29504d34 100644
--- a/mps/code/segsmss.c
+++ b/mps/code/segsmss.c
@@ -341,12 +341,8 @@ static Res AMSTInit(Pool pool, ArgList args)
341 341
342 AVERT(Pool, pool); 342 AVERT(Pool, pool);
343 343
344 if (ArgPick(&arg, args, MPS_KEY_FORMAT)) 344 ArgRequire(&arg, args, MPS_KEY_FORMAT);
345 format = arg.val.format; 345 format = arg.val.format;
346 else {
347 res = ResPARAM;
348 goto failParam;
349 }
350 346
351 res = ChainCreate(&chain, pool->arena, 1, &genParam); 347 res = ChainCreate(&chain, pool->arena, 1, &genParam);
352 if (res != ResOK) 348 if (res != ResOK)
@@ -369,10 +365,6 @@ static Res AMSTInit(Pool pool, ArgList args)
369 amst->sig = AMSTSig; 365 amst->sig = AMSTSig;
370 AVERT(AMST, amst); 366 AVERT(AMST, amst);
371 return ResOK; 367 return ResOK;
372
373failParam:
374 AVER(res != ResOK);
375 return res;
376} 368}
377 369
378 370