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;
first = false;
}
- if (entity->kind == ENTITY_TYPEDEF) {
- print_typedef(entity);
- } else {
- assert(is_declaration(entity));
- print_declaration(entity);
- }
-
+ print_entity(entity);
fputc('\n', out);
}
}
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:
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);