The T_LEX_ERROR string literal in yyerror won't be merged with the
now-duplicate string in the token name table; use the appropriate
indirection to shave off some bytes.
+static void yyerror(YYLTYPE *, yyscan_t, struct cdecl **, const char *);
static void free_decl(struct cdecl *);
static void free_declspec(struct cdecl_declspec *x)
static void free_decl(struct cdecl *);
static void free_declspec(struct cdecl_declspec *x)
-
-static void
-yyerror(YYLTYPE *loc, yyscan_t scanner, struct cdecl **out, const char *err)
-{
- if (strstr(err, "T_LEX_ERROR"))
- return;
-
- cdecl__err(CDECL_ENOPARSE, "%s", err);
-}
%}
%destructor { free($$); } <strval>
%}
%destructor { free($$); } <strval>
{
return yytname[YYTRANSLATE(token)];
}
{
return yytname[YYTRANSLATE(token)];
}
+
+static void
+yyerror(YYLTYPE *loc, yyscan_t scanner, struct cdecl **out, const char *err)
+{
+ if (strstr(err, yytname[YYTRANSLATE(T_LEX_ERROR)]))
+ return;
+
+ cdecl__err(CDECL_ENOPARSE, "%s", err);
+}