%token T_COMMA ","
%token T_ELLIPSIS "."
-%token T_TYPEDEF "typedef"
-%token T_EXTERN "extern"
-%token T_STATIC "static"
-%token T_AUTO "auto"
-%token T_REGISTER "register"
-
-%token T_INLINE "inline"
-
-%token T_RESTRICT "restrict"
-%token T_VOLATILE "volatile"
-%token T_CONST "const"
-
-%token T_VOID "void"
-%token T_CHAR "char"
-%token T_SHORT "short"
-%token T_INT "int"
-%token T_LONG "long"
-%token T_FLOAT "float"
-%token T_DOUBLE "double"
-%token T_SIGNED "signed"
-%token T_UNSIGNED "unsigned"
-%token T_BOOL "_Bool"
-%token T_COMPLEX "_Complex"
-
-%token T_STRUCT "struct"
-%token T_UNION "union"
-%token T_ENUM "enum"
+%token T_TYPEDEF "typedef"
+%token T_EXTERN "extern"
+%token T_STATIC "static"
+%token T_AUTO "auto"
+%token T_REGISTER "register"
+
+%token T_INLINE "inline"
+
+%token T_RESTRICT "restrict"
+%token T_VOLATILE "volatile"
+%token T_CONST "const"
+
+%token T_VOID "void"
+%token T_CHAR "char"
+%token T_SHORT "short"
+%token T_INT "int"
+%token T_LONG "long"
+%token T_FLOAT "float"
+%token T_DOUBLE "double"
+%token T_SIGNED "signed"
+%token T_UNSIGNED "unsigned"
+%token T_BOOL "_Bool"
+%token T_COMPLEX "_Complex"
+%token T_IMAGINARY "_Imaginary"
+
+%token T_STRUCT "struct"
+%token T_UNION "union"
+%token T_ENUM "enum"
%type <strval> vla_ident
%type <boolval> varargs
| T_REGISTER { $$ = CDECL_STOR_REGISTER; }
| T_INLINE { $$ = CDECL_FUNC_INLINE; }
-typespec_simple: T_VOID { $$ = CDECL_TYPE_VOID; }
- | T_CHAR { $$ = CDECL_TYPE_CHAR; }
- | T_SHORT { $$ = CDECL_TYPE_SHORT; }
- | T_INT { $$ = CDECL_TYPE_INT; }
- | T_LONG { $$ = CDECL_TYPE_LONG; }
- | T_FLOAT { $$ = CDECL_TYPE_FLOAT; }
- | T_DOUBLE { $$ = CDECL_TYPE_DOUBLE; }
- | T_SIGNED { $$ = CDECL_TYPE_SIGNED; }
- | T_UNSIGNED { $$ = CDECL_TYPE_UNSIGNED; }
- | T_BOOL { $$ = CDECL_TYPE_BOOL; }
- | T_COMPLEX { $$ = CDECL_TYPE_COMPLEX; }
+typespec_simple: T_VOID { $$ = CDECL_TYPE_VOID; }
+ | T_CHAR { $$ = CDECL_TYPE_CHAR; }
+ | T_SHORT { $$ = CDECL_TYPE_SHORT; }
+ | T_INT { $$ = CDECL_TYPE_INT; }
+ | T_LONG { $$ = CDECL_TYPE_LONG; }
+ | T_FLOAT { $$ = CDECL_TYPE_FLOAT; }
+ | T_DOUBLE { $$ = CDECL_TYPE_DOUBLE; }
+ | T_SIGNED { $$ = CDECL_TYPE_SIGNED; }
+ | T_UNSIGNED { $$ = CDECL_TYPE_UNSIGNED; }
+ | T_BOOL { $$ = CDECL_TYPE_BOOL; }
+ | T_COMPLEX { $$ = CDECL_TYPE_COMPLEX; }
+ | T_IMAGINARY { $$ = CDECL_TYPE_IMAGINARY; }
qualifier_simple: T_CONST { $$ = CDECL_QUAL_CONST; }
| T_RESTRICT { $$ = CDECL_QUAL_RESTRICT; }
"]" return T_RBRACKET;
"," return T_COMMA;
-"typedef" return T_TYPEDEF;
-"extern" return T_EXTERN;
-"static" return T_STATIC;
-"auto" return T_AUTO;
-"register" return T_REGISTER;
-
-"restrict" return T_RESTRICT;
-"volatile" return T_VOLATILE;
-"const" return T_CONST;
-
-"inline" return T_INLINE;
-
-"void" return T_VOID;
-"char" return T_CHAR;
-"short" return T_SHORT;
-"int" return T_INT;
-"long" return T_LONG;
-"float" return T_FLOAT;
-"double" return T_DOUBLE;
-"signed" return T_SIGNED;
-"unsigned" return T_UNSIGNED;
-"_Bool" return T_BOOL;
-"_Complex" return T_COMPLEX;
-
-"struct" return T_STRUCT;
-"union" return T_UNION;
-"enum" return T_ENUM;
+"typedef" return T_TYPEDEF;
+"extern" return T_EXTERN;
+"static" return T_STATIC;
+"auto" return T_AUTO;
+"register" return T_REGISTER;
+
+"restrict" return T_RESTRICT;
+"volatile" return T_VOLATILE;
+"const" return T_CONST;
+
+"inline" return T_INLINE;
+
+"void" return T_VOID;
+"char" return T_CHAR;
+"short" return T_SHORT;
+"int" return T_INT;
+"long" return T_LONG;
+"float" return T_FLOAT;
+"double" return T_DOUBLE;
+"signed" return T_SIGNED;
+"unsigned" return T_UNSIGNED;
+"_Bool" return T_BOOL;
+"_Complex" return T_COMPLEX;
+"_Imaginary" return T_IMAGINARY;
+
+"struct" return T_STRUCT;
+"union" return T_UNION;
+"enum" return T_ENUM;
{INTEGER} {
char *end;