X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/dcb086e9b8b8005694e52ee1710621c5d855c536..fddbedf7b1b4b19add30eeb62281748cc77e6955:/lib/keyword.h diff --git a/lib/keyword.h b/lib/keyword.h index 5b486bf..525b31f 100644 --- a/lib/keyword.h +++ b/lib/keyword.h @@ -322,7 +322,8 @@ extern kw_unkhookfn *kw_unkhook; size_t nn; \ \ for (k = kwfirst; k; k = va_arg(*ap, const char *)) { \ - if (!strcmp(k, "kw.valist")) { \ + set##_KWSET(KWSET__ARGVA) \ + /*else*/ if (!strcmp(k, "kw.valist")) { \ aap = va_arg(*ap, va_list *); \ kk = va_arg(*aap, const char *); \ set##_kwparse(kw, kk, aap, 0, 0); \ @@ -330,35 +331,33 @@ extern kw_unkhookfn *kw_unkhook; vv = va_arg(*ap, const struct kwval *); \ nn = va_arg(*ap, size_t); \ set##_kwparse(kw, 0, 0, vv, nn); \ - } \ - set##_KWSET(KWSET__ARGVA) \ - else kw_unknown(#set, k); \ + } else kw_unknown(#set, k); \ } \ \ while (n) { \ - if (!strcmp(v->kw, "kw.valist")) { \ + set##_KWSET(KWSET__ARGTAB) \ + /*else*/ if (!strcmp(v->kw, "kw.valist")) { \ aap = *(va_list *const *)v->val; \ kk = va_arg(*aap, const char *); \ set##_kwparse(kw, kk, aap, 0, 0); \ } else if (!strcmp(v->kw, "kw.tab")) { \ t = (const struct kwtab *)v->val; \ set##_kwparse(kw, 0, 0, t->v, t->n); \ - } \ - set##_KWSET(KWSET__ARGTAB) \ - else kw_unknown(#set, v->kw); \ + } else kw_unknown(#set, v->kw); \ v++; n--; \ } \ } + #define KWSET__ARGVA(type, name, dflt) \ - else if (!strcmp(k, #name)) { \ + if (!strcmp(k, #name)) { \ kw->name##_suppliedp = 1; \ kw->name = va_arg(*ap, type); \ - } + } else #define KWSET__ARGTAB(type, name, dflt) \ - else if (!strcmp(v->kw, #name)) { \ + if (!strcmp(v->kw, #name)) { \ kw->name##_suppliedp = 1; \ kw->name = *(type const *)v->val; \ - } + } else /*----- Defining keyword-accepting functions ------------------------------*/