From 4953ba040833d12e885710b82e3aea699234bbb3 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Sat, 25 Oct 2008 22:37:06 +0000 Subject: [PATCH] - fixed r23189: the AST-printer doubles the precesion to have one free bit for right-to-left handling [r23194] --- ast.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/ast.c b/ast.c index 29a2bb0..6cfe1ec 100644 --- a/ast.c +++ b/ast.c @@ -175,7 +175,8 @@ static unsigned get_expression_precedence(expression_kind_t kind) unsigned res = prec[kind]; assert(res != PREC_BOTTOM); - return res; + /* we need the lowest bit for right-to-left precedence */ + return 2 * res; } /** @@ -398,7 +399,7 @@ static void print_call_expression(const call_expression_t *call) } else { first = 0; } - print_expression_prec(argument->expression, PREC_ASSIGNMENT); + print_expression_prec(argument->expression, 2 * PREC_ASSIGNMENT); argument = argument->next; } @@ -498,7 +499,7 @@ static void print_unary_expression(const unary_expression_t *unexpr) break; case EXPR_UNARY_ASSUME: fputs("__assume(", out); - print_expression_prec(unexpr->value, PREC_ASSIGNMENT); + print_expression_prec(unexpr->value, 2 * PREC_ASSIGNMENT); fputc(')', out); return; default: @@ -591,7 +592,7 @@ static void print_builtin_symbol(const builtin_symbol_expression_t *expression) static void print_builtin_constant(const builtin_constant_expression_t *expression) { fputs("__builtin_constant_p(", out); - print_expression_prec(expression->value, PREC_ASSIGNMENT); + print_expression_prec(expression->value, 2 * PREC_ASSIGNMENT); fputc(')', out); } @@ -603,14 +604,14 @@ static void print_builtin_constant(const builtin_constant_expression_t *expressi static void print_builtin_prefetch(const builtin_prefetch_expression_t *expression) { fputs("__builtin_prefetch(", out); - print_expression_prec(expression->adr, PREC_ASSIGNMENT); + print_expression_prec(expression->adr, 2 * PREC_ASSIGNMENT); if (expression->rw) { fputc(',', out); - print_expression_prec(expression->rw, PREC_ASSIGNMENT); + print_expression_prec(expression->rw, 2 * PREC_ASSIGNMENT); } if (expression->locality) { fputc(',', out); - print_expression_prec(expression->locality, PREC_ASSIGNMENT); + print_expression_prec(expression->locality, 2 * PREC_ASSIGNMENT); } fputc(')', out); } @@ -622,15 +623,15 @@ static void print_builtin_prefetch(const builtin_prefetch_expression_t *expressi */ static void print_conditional(const conditional_expression_t *expression) { - print_expression_prec(expression->condition, PREC_LOGICAL_OR); + print_expression_prec(expression->condition, 2 * PREC_LOGICAL_OR); fputs(" ? ", out); if (expression->true_expression != NULL) { - print_expression_prec(expression->true_expression, PREC_EXPRESSION); + print_expression_prec(expression->true_expression, 2 * PREC_EXPRESSION); fputs(" : ", out); } else { fputs(": ", out); } - print_expression_prec(expression->false_expression, PREC_CONDITIONAL); + print_expression_prec(expression->false_expression, 2 * PREC_CONDITIONAL); } /** @@ -641,7 +642,7 @@ static void print_conditional(const conditional_expression_t *expression) static void print_va_start(const va_start_expression_t *const expression) { fputs("__builtin_va_start(", out); - print_expression_prec(expression->ap, PREC_ASSIGNMENT); + print_expression_prec(expression->ap, 2 * PREC_ASSIGNMENT); fputs(", ", out); fputs(expression->parameter->symbol->string, out); fputc(')', out); @@ -655,7 +656,7 @@ static void print_va_start(const va_start_expression_t *const expression) static void print_va_arg(const va_arg_expression_t *expression) { fputs("__builtin_va_arg(", out); - print_expression_prec(expression->ap, PREC_ASSIGNMENT); + print_expression_prec(expression->ap, 2 * PREC_ASSIGNMENT); fputs(", ", out); print_type(expression->base.type); fputc(')', out); @@ -687,7 +688,7 @@ static void print_classify_type_expression( const classify_type_expression_t *const expr) { fputs("__builtin_classify_type(", out); - print_expression_prec(expr->type_expression, PREC_ASSIGNMENT); + print_expression_prec(expr->type_expression, 2 * PREC_ASSIGNMENT); fputc(')', out); } @@ -1444,7 +1445,7 @@ static void print_normal_declaration(const declaration_t *declaration) */ void print_expression(const expression_t *expression) { - print_expression_prec(expression, PREC_BOTTOM); + print_expression_prec(expression, 2 * PREC_BOTTOM); } /** -- 2.20.1