X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/ee7baf59f18b5bc5be9abed0b2be90f407ee497d..4251b4bd0087752ceddbf95a6a8c928ab2207844:/src/cdecl.h diff --git a/src/cdecl.h b/src/cdecl.h index 1493d4d..20a94f2 100644 --- a/src/cdecl.h +++ b/src/cdecl.h @@ -1,5 +1,5 @@ /* - * Copyright © 2011 Nick Bowler + * Copyright © 2011, 2021, 2023 Nick Bowler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -102,15 +102,35 @@ void cdecl_free(struct cdecl *decl); size_t cdecl_explain(char *buf, size_t n, struct cdecl *decl); size_t cdecl_declare(char *buf, size_t n, struct cdecl *decl); -static inline int cdecl_spec_kind(struct cdecl_declspec *spec) +static inline int cdecl_spec_kind(const struct cdecl_declspec *spec) { return spec->type & ~(CDECL_SPEC_TYPE-1u); } +static inline _Bool cdecl_is_abstract(const struct cdecl_declarator *d) +{ + while (d->child) + d = d->child; + + return d->type != CDECL_DECL_IDENT; +} + /* Error handling. */ enum { - CDECL_ENOMEM, + CDECL_ENOMEM = 1, CDECL_ENOPARSE, + + /* Obsolete error codes (no longer returned by the library) */ + CDECL_EBADARRAY, + CDECL_EBADDECL, + CDECL_EBADPARAMS, + CDECL_EBADPOINTER, + CDECL_EBADQUAL, + CDECL_EBADRETURN, + CDECL_EBADSTOR, + CDECL_EBADTYPE, + CDECL_ENOTFUNC, + CDECL_EVOIDPARAM }; struct cdecl_error {