From 4f0546bf6ead11d3256bbffb67ca7a93cfecfff3 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Tue, 5 Jul 2011 18:23:01 -0400 Subject: [PATCH] Fix pointer declarators. Support for parsing pointer types like int ** was broken a while back. Fix it up. --- src/parse.y | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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, -- 2.43.2