core: Use switch in display_helper.

*mes (display_helper): Use switch.
This commit is contained in:
Jan Nieuwenhuizen 2016-11-03 22:11:18 +01:00
parent a0709313ca
commit 6c70e92276
1 changed files with 76 additions and 62 deletions

50
mes.c
View File

@ -805,22 +805,31 @@ display_helper (FILE* f, scm *x, bool cont, char const *sep, bool quote)
{ {
scm *r; scm *r;
fprintf (f, "%s", sep); fprintf (f, "%s", sep);
if (x->type == CHAR && x->value == char_nul.value) fprintf (f, "#\\%s", char_nul.name); switch (x->type)
else if (x->type == CHAR && x->value == char_backspace.value) fprintf (f, "#\\%s", char_backspace.name); {
else if (x->type == CHAR && x->value == char_tab.value) fprintf (f, "#\\%s", char_tab.name); case CHAR:
else if (x->type == CHAR && x->value == char_newline.value) fprintf (f, "#\\%s", char_newline.name); {
else if (x->type == CHAR && x->value == char_vt.value) fprintf (f, "#\\%s", char_vt.name); char const *name = 0;
else if (x->type == CHAR && x->value == char_page.value) fprintf (f, "#\\%s", char_page.name); if (x->value == char_nul.value) name = char_nul.name;
else if (x->type == CHAR && x->value == char_return.value) fprintf (f, "#\\%s", char_return.name); else if (x->value == char_backspace.value) name = char_backspace.name;
else if (x->type == CHAR && x->value == char_space.value) fprintf (f, "#\\%s", char_space.name); else if (x->value == char_tab.value) name = char_tab.name;
else if (x->type == CHAR) fprintf (f, "#\\%c", x->value); else if (x->value == char_newline.value) name = char_newline.name;
else if (x->type == MACRO) { else if (x->value == char_vt.value) name = char_vt.name;
else if (x->value == char_page.value) name = char_page.name;
else if (x->value == char_return.value) name = char_return.name;
else if (x->value == char_space.value) name = char_space.name;
if (name) fprintf (f, "#\\%s", name);
else fprintf (f, "#\\%c", x->value);
break;
}
case MACRO:
fprintf (f, "(*macro* "); fprintf (f, "(*macro* ");
display_helper (f, x->macro, cont, sep, quote); display_helper (f, x->macro, cont, sep, quote);
fprintf (f, ")"); fprintf (f, ")");
} break;
else if (x->type == NUMBER) fprintf (f, "%d", x->value); case NUMBER: fprintf (f, "%d", x->value); break;
else if (x->type == PAIR) { case PAIR:
{
if (car (x) == &scm_circular) { if (car (x) == &scm_circular) {
fprintf (f, "(*circ* . #-1#)"); fprintf (f, "(*circ* . #-1#)");
return &scm_unspecified; return &scm_unspecified;
@ -842,8 +851,10 @@ display_helper (FILE* f, scm *x, bool cont, char const *sep, bool quote)
display_ (f, cdr (x)); display_ (f, cdr (x));
} }
if (!cont) fprintf (f, ")"); if (!cont) fprintf (f, ")");
break;
} }
else if (x->type == VECTOR) { case VECTOR:
{
fprintf (f, "#(", x->length); fprintf (f, "#(", x->length);
for (int i = 0; i < x->length; i++) { for (int i = 0; i < x->length; i++) {
if (x->vector[i].type == VECTOR if (x->vector[i].type == VECTOR
@ -854,10 +865,13 @@ display_helper (FILE* f, scm *x, bool cont, char const *sep, bool quote)
display_helper (f, &x->vector[i], false, i ? " " : "", false); display_helper (f, &x->vector[i], false, i ? " " : "", false);
} }
fprintf (f, ")"); fprintf (f, ")");
break;
} }
else if (x->type == REF) display_helper (f, x->ref, cont, "", true); case REF: display_helper (f, x->ref, cont, "", true); break;
else if (x->type == FUNCTION) fprintf (f, "#<procedure %s>", x->name); case FUNCTION: fprintf (f, "#<procedure %s>", x->name); ;break;
else if (x->type != PAIR && x->string) { default:
if (x->string)
{
scm *p = x->string; scm *p = x->string;
assert (p); assert (p);
while (p != &scm_nil) { while (p != &scm_nil) {
@ -867,7 +881,7 @@ display_helper (FILE* f, scm *x, bool cont, char const *sep, bool quote)
} }
} }
else if (x->type != PAIR && x->name) fprintf (f, "%s", x->name); else if (x->type != PAIR && x->name) fprintf (f, "%s", x->name);
}
return &scm_unspecified; return &scm_unspecified;
} }