reserve the 0 symbol for system use

This commit is contained in:
Yuichi Nishiwaki 2014-03-25 13:37:20 +09:00
parent 514937662e
commit 816343bd31
2 changed files with 12 additions and 0 deletions

View File

@ -9,6 +9,13 @@
extern "C" {
#endif
/**
* pic_sym is just an alias to int.
* the value 0 for pic_sym is guaranteed to resolve to no symbol.
* if you are defining a function that returns optional<pic_sym>,
* the zero symbol would be useful for such situation.
*/
typedef int pic_sym;
/**

View File

@ -75,6 +75,9 @@ pic_open(int argc, char *argv[], char **envp)
/* native stack marker */
pic->native_stack_start = &t;
/* symbol 0 is reserved for system */
xh_put_int(pic->sym_names, pic->sym_cnt++, (long)"<system-reserved-symbol>");
#define register_core_symbol(pic,slot,name) do { \
pic->slot = pic_intern_cstr(pic, name); \
} while (0)
@ -155,6 +158,8 @@ pic_close(pic_state *pic)
/* free symbol names */
for (xh_begin(pic->sym_names, &it); ! xh_isend(&it); xh_next(&it)) {
if (it.e->key == 0)
continue;
free((void *)it.e->val);
}
free(pic->sym_names);