]> git.draconx.ca Git - cdecl99.git/blobdiff - src/explain.c
Add a child pointer to cdecl_declarator.
[cdecl99.git] / src / explain.c
index e0916a8a4e9a5e5c181c300cc7aec7e734476326..60e880b0586b2e4c7b47ca5d9f48d6b3ee07b5eb 100644 (file)
@@ -159,20 +159,6 @@ static size_t explain_pre_specs(char *buf, size_t n, struct cdecl_declspec *s)
        return ret;
 }
 
-static struct cdecl_declarator *next_declarator(struct cdecl_declarator *d)
-{
-       switch (d->type) {
-       case CDECL_DECL_IDENT:
-               return NULL;
-       case CDECL_DECL_POINTER:
-               return d->u.pointer.declarator;
-       case CDECL_DECL_ARRAY:
-               return d->u.array.declarator;
-       default:
-               assert(0);
-       }
-}
-
 /* Renders the name of the thing being declared. */
 static size_t
 explain_prologue(char *buf, size_t n, struct cdecl_declarator *d)
@@ -183,7 +169,7 @@ explain_prologue(char *buf, size_t n, struct cdecl_declarator *d)
                                return snprintf(buf, n, "type");
                        return snprintf(buf, n, "declare %s as", d->u.ident);
                }
-               d = next_declarator(d);
+               d = d->child;
        }
 }
 
@@ -228,7 +214,7 @@ explain_declarators(char *buf, size_t n, struct cdecl_declarator *d)
        if (d->type == CDECL_DECL_IDENT)
                return 0;
 
-       rc = explain_declarators(buf, n, next_declarator(d));
+       rc = explain_declarators(buf, n, d->child);
        ret += advance(&buf, &n, rc);
 
        switch (d->type) {