67 lines
907 B
C
67 lines
907 B
C
#include "dat.h"
|
|
#include "fn.h"
|
|
|
|
GC *gc;
|
|
|
|
static void
|
|
SExprint(Object *obj)
|
|
{
|
|
if(obj == 0)
|
|
return;
|
|
switch(obj->type){
|
|
default:
|
|
return;
|
|
case OCELL:
|
|
printf("(");
|
|
SExprint(obj->car);
|
|
printf(" . ");
|
|
SExprint(obj->cdr);
|
|
printf(")");
|
|
break;
|
|
case OINT:
|
|
printf("%ld", obj->num);
|
|
break;
|
|
case OIDENT:
|
|
printf("%s", obj->beg);
|
|
break;
|
|
case OSTRING:
|
|
printf("\"%s\"", obj->beg);
|
|
break;
|
|
case OBLTIN:
|
|
case OSYMBOL:
|
|
printf("%s", obj->beg);
|
|
break;
|
|
case OENV:
|
|
printf("<env>");
|
|
SExprint(obj->vars);
|
|
break;
|
|
case OMACRO:
|
|
printf("<macro>");
|
|
goto func;
|
|
case OFUNC:
|
|
printf("<func>");
|
|
func:
|
|
printf("<");
|
|
SExprint(obj->params);
|
|
SExprint(obj->body);
|
|
printf(">");
|
|
break;
|
|
}
|
|
}
|
|
|
|
void
|
|
printexpr(Object *obj)
|
|
{
|
|
SExprint(obj);
|
|
printf("\n");
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
*argv = "lib/lib.lisp";
|
|
gc = newgc(&argc, 12000);
|
|
lispmain(argv);
|
|
panic("unreachable");
|
|
}
|