introduce immediate symbol value

This commit is contained in:
Yuichi Nishiwaki
2013-10-29 02:11:31 +09:00
parent a19c59ba87
commit 63b52991da
12 changed files with 297 additions and 376 deletions
+1 -1
View File
@@ -13,7 +13,7 @@
#define PIC_STACK_SIZE 1024
#define PIC_IREP_SIZE 256
#define PIC_GLOBALS_SIZE 1024
#define PIC_SYM_TBL_SIZE 128
#define PIC_SYM_POOL_SIZE 128
#define PIC_POOL_SIZE 1024
/* enable all debug flags */
+12 -7
View File
@@ -27,13 +27,15 @@ typedef struct {
pic_callinfo *ci;
pic_callinfo *cibase, *ciend;
pic_value sDEFINE, sLAMBDA, sIF, sBEGIN, sQUOTE, sSETBANG;
pic_value sQUASIQUOTE, sUNQUOTE, sUNQUOTE_SPLICING;
pic_value sCONS, sCAR, sCDR, sNILP;
pic_value sADD, sSUB, sMUL, sDIV;
pic_value sEQ, sLT, sLE, sGT, sGE;
pic_sym sDEFINE, sLAMBDA, sIF, sBEGIN, sQUOTE, sSETBANG;
pic_sym sQUASIQUOTE, sUNQUOTE, sUNQUOTE_SPLICING;
pic_sym sCONS, sCAR, sCDR, sNILP;
pic_sym sADD, sSUB, sMUL, sDIV;
pic_sym sEQ, sLT, sLE, sGT, sGE;
struct sym_tbl *sym_tbl;
struct xhash *sym_tbl;
const char **sym_pool;
size_t slen, scapa;
struct xhash *global_tbl;
pic_value *globals;
@@ -71,8 +73,11 @@ int pic_get_args(pic_state *, const char *, ...);
void pic_defun(pic_state *, const char *, pic_func_t);
bool pic_eq_p(pic_state *, pic_value, pic_value);
bool pic_eqv_p(pic_state *, pic_value, pic_value);
bool pic_equql_p(pic_state *, pic_value, pic_value);
pic_value pic_intern_cstr(pic_state *, const char *);
pic_sym pic_intern_cstr(pic_state *, const char *);
const char *pic_symbol_name(pic_state *, pic_sym);
pic_value pic_str_new(pic_state *, const char *, size_t);
pic_value pic_str_new_cstr(pic_state *, const char *);
-11
View File
@@ -1,11 +0,0 @@
#ifndef SYMBOL_H__
#define SYMBOL_H__
struct sym_tbl {
pic_value tbl[PIC_SYM_TBL_SIZE];
size_t size;
};
pic_value sym_tbl_get(struct sym_tbl *, const char *);
#endif
+8 -8
View File
@@ -1,6 +1,8 @@
#ifndef VALUE_H__
#define VALUE_H__
typedef int pic_sym;
enum pic_vtype {
PIC_VTYPE_NIL,
PIC_VTYPE_TRUE,
@@ -8,6 +10,7 @@ enum pic_vtype {
PIC_VTYPE_UNDEF,
PIC_VTYPE_FLOAT,
PIC_VTYPE_INT,
PIC_VTYPE_SYMBOL,
PIC_VTYPE_EOF,
PIC_VTYPE_HEAP
};
@@ -18,6 +21,7 @@ typedef struct {
void *data;
double f;
int i;
pic_sym sym;
} u;
} pic_value;
@@ -27,11 +31,11 @@ enum pic_tt {
PIC_TT_BOOL,
PIC_TT_FLOAT,
PIC_TT_INT,
PIC_TT_SYMBOL,
PIC_TT_EOF,
PIC_TT_UNDEF,
/* heap */
PIC_TT_PAIR,
PIC_TT_SYMBOL,
PIC_TT_PROC,
PIC_TT_PORT,
PIC_TT_STRING,
@@ -51,11 +55,6 @@ struct pic_pair {
pic_value cdr;
};
struct pic_symbol {
PIC_OBJECT_HEADER
char *name;
};
struct pic_string {
PIC_OBJECT_HEADER
char *str;
@@ -67,7 +66,6 @@ struct pic_port;
#define pic_obj_ptr(o) ((struct pic_object *)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_str_ptr(v) ((struct pic_string *)v.u.data)
enum pic_tt pic_type(pic_value);
@@ -80,9 +78,11 @@ pic_value pic_undef_value();
pic_value pic_obj_value(void *);
pic_value pic_float_value(double);
pic_value pic_int_value(int);
pic_value pic_symbol_value(pic_sym);
#define pic_float(v) ((v).u.f)
#define pic_int(v) ((v).u.i)
#define pic_sym(v) ((v).u.sym)
#define pic_nil_p(v) ((v).type == PIC_VTYPE_NIL)
#define pic_true_p(v) ((v).type == PIC_VTYPE_TRUE)
@@ -90,8 +90,8 @@ pic_value pic_int_value(int);
#define pic_undef_p(v) ((v).type == PIC_VTYPE_UNDEF)
#define pic_float_p(v) ((v).type == PIC_VTYPE_FLOAT)
#define pic_int_p(v) ((v).type == PIC_VTYPE_INT)
#define pic_symbol_p(v) ((v).type == PIC_VTYPE_SYMBOL)
#define pic_pair_p(v) (pic_type(v) == PIC_TT_PAIR)
#define pic_symbol_p(v) (pic_type(v) == PIC_TT_SYMBOL)
#define pic_str_p(v) (pic_type(v) == PIC_TT_STRING)
#endif