X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=types.c;h=e49a68900964422b73a63b364b7b9cecd35fc2a1;hb=cf3044e601ad6142dbee577e9e77930bb727f833;hp=b59e4b4ff8cf76b55f59914e97d5276afc7f5137;hpb=fd16b92f058181088a385c3224c8814831c006d3;p=cparser diff --git a/types.c b/types.c index b59e4b4..e49a689 100644 --- a/types.c +++ b/types.c @@ -19,6 +19,7 @@ */ #include "type_t.h" #include "types.h" +#include "lang_features.h" /** The error type. */ type_t *type_error_type; @@ -61,10 +62,31 @@ type_t *type_ptrdiff_t_ptr; type_t *type_ssize_t_ptr; type_t *type_wchar_t_ptr; +/* microsoft types */ +atomic_type_kind_t int8_type_kind = ATOMIC_TYPE_INVALID; +atomic_type_kind_t int16_type_kind = ATOMIC_TYPE_INVALID; +atomic_type_kind_t int32_type_kind = ATOMIC_TYPE_INVALID; +atomic_type_kind_t int64_type_kind = ATOMIC_TYPE_INVALID; +atomic_type_kind_t int128_type_kind = ATOMIC_TYPE_INVALID; +atomic_type_kind_t unsigned_int8_type_kind = ATOMIC_TYPE_INVALID; +atomic_type_kind_t unsigned_int16_type_kind = ATOMIC_TYPE_INVALID; +atomic_type_kind_t unsigned_int32_type_kind = ATOMIC_TYPE_INVALID; +atomic_type_kind_t unsigned_int64_type_kind = ATOMIC_TYPE_INVALID; +atomic_type_kind_t unsigned_int128_type_kind = ATOMIC_TYPE_INVALID; + +type_t *type_int8; +type_t *type_int16; +type_t *type_int32; +type_t *type_int64; +type_t *type_unsigned_int8; +type_t *type_unsigned_int16; +type_t *type_unsigned_int32; +type_t *type_unsigned_int64; + void init_basic_types(void) { - static const type_base_t error = { TYPE_ERROR, TYPE_QUALIFIER_NONE, { NULL, 0 }, NULL }; + static const type_base_t error = { TYPE_ERROR, TYPE_QUALIFIER_NONE, 0, { NULL, 0 }, NULL }; type_error_type = (type_t*)&error; type_signed_char = make_atomic_type(ATOMIC_TYPE_SCHAR, TYPE_QUALIFIER_NONE); @@ -81,6 +103,27 @@ void init_basic_types(void) type_char = make_atomic_type(ATOMIC_TYPE_CHAR, TYPE_QUALIFIER_NONE); type_void = make_atomic_type(ATOMIC_TYPE_VOID, TYPE_QUALIFIER_NONE); + /* microsoft types */ + if(c_mode & _MS) { + int8_type_kind = find_signed_int_atomic_type_kind_for_size(1); + type_int8 = make_atomic_type(int8_type_kind, TYPE_QUALIFIER_NONE); + int16_type_kind = find_signed_int_atomic_type_kind_for_size(2); + type_int16 = make_atomic_type(int16_type_kind, TYPE_QUALIFIER_NONE); + int32_type_kind = find_signed_int_atomic_type_kind_for_size(4); + type_int32 = make_atomic_type(int32_type_kind, TYPE_QUALIFIER_NONE); + int64_type_kind = find_signed_int_atomic_type_kind_for_size(8); + type_int64 = make_atomic_type(int64_type_kind, TYPE_QUALIFIER_NONE); + unsigned_int8_type_kind = find_unsigned_int_atomic_type_kind_for_size(1); + type_unsigned_int8 = make_atomic_type(unsigned_int8_type_kind, TYPE_QUALIFIER_NONE); + unsigned_int16_type_kind = find_unsigned_int_atomic_type_kind_for_size(2); + type_unsigned_int16 = make_atomic_type(unsigned_int16_type_kind, TYPE_QUALIFIER_NONE); + unsigned_int32_type_kind = find_unsigned_int_atomic_type_kind_for_size(4); + type_unsigned_int32 = make_atomic_type(unsigned_int32_type_kind, TYPE_QUALIFIER_NONE); + unsigned_int64_type_kind = find_unsigned_int_atomic_type_kind_for_size(8); + type_unsigned_int64 = make_atomic_type(unsigned_int64_type_kind, TYPE_QUALIFIER_NONE); + } + + /* pointer types */ type_void_ptr = make_pointer_type(type_void, TYPE_QUALIFIER_NONE); type_char_ptr = make_pointer_type(type_char, TYPE_QUALIFIER_NONE); type_signed_char_ptr = make_pointer_type(type_signed_char, TYPE_QUALIFIER_NONE);