From: Nick Bowler Date: Fri, 8 Jul 2011 01:04:19 +0000 (-0400) Subject: Add support for imaginary types. X-Git-Tag: v1~139 X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/commitdiff_plain/363f15bd4b53bd90b86610b143695762037ae706 Add support for imaginary types. Somehow these got forgotten. --- diff --git a/src/cdecl.h b/src/cdecl.h index 3217f9e..9b3e5da 100644 --- a/src/cdecl.h +++ b/src/cdecl.h @@ -41,6 +41,7 @@ enum { CDECL_TYPE_UNSIGNED, CDECL_TYPE_BOOL, CDECL_TYPE_COMPLEX, + CDECL_TYPE_IMAGINARY, CDECL_TYPE_STRUCT, CDECL_TYPE_UNION, CDECL_TYPE_ENUM, diff --git a/src/parse.y b/src/parse.y index 2b02a5e..706bdd8 100644 --- a/src/parse.y +++ b/src/parse.y @@ -154,33 +154,34 @@ void cdecl_free(struct cdecl *decl) %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 vla_ident %type varargs @@ -240,17 +241,18 @@ declspec_simple: T_AUTO { $$ = CDECL_STOR_AUTO; } | 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; } diff --git a/src/scan.l b/src/scan.l index 06647de..75657fb 100644 --- a/src/scan.l +++ b/src/scan.l @@ -43,33 +43,34 @@ INTEGER 0x[[:xdigit:]]+|0[0-7]+|[[:digit:]]+ "]" 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; diff --git a/src/types.lst b/src/types.lst index f2f7bf2..22f2a6c 100644 --- a/src/types.lst +++ b/src/types.lst @@ -33,6 +33,9 @@ long double float _Complex double _Complex long double _Complex +float _Imaginary +double _Imaginary +long double _Imaginary struct union enum