--- /dev/null
+#include "type_t.h"
+#include "types.h"
+
+
+type_t *type_char;
+type_t *type_double;
+type_t *type_float;
+type_t *type_int;
+type_t *type_long_double;
+type_t *type_long_long;
+type_t *type_long;
+type_t *type_short;
+type_t *type_signed_char;
+type_t *type_string;
+type_t *type_unsigned_int;
+type_t *type_unsigned_long_long;
+type_t *type_unsigned_long;
+type_t *type_void;
+
+type_t *type_int_ptr;
+type_t *type_long_long_ptr;
+type_t *type_long_ptr;
+type_t *type_short_ptr;
+type_t *type_signed_char_ptr;
+type_t *type_void_ptr;
+
+type_t *type_intmax_t;
+type_t *type_ptrdiff_t;
+type_t *type_size_t;
+type_t *type_ssize_t;
+type_t *type_uintmax_t;
+type_t *type_uptrdiff_t;
+type_t *type_wchar_t;
+type_t *type_wint_t;
+
+type_t *type_intmax_t_ptr;
+type_t *type_ptrdiff_t_ptr;
+type_t *type_ssize_t_ptr;
+type_t *type_wchar_t_ptr;
+
+
+void init_basic_types(void)
+{
+ type_signed_char = make_atomic_type(ATOMIC_TYPE_SCHAR, TYPE_QUALIFIER_NONE);
+ type_short = make_atomic_type(ATOMIC_TYPE_SHORT, TYPE_QUALIFIER_NONE);
+ type_int = make_atomic_type(ATOMIC_TYPE_INT, TYPE_QUALIFIER_NONE);
+ type_unsigned_int = make_atomic_type(ATOMIC_TYPE_UINT, TYPE_QUALIFIER_NONE);
+ type_long = make_atomic_type(ATOMIC_TYPE_LONG, TYPE_QUALIFIER_NONE);
+ type_unsigned_long = make_atomic_type(ATOMIC_TYPE_ULONG, TYPE_QUALIFIER_NONE);
+ type_long_long = make_atomic_type(ATOMIC_TYPE_LONGLONG, TYPE_QUALIFIER_NONE);
+ type_unsigned_long_long = make_atomic_type(ATOMIC_TYPE_ULONGLONG, TYPE_QUALIFIER_NONE);
+ type_long_double = make_atomic_type(ATOMIC_TYPE_LONG_DOUBLE, TYPE_QUALIFIER_NONE);
+ type_double = make_atomic_type(ATOMIC_TYPE_DOUBLE, TYPE_QUALIFIER_NONE);
+ type_float = make_atomic_type(ATOMIC_TYPE_FLOAT, TYPE_QUALIFIER_NONE);
+ type_char = make_atomic_type(ATOMIC_TYPE_CHAR, TYPE_QUALIFIER_NONE);
+ type_void = make_atomic_type(ATOMIC_TYPE_VOID, TYPE_QUALIFIER_NONE);
+
+ type_void_ptr = make_pointer_type(type_void, TYPE_QUALIFIER_NONE);
+ type_string = make_pointer_type(type_char, TYPE_QUALIFIER_NONE);
+ type_signed_char_ptr = make_pointer_type(type_signed_char, TYPE_QUALIFIER_NONE);
+ type_short_ptr = make_pointer_type(type_short, TYPE_QUALIFIER_NONE);
+ type_int_ptr = make_pointer_type(type_int, TYPE_QUALIFIER_NONE);
+ type_long_ptr = make_pointer_type(type_long, TYPE_QUALIFIER_NONE);
+ type_long_long_ptr = make_pointer_type(type_long_long, TYPE_QUALIFIER_NONE);
+}
--- /dev/null
+#ifndef TYPES_H
+#define TYPES_H
+
+#include "type.h"
+
+extern type_t *type_char;
+extern type_t *type_double;
+extern type_t *type_float;
+extern type_t *type_int;
+extern type_t *type_long_double;
+extern type_t *type_long_long;
+extern type_t *type_long;
+extern type_t *type_short;
+extern type_t *type_signed_char;
+extern type_t *type_string;
+extern type_t *type_unsigned_int;
+extern type_t *type_unsigned_long_long;
+extern type_t *type_unsigned_long;
+extern type_t *type_void;
+
+extern type_t *type_int_ptr;
+extern type_t *type_long_long_ptr;
+extern type_t *type_long_ptr;
+extern type_t *type_short_ptr;
+extern type_t *type_signed_char_ptr;
+extern type_t *type_void_ptr;
+
+extern type_t *type_intmax_t;
+extern type_t *type_ptrdiff_t;
+extern type_t *type_size_t;
+extern type_t *type_ssize_t;
+extern type_t *type_uintmax_t;
+extern type_t *type_uptrdiff_t;
+extern type_t *type_wchar_t;
+extern type_t *type_wint_t;
+
+extern type_t *type_intmax_t_ptr;
+extern type_t *type_ptrdiff_t_ptr;
+extern type_t *type_ssize_t_ptr;
+extern type_t *type_wchar_t_ptr;
+
+void init_basic_types(void);
+
+#endif