+static void print_designator(const designator_t *designator)
+{
+ fputs(designator->symbol->string, out);
+ for (designator = designator->next; designator != NULL; designator = designator->next) {
+ if (designator->array_access) {
+ fputc('[', out);
+ print_expression(designator->array_access);
+ fputc(']', out);
+ } else {
+ fputc('.', out);
+ fputs(designator->symbol->string, out);
+ }
+ }
+}
+
+static void print_offsetof_expression(const offsetof_expression_t *expression)
+{
+ fputs("__builtin_offsetof", out);
+ fputc('(', out);
+ print_type(expression->type);
+ fputc(',', out);
+ print_designator(expression->designator);
+ fputc(')', out);
+}
+
+static void print_statement_expression(const statement_expression_t *expression)
+{
+ fputc('(', out);
+ print_statement(expression->statement);
+ fputc(')', out);
+}
+