add pic_debug function
This commit is contained in:
parent
0c382c2bdb
commit
b640dc08e8
|
@ -19,4 +19,6 @@ pic_value pic_cdr(pic_state *, pic_value);
|
|||
|
||||
pic_value pic_intern_cstr(pic_state *, const char *);
|
||||
|
||||
void pic_debug(pic_state *, pic_value);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -14,6 +14,9 @@ typedef struct {
|
|||
} pic_value;
|
||||
|
||||
enum pic_tt {
|
||||
/* immediate */
|
||||
PIC_TT_NIL,
|
||||
/* heap */
|
||||
PIC_TT_PAIR,
|
||||
PIC_TT_SYMBOL
|
||||
};
|
||||
|
@ -36,6 +39,11 @@ struct pic_symbol {
|
|||
char *name;
|
||||
};
|
||||
|
||||
#define pic_pair_ptr(o) ((struct pic_pair *)o->u->data)
|
||||
#define pic_symbol_ptr(o) ((struct pic_symbol *)o->u->data)
|
||||
|
||||
enum pic_tt pic_type(pic_value v);
|
||||
|
||||
pic_value pic_nil_value();
|
||||
pic_value pic_obj_value(struct pic_object *obj);
|
||||
|
||||
|
|
11
src/value.c
11
src/value.c
|
@ -1,5 +1,16 @@
|
|||
#include "picrin.h"
|
||||
|
||||
enum pic_tt
|
||||
pic_type(pic_value v)
|
||||
{
|
||||
switch (v->type) {
|
||||
case PIC_VTYPE_NIL:
|
||||
return PIC_TT_NIL;
|
||||
case PIC_VTYPE_HEAP:
|
||||
return v->u->data->tt;
|
||||
}
|
||||
}
|
||||
|
||||
pic_value
|
||||
pic_nil_value()
|
||||
{
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "picrin.h"
|
||||
|
||||
void
|
||||
pic_debug(pic_state *pic, pic_value obj)
|
||||
{
|
||||
switch (pic_type(obj)) {
|
||||
case PIC_TT_NIL:
|
||||
printf("()");
|
||||
break;
|
||||
case PIC_TT_PAIR:
|
||||
printf("(");
|
||||
pic_debug(pic, pic_car(pic, obj));
|
||||
printf(" . ");
|
||||
pic_debug(pic, pic_cdr(pic, obj));
|
||||
printf(")");
|
||||
break;
|
||||
case PIC_TT_SYMBOL:
|
||||
printf("%s", pic_symbol_ptr(obj)->name);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue