+/*
+ * Copyright © 2011 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#ifndef CDECL_H_
#define CDECL_H_
/* Declarator types. */
enum {
+ CDECL_DECL_NULL,
CDECL_DECL_IDENT,
CDECL_DECL_POINTER,
CDECL_DECL_ARRAY,
+ CDECL_DECL_FUNCTION,
};
struct cdecl {
+ struct cdecl *next;
+
struct cdecl_declspec {
struct cdecl_declspec *next;
unsigned type;
} *specifiers;
struct cdecl_declarator {
- struct cdecl_declarator *next, *child;
+ struct cdecl_declarator *child;
unsigned type;
union {
char *ident;
char *vla;
uintmax_t length;
} array;
+ struct cdecl_function {
+ struct cdecl *parameters;
+ _Bool variadic;
+ } function;
} u;
} *declarators;
};