diff options
author | Akim Demaille <demaille@gostai.com> | 2008-12-11 09:37:40 +0100 |
---|---|---|
committer | Joel E. Denny <jdenny@clemson.edu> | 2009-12-29 16:01:48 -0500 |
commit | bb57985c2e82a0bb990658b25753ce6212da40ff (patch) | |
tree | 5416301b5ae0ad1785b5e2326e2697ce0a17bd12 /data | |
parent | 70afaf26037e919f6abf3904e43845d116899df3 (diff) | |
download | bison-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.c | 51 | ||||
-rw-r--r-- | data/lalr1.java | 2 |
2 files changed, 29 insertions, 24 deletions
@@ -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 (); } } |