[EXPR_BUILTIN_SYMBOL] = PREC_PRIMARY,
[EXPR_BUILTIN_CONSTANT_P] = PREC_PRIMARY,
[EXPR_BUILTIN_TYPES_COMPATIBLE_P] = PREC_PRIMARY,
- [EXPR_BUILTIN_PREFETCH] = PREC_PRIMARY,
[EXPR_OFFSETOF] = PREC_PRIMARY,
[EXPR_VA_START] = PREC_PRIMARY,
[EXPR_VA_ARG] = PREC_PRIMARY,
fputs("__alignof__", out);
}
if (expression->tp_expression != NULL) {
- /* always print the '()' here, sizeof x is right but unusual */
- fputc('(', out);
- print_expression(expression->tp_expression);
- fputc(')', out);
+ /* PREC_TOP: always print the '()' here, sizeof x is right but unusual */
+ print_expression_prec(expression->tp_expression, PREC_TOP);
} else {
fputc('(', out);
print_type(expression->type);
fputc(')', out);
}
-/**
- * Prints a builtin prefetch expression.
- *
- * @param expression the builtin prefetch expression
- */
-static void print_builtin_prefetch(const builtin_prefetch_expression_t *expression)
-{
- fputs("__builtin_prefetch(", out);
- print_assignment_expression(expression->adr);
- if (expression->rw) {
- fputc(',', out);
- print_assignment_expression(expression->rw);
- }
- if (expression->locality) {
- fputc(',', out);
- print_assignment_expression(expression->locality);
- }
- fputc(')', out);
-}
-
/**
* Prints a conditional expression.
*
case EXPR_BUILTIN_TYPES_COMPATIBLE_P:
print_builtin_types_compatible(&expression->builtin_types_compatible);
break;
- case EXPR_BUILTIN_PREFETCH:
- print_builtin_prefetch(&expression->builtin_prefetch);
- break;
case EXPR_CONDITIONAL:
print_conditional(&expression->conditional);
break;
static void print_for_statement(const for_statement_t *statement)
{
fputs("for (", out);
- entity_t *entity = statement->scope.entities;
- while (entity != NULL && is_generated_entity(entity))
- entity = entity->base.next;
-
- if (entity != NULL) {
- assert(statement->initialisation == NULL);
- assert(is_declaration(entity));
- print_declaration(entity);
- if (entity->base.next != NULL) {
- panic("multiple declarations in for statement not supported yet");
- }
+ if (statement->initialisation != NULL) {
+ print_expression(statement->initialisation);
+ fputc(';', out);
} else {
- if (statement->initialisation) {
- print_expression(statement->initialisation);
+ entity_t const *entity = statement->scope.entities;
+ for (; entity != NULL; entity = entity->base.next) {
+ if (is_generated_entity(entity))
+ continue;
+ /* FIXME display of multiple declarations is wrong */
+ print_declaration(entity);
}
- fputc(';', out);
}
if (statement->condition != NULL) {
fputc(' ', out);
}
case EXPR_BUILTIN_SYMBOL:
- case EXPR_BUILTIN_PREFETCH:
case EXPR_SELECT:
case EXPR_VA_START:
case EXPR_VA_ARG: