add PIC_TT_SENV and PIC_TT_SYNTAX
This commit is contained in:
parent
3c65025394
commit
c59d8f601b
|
@ -89,7 +89,9 @@ enum pic_tt {
|
|||
PIC_TT_PORT,
|
||||
PIC_TT_ERROR,
|
||||
PIC_TT_ENV,
|
||||
PIC_TT_CONT
|
||||
PIC_TT_CONT,
|
||||
PIC_TT_SENV,
|
||||
PIC_TT_SYNTAX
|
||||
};
|
||||
|
||||
#define PIC_OBJECT_HEADER \
|
||||
|
|
|
@ -658,7 +658,9 @@ codegen(codegen_state *state, pic_value obj, bool tailpos)
|
|||
case PIC_TT_UNDEF:
|
||||
case PIC_TT_EOF:
|
||||
case PIC_TT_PORT:
|
||||
case PIC_TT_ERROR: {
|
||||
case PIC_TT_ERROR:
|
||||
case PIC_TT_SENV:
|
||||
case PIC_TT_SYNTAX: {
|
||||
pic_error(pic, "invalid expression given");
|
||||
}
|
||||
}
|
||||
|
|
30
src/gc.c
30
src/gc.c
|
@ -8,6 +8,8 @@
|
|||
#include "picrin/blob.h"
|
||||
#include "picrin/cont.h"
|
||||
#include "picrin/error.h"
|
||||
#include "picrin/macro.h"
|
||||
#include "xhash/xhash.h"
|
||||
|
||||
#if GC_DEBUG
|
||||
# include <stdio.h>
|
||||
|
@ -273,6 +275,24 @@ gc_mark_object(pic_state *pic, struct pic_object *obj)
|
|||
gc_mark(pic, cont->result);
|
||||
break;
|
||||
}
|
||||
case PIC_TT_SYNTAX: {
|
||||
break;
|
||||
}
|
||||
case PIC_TT_SENV: {
|
||||
struct pic_senv *senv = (struct pic_senv *)obj;
|
||||
|
||||
if (senv->up) {
|
||||
gc_mark_object(pic, (struct pic_object *)senv->up);
|
||||
}
|
||||
if (senv->stx) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 6; ++i) {
|
||||
gc_mark_object(pic, (struct pic_object *)senv->stx[i]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PIC_TT_NIL:
|
||||
case PIC_TT_BOOL:
|
||||
case PIC_TT_FLOAT:
|
||||
|
@ -397,6 +417,16 @@ gc_finalize_object(pic_state *pic, struct pic_object *obj)
|
|||
PIC_BLK_DECREF(pic, cont->blk);
|
||||
break;
|
||||
}
|
||||
case PIC_TT_SENV: {
|
||||
struct pic_senv *senv = (struct pic_senv *)obj;
|
||||
xh_destory(senv->tbl);
|
||||
if (senv->stx)
|
||||
pic_free(pic, senv->stx);
|
||||
break;
|
||||
}
|
||||
case PIC_TT_SYNTAX: {
|
||||
break;
|
||||
}
|
||||
case PIC_TT_NIL:
|
||||
case PIC_TT_BOOL:
|
||||
case PIC_TT_FLOAT:
|
||||
|
|
|
@ -162,6 +162,8 @@ expand(pic_state *pic, pic_value obj, struct syntactic_env *env)
|
|||
case PIC_TT_ENV:
|
||||
case PIC_TT_CONT:
|
||||
case PIC_TT_UNDEF:
|
||||
case PIC_TT_SENV:
|
||||
case PIC_TT_SYNTAX:
|
||||
pic_error(pic, "unexpected value type");
|
||||
return pic_undef_value(); /* unreachable */
|
||||
}
|
||||
|
|
|
@ -97,6 +97,12 @@ write(pic_state *pic, pic_value obj)
|
|||
case PIC_TT_CONT:
|
||||
printf("#<cont %p>", pic_ptr(obj));
|
||||
break;
|
||||
case PIC_TT_SENV:
|
||||
printf("#<senv %p>", pic_ptr(obj));
|
||||
break;
|
||||
case PIC_TT_SYNTAX:
|
||||
printf("#<senv %p>", pic_ptr(obj));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue