X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=type.c;h=08c029a315de3f8b2dac0df13a13a743b55caeba;hb=e78a2d387be3e06a805c0501b8c5b3ef02bdadf5;hp=9be93a76c851e08d83ccc0987806a6b66679d69d;hpb=07431fba71121c10a9b99e32c988cebc0dae5587;p=cparser diff --git a/type.c b/type.c index 9be93a7..08c029a 100644 --- a/type.c +++ b/type.c @@ -52,6 +52,12 @@ static atomic_type_properties_t atomic_type_properties[ATOMIC_TYPE_LAST+1] = { .alignment = 0, .flags = ATOMIC_TYPE_FLAG_NONE }, + [ATOMIC_TYPE_WCHAR_T] = { + .size = (unsigned)-1, + .alignment = (unsigned)-1, + /* signed flag will be set when known */ + .flags = ATOMIC_TYPE_FLAG_INTEGER | ATOMIC_TYPE_FLAG_ARITHMETIC, + }, [ATOMIC_TYPE_CHAR] = { .size = 1, .alignment = 1, @@ -177,6 +183,8 @@ void init_types(void) /* TODO: make this configurable for platforms which do not use byte sized * bools. */ props[ATOMIC_TYPE_BOOL] = props[ATOMIC_TYPE_UCHAR]; + + props[ATOMIC_TYPE_WCHAR_T] = props[wchar_atomic_kind]; } void exit_types(void) @@ -216,6 +224,7 @@ const char *get_atomic_kind_name(atomic_type_kind_t kind) switch(kind) { case ATOMIC_TYPE_INVALID: break; case ATOMIC_TYPE_VOID: return "void"; + case ATOMIC_TYPE_WCHAR_T: return "wchar_t"; case ATOMIC_TYPE_BOOL: return c_mode & _CXX ? "bool" : "_Bool"; case ATOMIC_TYPE_CHAR: return "char"; case ATOMIC_TYPE_SCHAR: return "signed char"; @@ -356,15 +365,19 @@ static void print_function_type_post(const function_type_t *type, } } else { entity_t *parameter = parameters->entities; - for( ; parameter != NULL; parameter = parameter->base.next) { + for (; parameter != NULL; parameter = parameter->base.next) { if (first) { first = false; } else { fputs(", ", out); } assert(is_declaration(parameter)); - print_type_ext(parameter->declaration.type, parameter->base.symbol, - NULL); + const type_t *const type = parameter->declaration.type; + if (type == NULL) { + fputs(parameter->base.symbol->string, out); + } else { + print_type_ext(type, parameter->base.symbol, NULL); + } } } if (type->variadic) { @@ -398,9 +411,10 @@ static void print_pointer_type_pre(const pointer_type_t *type) fputs(") ", out); } fputc('*', out); - print_type_qualifiers(type->base.qualifiers); - if (type->base.qualifiers != 0) + type_qualifiers_t const qual = type->base.qualifiers; + if (qual != 0) fputc(' ', out); + print_type_qualifiers(qual); } /** @@ -607,7 +621,6 @@ static void print_typeof_type_pre(const typeof_type_t *const type) { fputs("typeof(", out); if (type->expression != NULL) { - assert(type->typeof_type == NULL); print_expression(type->expression); } else { print_type(type->typeof_type);