void print_indent(void)
{
for (int i = 0; i < indent; ++i)
- print_string("\t");
+ print_char('\t');
}
static void print_stringrep(const string_t *string)
for (const char *c = string->begin; c != end; ++c) {
const char tc = *c;
if (tc == border) {
- print_string("\\");
+ print_char('\\');
}
switch (tc) {
case '\\': print_string("\\\\"); break;
static void print_compound_literal(
const compound_literal_expression_t *expression)
{
- print_string("(");
+ print_char('(');
print_type(expression->type);
- print_string(")");
+ print_char(')');
print_initializer(expression->initializer);
}
static void print_call_expression(const call_expression_t *call)
{
print_expression_prec(call->function, PREC_POSTFIX);
- print_string("(");
+ print_char('(');
call_argument_t *argument = call->arguments;
int first = 1;
while (argument != NULL) {
argument = argument->next;
}
- print_string(")");
+ print_char(')');
}
/**
{
unsigned prec = get_expression_precedence(unexpr->base.kind);
switch (unexpr->base.kind) {
- case EXPR_UNARY_NEGATE: print_string("-"); break;
- case EXPR_UNARY_PLUS: print_string("+"); break;
- case EXPR_UNARY_NOT: print_string("!"); break;
- case EXPR_UNARY_BITWISE_NEGATE: print_string("~"); break;
+ case EXPR_UNARY_NEGATE: print_char ('-' ); break;
+ case EXPR_UNARY_PLUS: print_char ('+' ); break;
+ case EXPR_UNARY_NOT: print_char ('!' ); break;
+ case EXPR_UNARY_BITWISE_NEGATE: print_char ('~' ); break;
case EXPR_UNARY_PREFIX_INCREMENT: print_string("++"); break;
case EXPR_UNARY_PREFIX_DECREMENT: print_string("--"); break;
- case EXPR_UNARY_DEREFERENCE: print_string("*"); break;
- case EXPR_UNARY_TAKE_ADDRESS: print_string("&"); break;
+ case EXPR_UNARY_DEREFERENCE: print_char ('*' ); break;
+ case EXPR_UNARY_TAKE_ADDRESS: print_char ('&' ); break;
case EXPR_UNARY_DELETE: print_string("delete "); break;
case EXPR_UNARY_DELETE_ARRAY: print_string("delete [] "); break;
print_string("--");
return;
case EXPR_UNARY_CAST:
- print_string("(");
+ print_char('(');
print_type(unexpr->base.type);
- print_string(")");
+ print_char(')');
break;
case EXPR_UNARY_ASSUME:
print_string("__assume(");
print_assignment_expression(unexpr->value);
- print_string(")");
+ print_char(')');
return;
case EXPR_UNARY_THROW:
{
if (!expression->flipped) {
print_expression_prec(expression->array_ref, PREC_POSTFIX);
- print_string("[");
+ print_char('[');
print_expression(expression->index);
- print_string("]");
+ print_char(']');
} else {
print_expression_prec(expression->index, PREC_POSTFIX);
- print_string("[");
+ print_char('[');
print_expression(expression->array_ref);
- print_string("]");
+ print_char(']');
}
}
/* PREC_TOP: always print the '()' here, sizeof x is right but unusual */
print_expression_prec(expression->tp_expression, PREC_TOP);
} else {
- print_string("(");
+ print_char('(');
print_type(expression->type);
- print_string(")");
+ print_char(')');
}
}
{
print_string("__builtin_constant_p(");
print_assignment_expression(expression->value);
- print_string(")");
+ print_char(')');
}
/**
print_type(expression->left);
print_string(", ");
print_type(expression->right);
- print_string(")");
+ print_char(')');
}
/**
print_assignment_expression(expression->ap);
print_string(", ");
print_string(expression->parameter->base.base.symbol->string);
- print_string(")");
+ print_char(')');
}
/**
print_assignment_expression(expression->ap);
print_string(", ");
print_type(expression->base.type);
- print_string(")");
+ print_char(')');
}
/**
print_assignment_expression(expression->dst);
print_string(", ");
print_assignment_expression(expression->src);
- print_string(")");
+ print_char(')');
}
/**
if (is_type_pointer(skip_typeref(expression->compound->base.type))) {
print_string("->");
} else {
- print_string(".");
+ print_char('.');
}
print_string(expression->compound_entry->base.symbol->string);
}
{
print_string("__builtin_classify_type(");
print_assignment_expression(expr->type_expression);
- print_string(")");
+ print_char(')');
}
/**
{
for ( ; designator != NULL; designator = designator->next) {
if (designator->symbol == NULL) {
- print_string("[");
+ print_char('[');
print_expression(designator->array_index);
- print_string("]");
+ print_char(']');
} else {
- print_string(".");
+ print_char('.');
print_string(designator->symbol->string);
}
}
{
print_string("__builtin_offsetof(");
print_type(expression->type);
- print_string(",");
+ print_char(',');
print_designator(expression->designator);
- print_string(")");
+ print_char(')');
}
/**
*/
static void print_statement_expression(const statement_expression_t *expression)
{
- print_string("(");
+ print_char('(');
print_statement(expression->statement);
- print_string(")");
+ print_char(')');
}
/**
top_prec > get_expression_precedence(expression->base.kind);
if (parenthesized)
- print_string("(");
+ print_char('(');
switch (expression->kind) {
case EXPR_ERROR:
print_string("$error$");
break;
}
if (parenthesized)
- print_string(")");
+ print_char(')');
}
static void print_indented_statement(statement_t const *const stmt)
{
print_string("goto ");
if (statement->expression != NULL) {
- print_string("*");
+ print_char('*');
print_expression(statement->expression);
} else {
print_string(statement->label->base.symbol->string);
}
}
+static void print_after_inner_statement(statement_t const *const stmt)
+{
+ if (stmt->kind == STATEMENT_COMPOUND) {
+ print_char(' ');
+ } else {
+ print_char('\n');
+ print_indent();
+ }
+}
+
/**
* Print an if statement.
*
statement_t const *const f = statement->false_statement;
if (f) {
- print_char('\n');
- print_indent();
+ print_after_inner_statement(statement->true_statement);
print_string("else");
if (f->kind == STATEMENT_IF) {
print_char(' ');
{
print_string("typedef ");
print_type_ext(entity->typedefe.type, entity->base.symbol, NULL);
- print_string(";");
+ print_char(';');
}
/**
{
print_string("do");
print_inner_statement(statement->body);
- print_char('\n');
- print_indent();
+ print_after_inner_statement(statement->body);
print_string("while (");
print_expression(statement->condition);
print_string(");");
print_string("for (");
if (statement->initialisation != NULL) {
print_expression(statement->initialisation);
- print_string(";");
+ print_char(';');
} else {
entity_t const *entity = statement->scope.entities;
for (; entity != NULL; entity = entity->base.next) {
}
}
if (statement->condition != NULL) {
- print_string(" ");
+ print_char(' ');
print_expression(statement->condition);
}
- print_string(";");
+ print_char(';');
if (statement->step != NULL) {
- print_string(" ");
+ print_char(' ');
print_expression(statement->step);
}
print_char(')');
print_quoted_string(&argument->constraints, '"', 1);
print_string(" (");
print_expression(argument->expression);
- print_string(")");
+ print_char(')');
}
}
if (statement->is_volatile) {
print_string("volatile ");
}
- print_string("(");
+ print_char('(');
print_quoted_string(&statement->asm_text, '"', 1);
if (statement->outputs == NULL &&
statement->inputs == NULL &&
{
print_string("__try");
print_inner_statement(statement->try_statement);
- print_char('\n');
- print_indent();
+ print_after_inner_statement(statement->try_statement);
if (statement->except_expression != NULL) {
print_string("__except(");
print_expression(statement->except_expression);
}
if (variable->put_property_sym != NULL)
print_format("%sput=%s", comma, variable->put_property_sym->string);
- print_string(")");
+ print_char(')');
}
}
}
for ( ; entity != NULL; entity = entity->base.next) {
print_indent();
print_entity(entity);
- print_string("\n");
+ print_char('\n');
}
}
print_string("namespace ");
if (namespace->base.symbol != NULL) {
print_string(namespace->base.symbol->string);
- print_string(" ");
+ print_char(' ');
}
print_string("{\n");
&entity->function.parameters);
if (entity->function.statement != NULL) {
- print_string("\n");
+ print_char('\n');
print_indented_statement(entity->function.statement);
print_char('\n');
return;
print_type_ext(declaration->type, declaration->base.symbol, NULL);
break;
}
- print_string(";");
+ print_char(';');
}
/**
print_compound:
print_string(entity->base.symbol->string);
if (entity->compound.complete) {
- print_string(" ");
+ print_char(' ');
print_compound_definition(&entity->compound);
}
- print_string(";");
+ print_char(';');
return;
case ENTITY_ENUM:
print_string("enum ");
print_string(entity->base.symbol->string);
- print_string(" ");
+ print_char(' ');
print_enum_definition(&entity->enume);
- print_string(";");
+ print_char(';');
return;
case ENTITY_NAMESPACE:
print_namespace(&entity->namespacee);
case ENTITY_LOCAL_LABEL:
print_string("__label__ ");
print_string(entity->base.symbol->string);
- print_string(";");
+ print_char(';');
return;
case ENTITY_LABEL:
case ENTITY_ENUM_VALUE:
print_indent();
print_entity(entity);
- print_string("\n");
+ print_char('\n');
}
}