summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorAkim Demaille <demaille@gostai.com>2008-12-11 09:37:40 +0100
committerJoel E. Denny <jdenny@clemson.edu>2009-12-29 16:01:48 -0500
commitbb57985c2e82a0bb990658b25753ce6212da40ff (patch)
tree5416301b5ae0ad1785b5e2326e2697ce0a17bd12 /data
parent70afaf26037e919f6abf3904e43845d116899df3 (diff)
downloadbison-bb57985c2e82a0bb990658b25753ce6212da40ff.tar.gz
Propagate i18n changes into glr.c.
* data/glr.c (yyreportSyntaxError): Use "switch" instead of building the error message format dynamically. * data/lalr1.java: Formatting changes. (cherry picked from commit 2b008529edd233bac07a58d557869ae902be1818) Conflicts: TODO
Diffstat (limited to 'data')
-rw-r--r--data/glr.c51
-rw-r--r--data/lalr1.java2
2 files changed, 29 insertions, 24 deletions
diff --git a/data/glr.c b/data/glr.c
index c7779d24..60c3e402 100644
--- a/data/glr.c
+++ b/data/glr.c
@@ -2102,18 +2102,10 @@ yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
yybool yysize_overflow = yyfalse;
char* yymsg = NULL;
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = 0;
+ /* Arguments of yyformat. */
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for this
@@ -2123,10 +2115,13 @@ yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
/* Stay within bounds of both yycheck and yytname. */
int yychecklim = YYLAST - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yycount = 1;
- yyarg[0] = yytokenName (yytoken);
- yyfmt = yystpcpy (yyformat, yyunexpected);
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+ int yyx;
+
+ yyarg[yycount++] = yytokenName (yytoken);
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
@@ -2136,19 +2131,29 @@ yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
{
yycount = 1;
yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
break;
}
yyarg[yycount++] = yytokenName (yyx);
yysize1 = yysize + yytnamerr (NULL, yytokenName (yyx));
yysize_overflow |= yysize1 < yysize;
yysize = yysize1;
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
}
- yyf = YY_(yyformat);
- yysize1 = yysize + strlen (yyf);
+ switch (yycount)
+ {
+#define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+#undef YYCASE_
+ }
+
+ yysize1 = yysize + strlen (yyformat);
yysize_overflow |= yysize1 < yysize;
yysize = yysize1;
@@ -2159,17 +2164,17 @@ yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
{
char *yyp = yymsg;
int yyi = 0;
- while ((*yyp = *yyf))
+ while ((*yyp = *yyformat))
{
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
{
yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
+ yyformat += 2;
}
else
{
yyp++;
- yyf++;
+ yyformat++;
}
}
yyerror (]b4_lyyerror_args[yymsg);
diff --git a/data/lalr1.java b/data/lalr1.java
index 8fe59539..74fe39f9 100644
--- a/data/lalr1.java
+++ b/data/lalr1.java
@@ -717,7 +717,7 @@ m4_popdef([b4_at_dollar])])dnl
res.append (yytnamerr_ (yytname_[x]));
}
}
- return res.toString ();
+ return res.toString ();
}
}