1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-26 16:51:46 -07:00

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
This commit is contained in:
Richard Brooksby 2013-05-09 15:15:40 +01:00
parent 1c14b64665
commit b4e1f173db
13 changed files with 57 additions and 128 deletions

View file

@ -216,19 +216,11 @@ static Res ClientArenaInit(Arena *arenaReturn, ArenaClass class, ArgList args)
AVER(arenaReturn != NULL);
AVER((ArenaClass)mps_arena_class_cl() == class);
AVER(ArgListCheck(args));
if (ArgPick(&arg, args, MPS_KEY_ARENA_SIZE)) {
size = arg.val.size;
if (ArgPick(&arg, args, MPS_KEY_ARENA_CL_ADDR))
base = arg.val.addr;
else {
res = ResPARAM;
goto failParam;
}
} else {
res = ResPARAM;
goto failParam;
}
ArgRequire(&arg, args, MPS_KEY_ARENA_SIZE);
size = arg.val.size;
ArgRequire(&arg, args, MPS_KEY_ARENA_CL_ADDR);
base = arg.val.addr;
AVER(base != (Addr)0);
@ -272,7 +264,7 @@ static Res ClientArenaInit(Arena *arenaReturn, ArenaClass class, ArgList args)
failChunkCreate:
ArenaFinish(arena);
failParam:
AVER(res != ResOK);
return res;
}

View file

@ -478,12 +478,8 @@ static Res VMArenaInit(Arena *arenaReturn, ArenaClass class, ArgList args)
AVER(class == VMArenaClassGet() || class == VMNZArenaClassGet());
AVER(ArgListCheck(args));
if (ArgPick(&arg, args, MPS_KEY_ARENA_SIZE))
userSize = arg.val.size;
else {
res = ResPARAM;
goto failVMCreate;
}
ArgRequire(&arg, args, MPS_KEY_ARENA_SIZE);
userSize = arg.val.size;
AVER(userSize > 0);

View file

@ -142,6 +142,15 @@ found:
}
/* ArgRequire -- take a required argument out of the argument list by keyword */
void ArgRequire(ArgStruct *argOut, ArgList args, Key key) {
if (ArgPick(argOut, args, key))
return;
NOTREACHED;
}
/* C. COPYRIGHT AND LICENSE
*
* Copyright (C) 2001-2013 Ravenbrook Limited <http://www.ravenbrook.com/>.

View file

@ -37,7 +37,7 @@ extern Bool ArgCheck(Arg arg);
extern Bool ArgListCheck(ArgList args);
extern Bool ArgPick(ArgStruct *argOut, ArgList args, Key key);
extern void ArgRequired(ArgStruct *argOut, ArgList args, Key key);
extern void ArgRequire(ArgStruct *argOut, ArgList args, Key key);
extern Bool ArgCheckCant(Arg arg);
extern Bool ArgCheckFormat(Arg arg);

View file

@ -132,12 +132,8 @@ static Res DebugPoolInit(Pool pool, ArgList args)
/* TODO: Split this structure into separate keyword arguments,
now that we can support them. */
if (ArgPick(&arg, args, MPS_KEY_POOL_DEBUG_OPTIONS))
options = (PoolDebugOptions)arg.val.pool_debug_options;
else {
res = ResPARAM;
goto failParam;
}
ArgRequire(&arg, args, MPS_KEY_POOL_DEBUG_OPTIONS);
options = (PoolDebugOptions)arg.val.pool_debug_options;
AVERT(PoolDebugOptions, options);
@ -208,7 +204,7 @@ static Res DebugPoolInit(Pool pool, ArgList args)
tagFail:
alignFail:
SuperclassOfPool(pool)->finish(pool);
failParam:
AVER(res != ResOK);
return res;
}

View file

@ -973,9 +973,9 @@ static Res amcInitComm(Pool pool, RankSet rankSet, ArgList args)
amc = Pool2AMC(pool);
arena = PoolArena(pool);
ArgRequired(&arg, args, MPS_KEY_FORMAT);
ArgRequire(&arg, args, MPS_KEY_FORMAT);
pool->format = arg.val.format;
ArgRequired(&arg, args, MPS_KEY_CHAIN);
ArgRequire(&arg, args, MPS_KEY_CHAIN);
amc->chain = arg.val.chain;
AVERT(Format, pool->format);

View file

@ -769,24 +769,12 @@ static Res AMSInit(Pool pool, ArgList args)
AVERT(Pool, pool);
AVER(ArgListCheck(args));
if (ArgPick(&arg, args, MPS_KEY_CHAIN))
chain = arg.val.chain;
else {
res = ResPARAM;
goto failParam;
}
if (ArgPick(&arg, args, MPS_KEY_FORMAT))
format = arg.val.format;
else {
res = ResPARAM;
goto failParam;
}
if (ArgPick(&arg, args, MPS_KEY_AMS_SUPPORT_AMBIGUOUS))
supportAmbiguous = arg.val.b;
else {
res = ResPARAM;
goto failParam;
}
ArgRequire(&arg, args, MPS_KEY_CHAIN);
chain = arg.val.chain;
ArgRequire(&arg, args, MPS_KEY_FORMAT);
format = arg.val.format;
ArgRequire(&arg, args, MPS_KEY_AMS_SUPPORT_AMBIGUOUS);
supportAmbiguous = arg.val.b;
/* .ambiguous.noshare: If the pool is required to support ambiguous */
/* references, the alloc and white tables cannot be shared. */
@ -795,9 +783,6 @@ static Res AMSInit(Pool pool, ArgList args)
EVENT3(PoolInitAMS, pool, PoolArena(pool), format);
}
return res;
failParam:
return res;
}

View file

@ -541,18 +541,10 @@ static Res AWLInit(Pool pool, ArgList args)
awl = Pool2AWL(pool);
if (ArgPick(&arg, args, MPS_KEY_FORMAT))
format = arg.val.format;
else {
res = ResPARAM;
goto failParam;
}
if (ArgPick(&arg, args, MPS_KEY_AWL_FIND_DEPENDENT))
findDependent = (FindDependentMethod)arg.val.addr_method;
else {
res = ResPARAM;
goto failParam;
}
ArgRequire(&arg, args, MPS_KEY_FORMAT);
format = arg.val.format;
ArgRequire(&arg, args, MPS_KEY_AWL_FIND_DEPENDENT);
findDependent = (FindDependentMethod)arg.val.addr_method;
AVERT(Format, format);
pool->format = format;
@ -584,7 +576,7 @@ static Res AWLInit(Pool pool, ArgList args)
failGenInit:
ChainDestroy(chain);
failParam:
AVER(res != ResOK);
return res;
}

View file

@ -493,12 +493,8 @@ static Res LOInit(Pool pool, ArgList args)
arena = PoolArena(pool);
if (ArgPick(&arg, args, MPS_KEY_FORMAT))
format = arg.val.format;
else {
res = ResPARAM;
goto failParam;
}
ArgRequire(&arg, args, MPS_KEY_FORMAT);
format = arg.val.format;
AVERT(Format, format);
@ -525,7 +521,7 @@ static Res LOInit(Pool pool, ArgList args)
failGenInit:
ChainDestroy(lo->chain);
failParam:
AVER(res != ResOK);
return res;
}

View file

@ -93,8 +93,8 @@ ARG_DEFINE_KEY(mfs_unit_size, Size);
static Res MFSInit(Pool pool, ArgList args)
{
Res res;
Size extendBy, unitSize;
Size extendBy = MFS_EXTEND_BY_DEFAULT;
Size unitSize;
MFS mfs;
Arena arena;
ArgStruct arg;
@ -102,16 +102,11 @@ static Res MFSInit(Pool pool, ArgList args)
AVER(pool != NULL);
AVER(ArgListCheck(args));
if (ArgPick(&arg, args, MPS_KEY_MFS_UNIT_SIZE))
unitSize = arg.val.size;
else {
res = ResPARAM;
goto failParam;
}
ArgRequire(&arg, args, MPS_KEY_MFS_UNIT_SIZE);
unitSize = arg.val.size;
if (ArgPick(&arg, args, MPS_KEY_EXTEND_BY))
extendBy = arg.val.size;
else {
extendBy = MFS_EXTEND_BY_DEFAULT;
if (extendBy < unitSize)
extendBy = unitSize;
}
@ -137,9 +132,6 @@ static Res MFSInit(Pool pool, ArgList args)
AVERT(MFS, mfs);
EVENT4(PoolInitMFS, pool, arena, extendBy, unitSize);
return ResOK;
failParam:
return res;
}

View file

@ -242,36 +242,23 @@ static Res MVTInit(Pool pool, ArgList args)
arena = PoolArena(pool);
AVERT(Arena, arena);
/* FIXME: Inconsistent reporting of bad arguments. Elsewhere we assert or return ResPARAM. */
/* --- Should there be a ResBADARG ? */
if (ArgPick(&arg, args, MPS_KEY_MIN_SIZE)) {
if (ArgPick(&arg, args, MPS_KEY_MIN_SIZE))
minSize = arg.val.size;
unless (minSize > 0)
return ResLIMIT;
}
if (ArgPick(&arg, args, MPS_KEY_MEAN_SIZE)) {
if (ArgPick(&arg, args, MPS_KEY_MEAN_SIZE))
meanSize = arg.val.size;
unless (meanSize >= minSize)
return ResLIMIT;
}
if (ArgPick(&arg, args, MPS_KEY_MAX_SIZE)) {
if (ArgPick(&arg, args, MPS_KEY_MAX_SIZE))
maxSize = arg.val.size;
unless (maxSize >= meanSize)
return ResLIMIT;
}
if (ArgPick(&arg, args, MPS_KEY_MVT_RESERVE_DEPTH)) {
/* --- check that maxSize is not too large */
if (ArgPick(&arg, args, MPS_KEY_MVT_RESERVE_DEPTH))
reserveDepth = arg.val.count;
unless (reserveDepth > 0)
return ResLIMIT;
}
if (ArgPick(&arg, args, MPS_KEY_MVT_FRAG_LIMIT)) {
/* --- check that reserveDepth is not too large or small */
if (ArgPick(&arg, args, MPS_KEY_MVT_FRAG_LIMIT))
fragLimit = arg.val.count;
unless (fragLimit <= 100)
return ResLIMIT;
}
AVER(0 < minSize);
AVER(minSize <= meanSize);
AVER(meanSize <= maxSize);
AVER(reserveDepth > 0);
AVER(fragLimit <= 100);
/* TODO: More sanity checks possible? */
/* see <design/poolmvt/#arch.parameters> */
fillSize = SizeAlignUp(maxSize, ArenaAlign(arena));

View file

@ -363,7 +363,6 @@ static Bool sncFindFreeSeg(Seg *segReturn, SNC snc, Size size)
static Res SNCInit(Pool pool, ArgList args)
{
Res res;
SNC snc;
Format format;
ArgStruct arg;
@ -373,12 +372,8 @@ static Res SNCInit(Pool pool, ArgList args)
snc = Pool2SNC(pool);
if (ArgPick(&arg, args, MPS_KEY_FORMAT))
format = arg.val.format;
else {
res = ResPARAM;
goto failParam;
}
ArgRequire(&arg, args, MPS_KEY_FORMAT);
format = arg.val.format;
AVERT(Format, format);
pool->format = format;
@ -391,9 +386,6 @@ static Res SNCInit(Pool pool, ArgList args)
AVERT(SNC, snc);
EVENT2(PoolInitSNC, pool, format);
return ResOK;
failParam:
return res;
}

View file

@ -341,12 +341,8 @@ static Res AMSTInit(Pool pool, ArgList args)
AVERT(Pool, pool);
if (ArgPick(&arg, args, MPS_KEY_FORMAT))
format = arg.val.format;
else {
res = ResPARAM;
goto failParam;
}
ArgRequire(&arg, args, MPS_KEY_FORMAT);
format = arg.val.format;
res = ChainCreate(&chain, pool->arena, 1, &genParam);
if (res != ResOK)
@ -369,10 +365,6 @@ static Res AMSTInit(Pool pool, ArgList args)
amst->sig = AMSTSig;
AVERT(AMST, amst);
return ResOK;
failParam:
AVER(res != ResOK);
return res;
}