X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ast.c;h=36338a605717caa43e898910b364625aa7f96a66;hb=9fc5a3152558711a37406f79913f77cab1dc9db7;hp=f09b346bbf096d12bebbcd07ca5eee42c6adab9c;hpb=ed1ed2b5fb813fd8de24b2eaa6fffce033246a8c;p=cparser diff --git a/ast.c b/ast.c index f09b346..36338a6 100644 --- a/ast.c +++ b/ast.c @@ -1038,7 +1038,7 @@ static void print_declaration_statement( entity_t *const end = statement->declarations_end->base.next; for (; entity != end; entity = entity->base.next) { - if (!is_declaration(entity) && entity->kind != ENTITY_TYPEDEF) + if (entity->kind == ENTITY_ENUM_VALUE) continue; if (is_generated_entity(entity)) continue; @@ -1049,13 +1049,7 @@ static void print_declaration_statement( first = false; } - if (entity->kind == ENTITY_TYPEDEF) { - print_typedef(entity); - } else { - assert(is_declaration(entity)); - print_declaration(entity); - } - + print_entity(entity); fputc('\n', out); } } @@ -1933,8 +1927,6 @@ bool is_constant_expression(const expression_t *expression) case EXPR_BINARY_BITWISE_AND: case EXPR_BINARY_BITWISE_OR: case EXPR_BINARY_BITWISE_XOR: - case EXPR_BINARY_LOGICAL_AND: - case EXPR_BINARY_LOGICAL_OR: case EXPR_BINARY_SHIFTLEFT: case EXPR_BINARY_SHIFTRIGHT: case EXPR_BINARY_ISGREATER: @@ -1946,6 +1938,24 @@ bool is_constant_expression(const expression_t *expression) return is_constant_expression(expression->binary.left) && is_constant_expression(expression->binary.right); + case EXPR_BINARY_LOGICAL_AND: { + expression_t const *const left = expression->binary.left; + if (!is_constant_expression(left)) + return false; + if (fold_constant(left) == 0) + return true; + return is_constant_expression(expression->binary.right); + } + + case EXPR_BINARY_LOGICAL_OR: { + expression_t const *const left = expression->binary.left; + if (!is_constant_expression(left)) + return false; + if (fold_constant(left) != 0) + return true; + return is_constant_expression(expression->binary.right); + } + case EXPR_COMPOUND_LITERAL: return is_constant_initializer(expression->compound_literal.initializer);