return;
if(is_type_integer(cnst->expression.datatype)) {
- fprintf(out, "%d", cnst->v.int_value);
+ fprintf(out, "%lld", cnst->v.int_value);
} else if(is_type_floating(cnst->expression.datatype)) {
fprintf(out, "%Lf", cnst->v.float_value);
}
fputs(")", out);
break;
case UNEXPR_INVALID:
- fprintf(out, "unop%d", unexpr->type);
+ fprintf(out, "unop%d", (int) unexpr->type);
break;
}
fputs("(", out);
static void print_array_expression(const array_access_expression_t *expression)
{
- fputs("(", out);
- print_expression(expression->array_ref);
- fputs(")[", out);
- print_expression(expression->index);
- fputs("]", out);
+ if(!expression->flipped) {
+ fputs("(", out);
+ print_expression(expression->array_ref);
+ fputs(")[", out);
+ print_expression(expression->index);
+ fputs("]", out);
+ } else {
+ fputs("(", out);
+ print_expression(expression->index);
+ fputs(")[", out);
+ print_expression(expression->array_ref);
+ fputs("]", out);
+ }
}
static void print_sizeof_expression(const sizeof_expression_t *expression)
fputs(expression->symbol->string, out);
}
+static void print_classify_type_expression(
+ const classify_type_expression_t *const expr)
+{
+ fputs("__builtin_classify_type(", out);
+ print_expression(expr->type_expression);
+ fputc(')', out);
+}
+
void print_expression(const expression_t *expression)
{
switch(expression->type) {
case EXPR_SELECT:
print_select((const select_expression_t*) expression);
break;
+ case EXPR_CLASSIFY_TYPE:
+ print_classify_type_expression((const classify_type_expression_t*)expression);
+ break;
case EXPR_OFFSETOF:
case EXPR_STATEMENT:
/* TODO */
- fprintf(out, "some expression of type %d", expression->type);
+ fprintf(out, "some expression of type %d", (int) expression->type);
break;
}
}
print_expression(statement->expression);
fputs(":\n", out);
}
+ print_statement(statement->label_statement);
}
static void print_declaration_statement(
void print_initializer(const initializer_t *initializer)
{
if(initializer->type == INITIALIZER_VALUE) {
- print_expression(initializer->v.value);
+ const initializer_value_t *value = &initializer->value;
+ print_expression(value->value);
return;
}
assert(initializer->type == INITIALIZER_LIST);
fputs("{ ", out);
- initializer_t *iter = initializer->v.list;
- for( ; iter != NULL; iter = iter->next) {
- print_initializer(iter);
- if(iter->next != NULL) {
+ const initializer_list_t *list = &initializer->list;
+
+ for(size_t i = 0 ; i < list->len; ++i) {
+ if(i > 0) {
fputs(", ", out);
}
+ print_initializer(list->initializers[i]);
}
fputs("}", out);
}