]> git.draconx.ca Git - cdecl99.git/commitdiff
libcdecl: Avoid redundant string literal in yyerror.
authorNick Bowler <nbowler@draconx.ca>
Tue, 18 Jul 2023 02:33:03 +0000 (22:33 -0400)
committerNick Bowler <nbowler@draconx.ca>
Thu, 20 Jul 2023 00:13:12 +0000 (20:13 -0400)
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.

src/parse.y

index b77cfbb1f4f1e454c16ef77ea3131e96f87c78d5..abfccd20a5accb80404c9e5d399eb528742552da 100644 (file)
@@ -76,6 +76,7 @@ const char *cdecl__token_name(unsigned token);
 }
 
 %{
+static void yyerror(YYLTYPE *, yyscan_t, struct cdecl **, const char *);
 static void free_decl(struct cdecl *);
 
 static void free_declspec(struct cdecl_declspec *x)
@@ -141,15 +142,6 @@ void cdecl__free(struct cdecl *decl)
 {
        free_decl(decl);
 }
-
-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>
@@ -614,3 +606,12 @@ const char *cdecl__token_name(unsigned 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);
+}