summaryrefslogtreecommitdiff
path: root/type.h
diff options
context:
space:
mode:
Diffstat (limited to 'type.h')
-rw-r--r--type.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/type.h b/type.h
new file mode 100644
index 0000000..1217b71
--- /dev/null
+++ b/type.h
@@ -0,0 +1,43 @@
+#ifndef TYPE_H
+#define TYPE_H
+
+#include "ccc.h"
+
+struct data_type {
+ const char* name;
+ integral_t sz;
+ bool is_floating;
+};
+
+struct type {
+ enum {
+ TP_DATA,
+ TP_PTR,
+ } type;
+ union {
+ struct {
+ const struct data_type* data_type;
+ bool is_signed;
+ } data;
+ struct {
+ const struct data_type* data_type;
+ integral_t ptr_level;
+ } pointer;
+ };
+};
+
+extern const struct data_type void_type;
+extern const struct data_type char_type;
+extern const struct data_type short_type;
+extern const struct data_type int_type;
+extern const struct data_type long_type;
+extern const struct data_type long_long_type;
+extern const struct data_type float_type;
+extern const struct data_type double_type;
+
+extern const struct data_type* integral_type;
+extern const struct data_type* floating_type;
+extern const struct data_type* character_type;
+extern const struct data_type* primitive_types[];
+
+#endif