-%token_class decl_type_token FLOAT DOUBLE INT8 UINT8 INT16 UINT16 INT32 UINT32 INT64 UINT64 NAME.
-%type decl_type {decl_type*}
-%destructor decl_type {free_decl_type($$);}
-decl_type(type_) ::= decl_type_token(T). {
+/* un/signed, urgh */
+decl_scalar_type(type_) ::= CHAR(C). {
+ type_ = C;
+}
+decl_scalar_type(type_) ::= SHORT(S) INT(I). {
+ type_ = PSI_TokenCat(2, S, I);
+ free(S);
+ free(I);
+}
+decl_scalar_type(type_) ::= SHORT(S). {
+ type_ = S;
+}
+decl_scalar_type(type_) ::= LONG(L) INT(I). {
+ type_ = PSI_TokenCat(2, L, I);
+ free(L);
+ free(I);
+}
+decl_scalar_type(type_) ::= LONG(L1) LONG(L2) INT(I). {
+ type_ = PSI_TokenCat(3, L1, L2, I);
+ free(L1);
+ free(L2);
+ free(I);
+}
+decl_scalar_type(type_) ::= LONG(L1) LONG(L2). {
+ type_ = PSI_TokenCat(2, L1, L2);
+ free(L1);
+ free(L2);
+}
+decl_type(type_) ::= UNSIGNED(U) decl_scalar_type(N). {
+ PSI_Token *T = PSI_TokenCat(2, U, N);