global variable accessors don't require library object

This commit is contained in:
Yuichi Nishiwaki 2014-01-13 00:45:49 +09:00
parent dbf73ecd7a
commit 6b808354c0
3 changed files with 8 additions and 14 deletions

View File

@ -97,9 +97,9 @@ void pic_gc_arena_restore(pic_state *, int);
pic_state *pic_open(int argc, char *argv[], char **envp); pic_state *pic_open(int argc, char *argv[], char **envp);
void pic_close(pic_state *); void pic_close(pic_state *);
void pic_define(pic_state *, struct pic_lib *, const char *, pic_value); /* symbol is automatically exported */ void pic_define(pic_state *, const char *, pic_value); /* symbol is automatically exported */
pic_value pic_ref(pic_state *, struct pic_lib *, const char *); pic_value pic_ref(pic_state *, const char *);
pic_value pic_set(pic_state *, struct pic_lib *, const char *, pic_value); void pic_set(pic_state *, const char *, pic_value);
struct pic_proc *pic_get_proc(pic_state *); struct pic_proc *pic_get_proc(pic_state *);
int pic_get_args(pic_state *, const char *, ...); int pic_get_args(pic_state *, const char *, ...);

View File

@ -932,11 +932,10 @@ pic_codegen(pic_state *pic, pic_value obj)
} }
void void
pic_define(pic_state *pic, struct pic_lib *lib, const char *name, pic_value val) pic_define(pic_state *pic, const char *name, pic_value val)
{ {
int idx; int idx;
pic_sym gsym; pic_sym gsym;
struct pic_lib *lib2;
gsym = pic_gensym(pic, pic_intern_cstr(pic, name)); gsym = pic_gensym(pic, pic_intern_cstr(pic, name));
@ -945,15 +944,10 @@ pic_define(pic_state *pic, struct pic_lib *lib, const char *name, pic_value val)
pic->globals[idx] = val; pic->globals[idx] = val;
/* register to the senv */ /* register to the senv */
xh_put(lib->senv->tbl, name, gsym); xh_put(pic->lib->senv->tbl, name, gsym);
/* export! */ /* export! */
lib2 = pic->lib; pic_export(pic, pic_intern_cstr(pic, name));
{
pic->lib = lib;
pic_export(pic, pic_intern_cstr(pic, name));
pic->lib = lib2;
}
} }
void void

View File

@ -307,7 +307,7 @@ pic_defun(pic_state *pic, const char *name, pic_func_t cfunc)
struct pic_proc *proc; struct pic_proc *proc;
proc = pic_proc_new(pic, cfunc); proc = pic_proc_new(pic, cfunc);
pic_define(pic, pic->lib, name, pic_obj_value(proc)); pic_define(pic, name, pic_obj_value(proc));
} }
void void
@ -316,7 +316,7 @@ pic_defvar(pic_state *pic, const char *name, pic_value init)
struct pic_var *var; struct pic_var *var;
var = pic_var_new(pic, init, NULL); var = pic_var_new(pic, init, NULL);
pic_define(pic, pic->lib, name, pic_obj_value(pic_wrap_var(pic, var))); pic_define(pic, name, pic_obj_value(pic_wrap_var(pic, var)));
} }
pic_value pic_value