writer writes lists in short form
This commit is contained in:
parent
f64f6bec97
commit
e87f632327
|
@ -50,7 +50,7 @@ struct pic_symbol {
|
||||||
|
|
||||||
struct pic_proc;
|
struct pic_proc;
|
||||||
|
|
||||||
#define pic_object_ptr(o) ((struct pic_object *)o.u.data)
|
#define pic_obj_ptr(o) ((struct pic_object *)o.u.data)
|
||||||
#define pic_pair_ptr(o) ((struct pic_pair *)o.u.data)
|
#define pic_pair_ptr(o) ((struct pic_pair *)o.u.data)
|
||||||
#define pic_symbol_ptr(o) ((struct pic_symbol *)o.u.data)
|
#define pic_symbol_ptr(o) ((struct pic_symbol *)o.u.data)
|
||||||
|
|
||||||
|
@ -70,5 +70,6 @@ pic_value pic_float_value(double);
|
||||||
#define pic_true_p(v) ((v).type == PIC_VTYPE_TRUE)
|
#define pic_true_p(v) ((v).type == PIC_VTYPE_TRUE)
|
||||||
#define pic_false_p(v) ((v).type == PIC_VTYPE_FALSE)
|
#define pic_false_p(v) ((v).type == PIC_VTYPE_FALSE)
|
||||||
#define pic_undef_p(v) ((v).type == PIC_VTYPE_UNDEF)
|
#define pic_undef_p(v) ((v).type == PIC_VTYPE_UNDEF)
|
||||||
|
#define pic_pair_p(v) (pic_type(v) == PIC_TT_PAIR)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
4
src/gc.c
4
src/gc.c
|
@ -78,7 +78,7 @@ pic_gc_protect(pic_state *pic, pic_value v)
|
||||||
if (v.type != PIC_VTYPE_HEAP) {
|
if (v.type != PIC_VTYPE_HEAP) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
obj = pic_object_ptr(v);
|
obj = pic_obj_ptr(v);
|
||||||
|
|
||||||
gc_protect(pic, obj);
|
gc_protect(pic, obj);
|
||||||
}
|
}
|
||||||
|
@ -160,7 +160,7 @@ gc_mark(pic_state *pic, pic_value v)
|
||||||
|
|
||||||
if (v.type != PIC_VTYPE_HEAP)
|
if (v.type != PIC_VTYPE_HEAP)
|
||||||
return;
|
return;
|
||||||
obj = pic_object_ptr(v);
|
obj = pic_obj_ptr(v);
|
||||||
|
|
||||||
gc_mark_object(pic, obj);
|
gc_mark_object(pic, obj);
|
||||||
}
|
}
|
||||||
|
|
23
src/port.c
23
src/port.c
|
@ -4,6 +4,8 @@
|
||||||
#include "picrin.h"
|
#include "picrin.h"
|
||||||
#include "picrin/proc.h"
|
#include "picrin/proc.h"
|
||||||
|
|
||||||
|
static void write_pair(pic_state *pic, struct pic_pair *pair);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
write(pic_state *pic, pic_value obj)
|
write(pic_state *pic, pic_value obj)
|
||||||
{
|
{
|
||||||
|
@ -19,9 +21,7 @@ write(pic_state *pic, pic_value obj)
|
||||||
break;
|
break;
|
||||||
case PIC_TT_PAIR:
|
case PIC_TT_PAIR:
|
||||||
printf("(");
|
printf("(");
|
||||||
write(pic, pic_car(pic, obj));
|
write_pair(pic, pic_pair_ptr(obj));
|
||||||
printf(" . ");
|
|
||||||
write(pic, pic_cdr(pic, obj));
|
|
||||||
printf(")");
|
printf(")");
|
||||||
break;
|
break;
|
||||||
case PIC_TT_SYMBOL:
|
case PIC_TT_SYMBOL:
|
||||||
|
@ -39,6 +39,23 @@ write(pic_state *pic, pic_value obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
write_pair(pic_state *pic, struct pic_pair *pair)
|
||||||
|
{
|
||||||
|
write(pic, pair->car);
|
||||||
|
|
||||||
|
if (pic_nil_p(pair->cdr)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (pic_pair_p(pair->cdr)) {
|
||||||
|
printf(" ");
|
||||||
|
write_pair(pic, pic_pair_ptr(pair->cdr));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printf(" . ");
|
||||||
|
write(pic, pair->cdr);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pic_debug(pic_state *pic, pic_value obj)
|
pic_debug(pic_state *pic, pic_value obj)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue