mini-mes: Update display_.
* doc/examples/mini-mes.c (display_): Add separator, nicer recursion. * mes.c (display_): Update.
This commit is contained in:
parent
76f6fdc43e
commit
efc02d9746
89
mes.c
89
mes.c
|
@ -1024,63 +1024,91 @@ string_to_cstring (SCM s)
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int g_depth;
|
||||||
|
|
||||||
|
#define gputs(x) fputs(x, stdout)
|
||||||
|
|
||||||
SCM
|
SCM
|
||||||
display_ (SCM x)
|
display_helper (SCM x, int cont, char* sep)
|
||||||
{
|
{
|
||||||
|
gputs (sep);
|
||||||
|
if (g_depth == 0) return cell_unspecified;
|
||||||
|
//FIXME:
|
||||||
|
//g_depth--;
|
||||||
|
g_depth = g_depth - 1;
|
||||||
|
|
||||||
// eputs ("<display>\n");
|
// eputs ("<display>\n");
|
||||||
switch (TYPE (x))
|
switch (TYPE (x))
|
||||||
{
|
{
|
||||||
case TCHAR:
|
case TCHAR:
|
||||||
{
|
{
|
||||||
//fputs ("<char>\n", stdout);
|
//puts ("<char>\n");
|
||||||
fputs ("#\\", stdout);
|
gputs ("#\\");
|
||||||
putchar (VALUE (x));
|
putchar (VALUE (x));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TFUNCTION:
|
case TFUNCTION:
|
||||||
{
|
{
|
||||||
fputs ("#<procedure ", stdout);
|
gputs ("#<procedure ");
|
||||||
///fputs (FUNCTION (x).name ? FUNCTION (x).name : "?", stdout);
|
///gputs (FUNCTION (x).name ? FUNCTION (x).name : "?");
|
||||||
char *p = "?";
|
char *p = "?";
|
||||||
if (FUNCTION (x).name != 0)
|
if (FUNCTION (x).name != 0)
|
||||||
p = FUNCTION (x).name;
|
p = FUNCTION (x).name;
|
||||||
fputs (p, stdout);
|
gputs (p);
|
||||||
fputs ("[", stdout);
|
gputs ("[");
|
||||||
fputs (itoa (CDR (x)), stdout);
|
gputs (itoa (CDR (x)));
|
||||||
fputs ("]>", stdout);
|
gputs (",");
|
||||||
|
gputs (itoa (x));
|
||||||
|
gputs ("]>");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TMACRO:
|
case TMACRO:
|
||||||
{
|
{
|
||||||
fputs ("#<macro ", 1);
|
gputs ("#<macro ");
|
||||||
display_ (cdr (x));
|
display_helper (cdr (x), cont, "");
|
||||||
fputs (">", 1);
|
gputs (">");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TNUMBER:
|
case TNUMBER:
|
||||||
{
|
{
|
||||||
//fputs ("<number>\n", stdout);
|
//gputs ("<number>\n");
|
||||||
fputs (itoa (VALUE (x)), stdout);
|
gputs (itoa (VALUE (x)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TPAIR:
|
case TPAIR:
|
||||||
{
|
{
|
||||||
//fputs ("<pair>\n", stdout);
|
if (!cont) gputs ("(");
|
||||||
//if (cont != cell_f) fputs ("(", stdout);
|
|
||||||
fputs ("(", stdout);
|
|
||||||
if (x && x != cell_nil) display_ (CAR (x));
|
if (x && x != cell_nil) display_ (CAR (x));
|
||||||
if (CDR (x) && CDR (x) != cell_nil)
|
if (CDR (x) && TYPE (CDR (x)) == TPAIR)
|
||||||
|
display_helper (CDR (x), 1, " ");
|
||||||
|
else if (CDR (x) && CDR (x) != cell_nil)
|
||||||
{
|
{
|
||||||
if (TYPE (CDR (x)) != TPAIR)
|
if (TYPE (CDR (x)) != TPAIR)
|
||||||
fputs (" . ", stdout);
|
gputs (" . ");
|
||||||
display_ (CDR (x));
|
display_ (CDR (x));
|
||||||
}
|
}
|
||||||
//if (cont != cell_f) fputs (")", stdout);
|
if (!cont) gputs (")");
|
||||||
fputs (")", stdout);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TSPECIAL:
|
case TSPECIAL:
|
||||||
|
#if __NYACC__
|
||||||
|
// FIXME
|
||||||
|
//{}
|
||||||
|
{
|
||||||
|
SCM t = CAR (x);
|
||||||
|
while (t && t != cell_nil)
|
||||||
|
{
|
||||||
|
putchar (VALUE (CAR (t)));
|
||||||
|
t = CDR (t);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
case TSTRING:
|
case TSTRING:
|
||||||
|
#if __NYACC__
|
||||||
|
// FIXME
|
||||||
|
{}
|
||||||
|
#endif
|
||||||
case TSYMBOL:
|
case TSYMBOL:
|
||||||
{
|
{
|
||||||
SCM t = CAR (x);
|
SCM t = CAR (x);
|
||||||
|
@ -1093,18 +1121,25 @@ display_ (SCM x)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
//fputs ("<default>\n", stdout);
|
//gputs ("<default>\n");
|
||||||
fputs ("<", stdout);
|
gputs ("<");
|
||||||
fputs (itoa (TYPE (x)), stdout);
|
gputs (itoa (TYPE (x)));
|
||||||
fputs (":", stdout);
|
gputs (":");
|
||||||
fputs (itoa (x), stdout);
|
gputs (itoa (x));
|
||||||
fputs (">", stdout);
|
gputs (">");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SCM
|
||||||
|
display_ (SCM x)
|
||||||
|
{
|
||||||
|
g_depth = 5;
|
||||||
|
return display_helper (x, 0, "");
|
||||||
|
}
|
||||||
|
|
||||||
SCM
|
SCM
|
||||||
stderr_ (SCM x)
|
stderr_ (SCM x)
|
||||||
{
|
{
|
||||||
|
|
|
@ -66,7 +66,6 @@ struct scm {
|
||||||
SCM cdr;
|
SCM cdr;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int (*f_t) (void);
|
|
||||||
struct function {
|
struct function {
|
||||||
int (*function) (void);
|
int (*function) (void);
|
||||||
int arity;
|
int arity;
|
||||||
|
@ -1131,9 +1130,17 @@ write_byte (SCM x) ///((arity . n))
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int g_depth;
|
||||||
|
|
||||||
SCM
|
SCM
|
||||||
display_ (SCM x)
|
display_helper (SCM x, int cont, char* sep)
|
||||||
{
|
{
|
||||||
|
puts (sep);
|
||||||
|
if (g_depth == 0) return cell_unspecified;
|
||||||
|
//FIXME:
|
||||||
|
//g_depth--;
|
||||||
|
g_depth = g_depth - 1;
|
||||||
|
|
||||||
// eputs ("<display>\n");
|
// eputs ("<display>\n");
|
||||||
switch (TYPE (x))
|
switch (TYPE (x))
|
||||||
{
|
{
|
||||||
|
@ -1154,13 +1161,15 @@ display_ (SCM x)
|
||||||
puts (p);
|
puts (p);
|
||||||
puts ("[");
|
puts ("[");
|
||||||
puts (itoa (CDR (x)));
|
puts (itoa (CDR (x)));
|
||||||
|
puts (",");
|
||||||
|
puts (itoa (x));
|
||||||
puts ("]>");
|
puts ("]>");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TMACRO:
|
case TMACRO:
|
||||||
{
|
{
|
||||||
puts ("#<macro ");
|
puts ("#<macro ");
|
||||||
display_ (cdr (x));
|
display_helper (cdr (x), cont, "");
|
||||||
puts (">");
|
puts (">");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1172,24 +1181,32 @@ display_ (SCM x)
|
||||||
}
|
}
|
||||||
case TPAIR:
|
case TPAIR:
|
||||||
{
|
{
|
||||||
//puts ("<pair>\n");
|
if (!cont) puts ("(");
|
||||||
//if (cont != cell_f) puts "(");
|
|
||||||
puts ("(");
|
|
||||||
if (x && x != cell_nil) display_ (CAR (x));
|
if (x && x != cell_nil) display_ (CAR (x));
|
||||||
if (CDR (x) && CDR (x) != cell_nil)
|
if (CDR (x) && TYPE (CDR (x)) == TPAIR)
|
||||||
|
display_helper (CDR (x), 1, " ");
|
||||||
|
else if (CDR (x) && CDR (x) != cell_nil)
|
||||||
{
|
{
|
||||||
if (TYPE (CDR (x)) != TPAIR)
|
if (TYPE (CDR (x)) != TPAIR)
|
||||||
puts (" . ");
|
puts (" . ");
|
||||||
display_ (CDR (x));
|
display_ (CDR (x));
|
||||||
}
|
}
|
||||||
//if (cont != cell_f) puts (")");
|
if (!cont) puts (")");
|
||||||
puts (")");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TSPECIAL:
|
case TSPECIAL:
|
||||||
#if __NYACC__
|
#if __NYACC__
|
||||||
// FIXME
|
// FIXME
|
||||||
{}
|
//{}
|
||||||
|
{
|
||||||
|
SCM t = CAR (x);
|
||||||
|
while (t && t != cell_nil)
|
||||||
|
{
|
||||||
|
putchar (VALUE (CAR (t)));
|
||||||
|
t = CDR (t);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
case TSTRING:
|
case TSTRING:
|
||||||
#if __NYACC__
|
#if __NYACC__
|
||||||
|
@ -1220,6 +1237,13 @@ display_ (SCM x)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SCM
|
||||||
|
display_ (SCM x)
|
||||||
|
{
|
||||||
|
g_depth = 5;
|
||||||
|
return display_helper (x, 0, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Jam Collector
|
// Jam Collector
|
||||||
SCM g_symbol_max;
|
SCM g_symbol_max;
|
||||||
|
|
Loading…
Reference in a new issue