diff options
author | Christoph Mallon <christoph.mallon@gmx.de> | 2012-11-08 09:44:40 +0100 |
---|---|---|
committer | Christoph Mallon <christoph.mallon@gmx.de> | 2012-11-08 10:13:30 +0100 |
commit | 15c2d72b5a2b4657f0c0b6848a1b532a6b92483c (patch) | |
tree | 7acf5875887e033f76147fd8286920e154198add | |
parent | 7f17b1a31bb62120fe91d1f192eae2fe6ae01f24 (diff) |
Clean up print_asm_statement().
-rw-r--r-- | ast.c | 62 |
1 files changed, 25 insertions, 37 deletions
@@ -1005,18 +1005,17 @@ static void print_for_statement(const for_statement_t *statement) * * @param arguments the arguments */ -static void print_asm_arguments(asm_argument_t *arguments) +static void print_asm_arguments(asm_argument_t const *const arguments) { - separator_t sep = { "", ", " }; - asm_argument_t *argument = arguments; - for (; argument != NULL; argument = argument->next) { + print_string(" : "); + separator_t sep = { "", ", " }; + for (asm_argument_t const *i = arguments; i; i = i->next) { print_string(sep_next(&sep)); - if (argument->symbol) { - print_format("[%s] ", argument->symbol->string); - } - print_quoted_string(&argument->constraints, '"'); + if (i->symbol) + print_format("[%s] ", i->symbol->string); + print_quoted_string(&i->constraints, '"'); print_string(" ("); - print_expression(argument->expression); + print_expression(i->expression); print_char(')'); } } @@ -1026,48 +1025,37 @@ static void print_asm_arguments(asm_argument_t *arguments) * * @param clobbers the clobbers */ -static void print_asm_clobbers(asm_clobber_t *clobbers) +static void print_asm_clobbers(asm_clobber_t const *const clobbers) { - separator_t sep = { "", ", " }; - asm_clobber_t *clobber = clobbers; - for (; clobber != NULL; clobber = clobber->next) { + print_string(" : "); + separator_t sep = { "", ", " }; + for (asm_clobber_t const *i = clobbers; i; i = i->next) { print_string(sep_next(&sep)); - print_quoted_string(&clobber->clobber, '"'); + print_quoted_string(&i->clobber, '"'); } } /** * Print an assembler statement. * - * @param statement the statement + * @param stmt the statement */ -static void print_asm_statement(const asm_statement_t *statement) +static void print_asm_statement(asm_statement_t const *const stmt) { print_string("asm "); - if (statement->is_volatile) { - print_string("volatile "); - } + if (stmt->is_volatile) print_string("volatile "); print_char('('); - print_quoted_string(&statement->asm_text, '"'); - if (statement->outputs == NULL && - statement->inputs == NULL && - statement->clobbers == NULL) - goto end_of_print_asm_statement; - - print_string(" : "); - print_asm_arguments(statement->outputs); - if (statement->inputs == NULL && statement->clobbers == NULL) - goto end_of_print_asm_statement; + print_quoted_string(&stmt->asm_text, '"'); - print_string(" : "); - print_asm_arguments(statement->inputs); - if (statement->clobbers == NULL) - goto end_of_print_asm_statement; - - print_string(" : "); - print_asm_clobbers(statement->clobbers); + unsigned const n = + stmt->clobbers ? 3 : + stmt->inputs ? 2 : + stmt->outputs ? 1 : + 0; + if (n >= 1) print_asm_arguments(stmt->outputs); + if (n >= 2) print_asm_arguments(stmt->inputs); + if (n >= 3) print_asm_clobbers( stmt->clobbers); -end_of_print_asm_statement: print_string(");"); } |