summaryrefslogtreecommitdiff
path: root/input.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2012-08-29 18:13:11 +0000
committerSimon Tatham <anakin@pobox.com>2012-08-29 18:13:11 +0000
commit1489dc15967970576d08f3f2b22c6e1c939bcbcf (patch)
tree0b27653cc4d5485e273edbf5e8ade37b26b6b44c /input.c
parent17fc8b40eb9b3f03945512bf17be99332aeefecb (diff)
downloadhalibut-1489dc15967970576d08f3f2b22c6e1c939bcbcf.zip
halibut-1489dc15967970576d08f3f2b22c6e1c939bcbcf.tar.gz
halibut-1489dc15967970576d08f3f2b22c6e1c939bcbcf.tar.bz2
halibut-1489dc15967970576d08f3f2b22c6e1c939bcbcf.tar.xz
Revamp of the Halibut error handling mechanism.
I'm not quite sure why I ever thought it was a good idea to have a central variadic error() function taking an integer error code followed by some list of arguments that depend on that code. It now seems obvious to me that it's a much more sensible idea to have a separate function per error, so that we can check at compile time that the arguments to each error call are of the right number and type! So I've done that instead. A side effect is that the errors are no longer formatted into a fixed-size buffer before going to stderr, so I can remove all the %.200s precautions in the format strings. [originally from svn r9639]
Diffstat (limited to 'input.c')
-rw-r--r--input.c63
1 files changed, 31 insertions, 32 deletions
diff --git a/input.c b/input.c
index 1410022..1ec733c 100644
--- a/input.c
+++ b/input.c
@@ -49,7 +49,7 @@ static void macrodef(tree234 *macros, wchar_t *name, wchar_t *text,
m->name = name;
m->text = text;
if (add234(macros, m) != m) {
- error(err_macroexists, &fpos, name);
+ err_macroexists(&fpos, name);
sfree(name);
sfree(text);
}
@@ -693,7 +693,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
wtype == word_WeakCode) {
wtype = word_Emph;
} else {
- error(err_brokencodepara, &t.pos);
+ err_brokencodepara(&t.pos);
prev_para_type = par.type;
addpara(par, ret);
while (t.type != tok_eop) /* error recovery: */
@@ -722,7 +722,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
*/
dtor(t), t = get_token(in);
if (t.type != tok_lbrace) {
- error(err_explbr, &t.pos);
+ err_explbr(&t.pos);
continue;
}
@@ -765,7 +765,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
* don't give a cascade error.
*/
sitem->type = -1;
- error(err_misplacedlcont, &t.pos);
+ err_misplacedlcont(&t.pos);
}
} else {
/*
@@ -790,7 +790,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
} else if (t.type == tok_rbrace) {
struct crossparaitem *sitem = stk_pop(crossparastk);
if (!sitem)
- error(err_unexbrace, &t.pos);
+ err_unexbrace(&t.pos);
else {
switch (sitem->type) {
case c_lcont:
@@ -832,7 +832,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
needkw = -1;
break;
case c__invalid:
- error(err_badparatype, t.text, &t.pos);
+ err_badparatype(t.text, &t.pos);
needkw = 4;
break;
case c__comment:
@@ -891,8 +891,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
par.type == para_UnnumberedChapter) {
struct crossparaitem *sitem = stk_top(crossparastk);
if (sitem && (sitem->seen_lcont || sitem->seen_quote)) {
- error(err_sectmarkerinblock,
- &t.pos,
+ err_sectmarkerinblock( &t.pos,
(sitem->seen_lcont ? "lcont" : "quote"));
}
}
@@ -945,7 +944,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
}
}
if (t.type != tok_rbrace) {
- error(err_kwunclosed, &t.pos);
+ err_kwunclosed(&t.pos);
continue;
}
rdadd(&rs, 0); /* add string terminator */
@@ -958,11 +957,11 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
/* See whether we have the right number of keywords. */
if ((needkw & 48) && nkeys > 0)
- error(err_kwillegal, &fp);
+ err_kwillegal(&fp);
if ((needkw & 11) && nkeys == 0)
- error(err_kwexpected, &fp);
+ err_kwexpected(&fp);
if ((needkw & 5) && nkeys > 1)
- error(err_kwtoomany, &fp);
+ err_kwtoomany(&fp);
if (is_macro) {
/*
@@ -996,7 +995,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
if (t.type != tok_eop && t.type != tok_eof &&
(start_cmd == c__invalid ||
t.type != tok_cmd || t.cmd != start_cmd)) {
- error(err_bodyillegal, &t.pos);
+ err_bodyillegal(&t.pos);
/* Error recovery: eat the rest of the paragraph */
while (t.type != tok_eop && t.type != tok_eof &&
(start_cmd == c__invalid ||
@@ -1113,7 +1112,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
}
break;
case tok_lbrace:
- error(err_unexbrace, &t.pos);
+ err_unexbrace(&t.pos);
/* Error recovery: push nop */
sitem = snew(struct stack_item);
sitem->type = stack_nop;
@@ -1199,7 +1198,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
*/
dtor(t), t = get_token(in);
if (t.type != tok_lbrace) {
- error(err_explbr, &t.pos);
+ err_explbr(&t.pos);
} else {
int braces = 1;
while (braces > 0) {
@@ -1209,7 +1208,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
else if (t.type == tok_rbrace)
braces--;
else if (t.type == tok_eof) {
- error(err_commenteof, &t.pos);
+ err_commenteof(&t.pos);
break;
}
}
@@ -1228,7 +1227,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
type = t.cmd;
dtor(t), t = get_token(in);
if (t.type != tok_lbrace) {
- error(err_explbr, &t.pos);
+ err_explbr(&t.pos);
} else {
/*
* Enforce that \q may not be used anywhere
@@ -1257,7 +1256,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
}
stype = stack_quote;
} else {
- error(err_codequote, &t.pos);
+ err_codequote(&t.pos);
stype = stack_nop;
}
sitem = snew(struct stack_item);
@@ -1265,7 +1264,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
sitem->type = stype;
if (type == c_cq) {
if (style != word_Normal) {
- error(err_nestedstyles, &t.pos);
+ err_nestedstyles(&t.pos);
} else {
style = word_WeakCode;
spcstyle = tospacestyle(style);
@@ -1303,7 +1302,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
wdtext = ustrftime(NULL, broken);
wd.type = style;
} else {
- error(err_explbr, &t.pos);
+ err_explbr(&t.pos);
wdtext = NULL;
}
} else {
@@ -1325,7 +1324,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
}
sfree(rs.text);
if (t.type != tok_rbrace) {
- error(err_kwexprbr, &t.pos);
+ err_kwexprbr(&t.pos);
}
}
wd.alt = NULL;
@@ -1355,7 +1354,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
if (t.type == tok_cmd &&
(t.cmd == c_i || t.cmd == c_ii)) {
if (indexing) {
- error(err_nestedindex, &t.pos);
+ err_nestedindex(&t.pos);
} else {
/* Add an index-reference word with no
* text as yet */
@@ -1386,7 +1385,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
if (t.type == tok_cmd &&
(t.cmd == c_e || t.cmd == c_c || t.cmd == c_cw)) {
if (style != word_Normal)
- error(err_nestedstyles, &t.pos);
+ err_nestedstyles(&t.pos);
else {
style = (t.cmd == c_c ? word_Code :
t.cmd == c_cw ? word_WeakCode :
@@ -1397,7 +1396,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
dtor(t), t = get_token(in);
}
if (t.type != tok_lbrace) {
- error(err_explbr, &t.pos);
+ err_explbr(&t.pos);
sfree(sitem);
} else {
stk_push(parsestk, sitem);
@@ -1409,7 +1408,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
case c_e:
type = t.cmd;
if (style != word_Normal) {
- error(err_nestedstyles, &t.pos);
+ err_nestedstyles(&t.pos);
/* Error recovery: eat lbrace, push nop. */
dtor(t), t = get_token(in);
sitem = snew(struct stack_item);
@@ -1419,7 +1418,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
}
dtor(t), t = get_token(in);
if (t.type != tok_lbrace) {
- error(err_explbr, &t.pos);
+ err_explbr(&t.pos);
} else {
style = (type == c_c ? word_Code :
type == c_cw ? word_WeakCode :
@@ -1436,7 +1435,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
case c_I:
type = t.cmd;
if (indexing) {
- error(err_nestedindex, &t.pos);
+ err_nestedindex(&t.pos);
/* Error recovery: eat lbrace, push nop. */
dtor(t), t = get_token(in);
sitem = snew(struct stack_item);
@@ -1455,7 +1454,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
if (t.type == tok_cmd &&
(t.cmd == c_e || t.cmd == c_c || t.cmd == c_cw)) {
if (style != word_Normal)
- error(err_nestedstyles, &t.pos);
+ err_nestedstyles(&t.pos);
else {
style = (t.cmd == c_c ? word_Code :
t.cmd == c_cw ? word_WeakCode :
@@ -1467,7 +1466,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
}
if (t.type != tok_lbrace) {
sfree(sitem);
- error(err_explbr, &t.pos);
+ err_explbr(&t.pos);
} else {
/* Add an index-reference word with no text as yet */
wd.type = word_IndexRef;
@@ -1530,7 +1529,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
break;
default:
if (!macrolookup(macros, in, t.text, &t.pos))
- error(err_badmidcmd, t.text, &t.pos);
+ err_badmidcmd(t.text, &t.pos);
break;
}
}
@@ -1543,7 +1542,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
if (stk_top(parsestk)) {
while ((sitem = stk_pop(parsestk)))
sfree(sitem);
- error(err_missingrbrace, &t.pos);
+ err_missingrbrace(&t.pos);
}
stk_free(parsestk);
prev_para_type = par.type;
@@ -1565,7 +1564,7 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx,
if (stk_top(crossparastk)) {
void *p;
- error(err_missingrbrace2, &t.pos);
+ err_missingrbrace2(&t.pos);
while ((p = stk_pop(crossparastk)))
sfree(p);
}