Adapted cparser to CopyB lowering changes.
[cparser] / types.c
diff --git a/types.c b/types.c
index 8473799..ab6e423 100644 (file)
--- a/types.c
+++ b/types.c
@@ -54,6 +54,7 @@ type_t *type_unsigned_long_ptr;
 type_t *type_short_ptr;
 type_t *type_signed_char_ptr;
 type_t *type_void_ptr;
+type_t *type_const_void;
 type_t *type_const_void_ptr;
 type_t *type_void_ptr_restrict;
 type_t *type_const_void_ptr_restrict;
@@ -122,6 +123,7 @@ void init_basic_types(void)
        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_const_void         = make_atomic_type(ATOMIC_TYPE_VOID,        TYPE_QUALIFIER_CONST);
 
        /* microsoft types */
        if (c_mode & _MS) {
@@ -148,10 +150,10 @@ void init_basic_types(void)
 
        /* pointer types */
        type_void_ptr           = make_pointer_type(type_void,              TYPE_QUALIFIER_NONE);
-       type_const_void_ptr     = make_pointer_type(type_void,              TYPE_QUALIFIER_CONST);
+       type_const_void_ptr     = make_pointer_type(type_const_void,        TYPE_QUALIFIER_NONE);
        type_void_ptr_restrict  = make_pointer_type(type_void,              TYPE_QUALIFIER_RESTRICT);
        type_const_void_ptr_restrict
-                               = make_pointer_type(type_void,              TYPE_QUALIFIER_CONST | TYPE_QUALIFIER_RESTRICT);
+                               = make_pointer_type(type_const_void,        TYPE_QUALIFIER_RESTRICT);
        type_char_ptr           = make_pointer_type(type_char,              TYPE_QUALIFIER_NONE);
        type_char_ptr_restrict  = make_pointer_type(type_char,              TYPE_QUALIFIER_RESTRICT);
        type_signed_char_ptr    = make_pointer_type(type_signed_char,       TYPE_QUALIFIER_NONE);
@@ -176,14 +178,19 @@ void init_basic_types(void)
        type_ptrdiff_t   = type_long;
        type_uintmax_t   = type_unsigned_long_long;
        type_uptrdiff_t  = type_unsigned_long;
-       type_wchar_t     = make_atomic_type(wchar_atomic_kind, TYPE_QUALIFIER_NONE);
        type_wint_t      = type_int;
-       type_const_wchar_t
-               = make_atomic_type(wchar_atomic_kind, TYPE_QUALIFIER_CONST);
 
        type_intmax_t_ptr  = make_pointer_type(type_intmax_t,  TYPE_QUALIFIER_NONE);
        type_ptrdiff_t_ptr = make_pointer_type(type_ptrdiff_t, TYPE_QUALIFIER_NONE);
        type_ssize_t_ptr   = make_pointer_type(type_ssize_t,   TYPE_QUALIFIER_NONE);
+}
+
+void init_wchar_types(type_t *base)
+{
+       assert(base->kind == TYPE_ATOMIC);
+       type_wchar_t = base;
+       type_const_wchar_t
+               = make_atomic_type(base->atomic.akind, TYPE_QUALIFIER_CONST);
        type_wchar_t_ptr   = make_pointer_type(type_wchar_t,   TYPE_QUALIFIER_NONE);
        type_const_wchar_t_ptr
                = make_pointer_type(type_const_wchar_t, TYPE_QUALIFIER_NONE);