fputc(border, out);
const char *end = string->begin + string->size - skip;
for (const char *c = string->begin; c != end; ++c) {
- if (*c == border) {
+ unsigned char const tc = *c;
+ if (tc == border) {
fputc('\\', out);
}
- switch (*c) {
+ switch (tc) {
case '\\': fputs("\\\\", out); break;
case '\a': fputs("\\a", out); break;
case '\b': fputs("\\b", out); break;
}
/* FALLTHROUGH */
default:
- if (!isprint(*c)) {
- fprintf(out, "\\%03o", (unsigned)(unsigned char)*c);
- break;
+ if (tc < 0x80 && !isprint(tc)) {
+ fprintf(out, "\\%03o", (unsigned)tc);
+ } else {
+ fputc(tc, out);
}
- fputc(*c, out);
break;
}
}
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);