add parameter primitives: (picrin parameter) library
This commit is contained in:
@@ -93,7 +93,8 @@ enum pic_tt {
|
||||
PIC_TT_SENV,
|
||||
PIC_TT_SYNTAX,
|
||||
PIC_TT_SC,
|
||||
PIC_TT_LIB
|
||||
PIC_TT_LIB,
|
||||
PIC_TT_VAR
|
||||
};
|
||||
|
||||
#define PIC_OBJECT_HEADER \
|
||||
|
||||
+2
-1
@@ -673,7 +673,8 @@ codegen(codegen_state *state, pic_value obj, bool tailpos)
|
||||
case PIC_TT_SENV:
|
||||
case PIC_TT_SYNTAX:
|
||||
case PIC_TT_SC:
|
||||
case PIC_TT_LIB: {
|
||||
case PIC_TT_LIB:
|
||||
case PIC_TT_VAR: {
|
||||
pic_error(pic, "invalid expression given");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "picrin/error.h"
|
||||
#include "picrin/macro.h"
|
||||
#include "picrin/lib.h"
|
||||
#include "picrin/var.h"
|
||||
#include "xhash/xhash.h"
|
||||
|
||||
#if GC_DEBUG
|
||||
@@ -403,6 +404,14 @@ gc_mark_object(pic_state *pic, struct pic_object *obj)
|
||||
gc_mark_object(pic, (struct pic_object *)lib->senv);
|
||||
break;
|
||||
}
|
||||
case PIC_TT_VAR: {
|
||||
struct pic_var *var = (struct pic_var *)obj;
|
||||
gc_mark(pic, var->value);
|
||||
if (var->conv) {
|
||||
gc_mark_object(pic, (struct pic_object *)var->conv);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case PIC_TT_NIL:
|
||||
case PIC_TT_BOOL:
|
||||
case PIC_TT_FLOAT:
|
||||
@@ -539,6 +548,9 @@ gc_finalize_object(pic_state *pic, struct pic_object *obj)
|
||||
xh_destory(lib->exports);
|
||||
break;
|
||||
}
|
||||
case PIC_TT_VAR: {
|
||||
break;
|
||||
}
|
||||
case PIC_TT_NIL:
|
||||
case PIC_TT_BOOL:
|
||||
case PIC_TT_FLOAT:
|
||||
|
||||
@@ -22,6 +22,7 @@ void pic_init_char(pic_state *);
|
||||
void pic_init_error(pic_state *);
|
||||
void pic_init_str(pic_state *);
|
||||
void pic_init_macro(pic_state *);
|
||||
void pic_init_var(pic_state *);
|
||||
|
||||
void
|
||||
pic_load_stdlib(pic_state *pic)
|
||||
@@ -124,6 +125,7 @@ pic_init_core(pic_state *pic)
|
||||
pic_init_error(pic); DONE;
|
||||
pic_init_str(pic); DONE;
|
||||
pic_init_macro(pic); DONE;
|
||||
pic_init_var(pic); DONE;
|
||||
|
||||
pic_load_stdlib(pic); DONE;
|
||||
|
||||
|
||||
@@ -560,6 +560,7 @@ macroexpand(pic_state *pic, pic_value expr, struct pic_senv *senv)
|
||||
case PIC_TT_SENV:
|
||||
case PIC_TT_SYNTAX:
|
||||
case PIC_TT_LIB:
|
||||
case PIC_TT_VAR:
|
||||
pic_error(pic, "unexpected value type");
|
||||
return pic_undef_value(); /* unreachable */
|
||||
}
|
||||
|
||||
@@ -112,6 +112,9 @@ write(pic_state *pic, pic_value obj)
|
||||
case PIC_TT_LIB:
|
||||
printf("#<library %p>", pic_ptr(obj));
|
||||
break;
|
||||
case PIC_TT_VAR:
|
||||
printf("#<var %p>", pic_ptr(obj));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -78,6 +78,8 @@ pic_type_repr(enum pic_tt tt)
|
||||
return "syntax";
|
||||
case PIC_TT_LIB:
|
||||
return "lib";
|
||||
case PIC_TT_VAR:
|
||||
return "var";
|
||||
}
|
||||
/* logic flaw */
|
||||
abort();
|
||||
|
||||
Reference in New Issue
Block a user