]> git.draconx.ca Git - cdecl99.git/blobdiff - src/parse.y
Add a child pointer to cdecl_declarator.
[cdecl99.git] / src / parse.y
index 06cbc07d96418508f6a951271819ac38095258f2..b21a1d4b951021d4138e3036d04c0d968b89f7cd 100644 (file)
@@ -84,15 +84,15 @@ static void free_declarator(struct cdecl_declarator *x)
                        break;
                case CDECL_DECL_POINTER:
                        free_declspec(x->u.pointer.qualifiers);
-                       free_declarator(x->u.pointer.declarator);
                        break;
                case CDECL_DECL_ARRAY:
                        free(x->u.array.vla);
-                       free_declarator(x->u.array.declarator);
                        break;
                default:
                        assert(0);
                }
+
+               free_declarator(x->child);
                free(x);
                x = p;
        }
@@ -281,12 +281,12 @@ pointer: T_ASTERISK qualifiers direct_declarator {
        ALLOC_STRUCT($$, struct cdecl_declarator,
                .type = CDECL_DECL_POINTER,
                .u.pointer.qualifiers = $2,
-               .u.pointer.declarator = $3);
+               .child = $3);
 } | T_ASTERISK qualifiers pointer {
        ALLOC_STRUCT($$, struct cdecl_declarator,
                .type = CDECL_DECL_POINTER,
                .u.pointer.qualifiers = $2,
-               .u.pointer.declarator = $3);
+               .child = $3);
 }
 
 declarator: direct_declarator | pointer;
@@ -301,7 +301,7 @@ direct_declarator: {
                .u.ident = $1);
 } | direct_declarator array {
        $$ = $2;
-       $$->u.array.declarator = $1;
+       $$->child = $1;
 } | T_LPAREN declarator T_RPAREN {
        $$ = $2;
 };