default: {
const unsigned tc = *c;
if (tc < 0x80U) {
- if (!isprint(*c)) {
- fprintf(out, "\\%03o", (char)*c);
- } else {
+ if (isprint(*c)) {
fputc(*c, out);
+ } else {
+ fprintf(out, "\\%03o", tc);
}
} else if (tc < 0x800) {
fputc(0xC0 | (tc >> 6), out);
}
--indent;
print_indent();
- fputs("}\n", out);
+ fputs(block->stmt_expr ? "}" : "}\n", out);
}
/**
}
}
-static void print_local_label(const local_label_statement_t *statement)
-{
- fputs("__label__ ", out);
-
- bool first = true;
- entity_t *entity = statement->labels_begin;
- for (;
- entity != statement->labels_end->base.next;
- entity = entity->base.next) {
- if (!first) {
- fputs(", ", out);
- } else {
- first = false;
- }
- fputs(entity->base.symbol->string, out);
- }
- fputs(";\n", out);
-}
-
static void print_typedef(const entity_t *entity)
{
fputs("typedef ", out);
case STATEMENT_LABEL:
print_label_statement(&statement->label);
break;
- case STATEMENT_LOCAL_LABEL:
- print_local_label(&statement->local_label);
- break;
case STATEMENT_GOTO:
print_goto_statement(&statement->gotos);
break;
*/
static void print_storage_class(storage_class_tag_t storage_class)
{
- const char *text;
switch (storage_class) {
case STORAGE_CLASS_NONE: return;
- case STORAGE_CLASS_TYPEDEF: text = "typedef "; break;
- case STORAGE_CLASS_EXTERN: text = "extern "; break;
- case STORAGE_CLASS_STATIC: text = "static "; break;
- case STORAGE_CLASS_AUTO: text = "auto "; break;
- case STORAGE_CLASS_REGISTER: text = "register "; break;
- default: panic("invalid storage class");
+ case STORAGE_CLASS_TYPEDEF: fputs("typedef ", out); return;
+ case STORAGE_CLASS_EXTERN: fputs("extern ", out); return;
+ case STORAGE_CLASS_STATIC: fputs("static ", out); return;
+ case STORAGE_CLASS_AUTO: fputs("auto ", out); return;
+ case STORAGE_CLASS_REGISTER: fputs("register ", out); return;
}
- fputs(text, out);
+ panic("invalid storage class");
}
/**
case ENTITY_NAMESPACE:
print_namespace(&entity->namespacee);
return;
+ case ENTITY_LOCAL_LABEL:
+ fprintf(out, "__label__ %s;", entity->base.symbol->string);
+ return;
case ENTITY_LABEL:
case ENTITY_ENUM_VALUE:
- case ENTITY_LOCAL_LABEL:
panic("print_entity used on unexpected entity type");
case ENTITY_INVALID:
break;