introduce immediate symbol value
This commit is contained in:
+1
-1
@@ -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
@@ -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 *);
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user