]> git.draconx.ca Git - cdecl99.git/blobdiff - src/parse.y
libcdecl: Simplify Bison error message reporting.
[cdecl99.git] / src / parse.y
index 1542c0904e5bea5320ec864646fcfd4ddb63bd64..f507d5b6ee106e163f7c98a0e31150c906672efa 100644 (file)
        ALLOC(ptr, sizeof (type)); \
        *(ptr) = (type) { __VA_ARGS__ }; \
 } while (0)
+
+/*
+ * With the postprocessing performed by fix-yytname.awk, all the symbol
+ * name strings can be used directly in error messages and there is no
+ * need for any string processing.
+ */
+#define yytnamerr(a, b) cdecl__strlcpy(a, b, (a) ? INT_MAX : 0)
 %}
 
 %code requires {
@@ -343,7 +350,7 @@ typespec_simple: T_VOID
        | T_COMPLEX
        | T_IMAGINARY
 
-typespec_tagged: T_STRUCT | T_UNION | T_ENUM
+typespec_tagged: T_STRUCT | T_UNION | T_ENUM | { $$ = CDECL_TYPE_IDENT; }
 
 qualifier_simple: T_CONST
        | T_RESTRICT
@@ -365,10 +372,6 @@ typespec: typespec_noid | typespec_tagged T_IDENT {
        ALLOC_STRUCT($$, struct cdecl_declspec,
                .type  = $1,
                .ident = $2);
-} | T_IDENT {
-       ALLOC_STRUCT($$, struct cdecl_declspec,
-               .type = CDECL_TYPE_IDENT,
-               .ident = $1);
 }
 
 declspec_noid: declspec_notype | typespec_noid