From: Nick Bowler Date: Tue, 5 Jul 2011 22:23:01 +0000 (-0400) Subject: Fix pointer declarators. X-Git-Tag: v1~155 X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/commitdiff_plain/4f0546bf6ead11d3256bbffb67ca7a93cfecfff3 Fix pointer declarators. Support for parsing pointer types like int ** was broken a while back. Fix it up. --- diff --git a/src/parse.y b/src/parse.y index f7ef80c..06cbc07 100644 --- a/src/parse.y +++ b/src/parse.y @@ -161,9 +161,9 @@ void cdecl_free(struct cdecl *decl) %type vla_ident %type declspec_simple typespec_simple qualifier_simple %type declspec_notype declspec_noid typespec_noid typespec -%type qualifier qualifiers pointer +%type qualifier qualifiers %type declspecs declspecs_noid -%type direct_declarator declarator declarators array +%type direct_declarator declarator declarators pointer array %type declaration %% @@ -256,8 +256,6 @@ typespec: typespec_noid | T_STRUCT T_IDENT { declspec_noid: declspec_notype | typespec_noid -pointer: T_ASTERISK qualifiers { $$ = $2; } - vla_ident: T_IDENT | T_ASTERISK { ALLOC($$, sizeof ""); strcpy($$, ""); @@ -279,13 +277,20 @@ array: T_LBRACKET T_UINT T_RBRACKET { .type = CDECL_DECL_ARRAY); } -declarator: direct_declarator | pointer direct_declarator { +pointer: T_ASTERISK qualifiers direct_declarator { + ALLOC_STRUCT($$, struct cdecl_declarator, + .type = CDECL_DECL_POINTER, + .u.pointer.qualifiers = $2, + .u.pointer.declarator = $3); +} | T_ASTERISK qualifiers pointer { ALLOC_STRUCT($$, struct cdecl_declarator, .type = CDECL_DECL_POINTER, - .u.pointer.qualifiers = $1, - .u.pointer.declarator = $2); + .u.pointer.qualifiers = $2, + .u.pointer.declarator = $3); } +declarator: direct_declarator | pointer; + direct_declarator: { ALLOC_STRUCT($$, struct cdecl_declarator, .type = CDECL_DECL_IDENT,