rewrite deflibrary using gensym

This commit is contained in:
Yuichi Nishiwaki 2014-02-01 15:41:30 +09:00
parent c789200f5b
commit 47f4060086
8 changed files with 23 additions and 31 deletions

View File

@ -176,16 +176,22 @@ void pic_in_library(pic_state *, pic_value);
struct pic_lib *pic_make_library(pic_state *, pic_value); struct pic_lib *pic_make_library(pic_state *, pic_value);
struct pic_lib *pic_find_library(pic_state *, pic_value); struct pic_lib *pic_find_library(pic_state *, pic_value);
#define DEFLIBRARY(pic,name) \ #define PIC_DEFLIBRARY_HELPER2(tmp1, tmp2, tmp3, spec) \
do { \ for (struct pic_lib *tmp1 = pic->lib, \
struct pic_lib *lib__ = pic->lib; \ *tmp2 = (pic_make_library(pic, pic_parse(pic, spec)), \
pic_make_library(pic, pic_parse(pic, name)); \ pic_in_library(pic, pic_parse(pic, spec)), \
pic_in_library(pic, pic_parse(pic, name)); \ NULL); \
do tmp3 < 1; \
#define ENDLIBRARY(pic) \ (pic->lib = tmp1), ((void)tmp2), ++tmp3)
while (0); \
pic->lib = lib__; \ #define PIC_DEFLIBRARY_HELPER1(tmp1, tmp2, spec) \
} while (0) for (int tmp1 = 0, tmp2 = 0; tmp1 < 1; ++tmp1) \
PIC_DEFLIBRARY_HELPER2(GENSYM(pic_deflib_tmp3__), \
GENSYM(pic_deflib_tmp4__), \
tmp2, spec)
#define pic_deflibrary(spec) \
PIC_DEFLIBRARY_HELPER1(GENSYM(pic_deflib_tmp1__), GENSYM(pic_deflib_tmp2__), spec)
void pic_import(pic_state *, pic_value); void pic_import(pic_state *, pic_value);
void pic_export(pic_state *, pic_sym); void pic_export(pic_state *, pic_sym);

View File

@ -109,8 +109,7 @@ pic_file_delete(pic_state *pic)
void void
pic_init_file(pic_state *pic) pic_init_file(pic_state *pic)
{ {
DEFLIBRARY(pic, "(scheme file)") pic_deflibrary ("(scheme file)") {
{
pic_defun(pic, "open-input-file", pic_file_open_input_file); pic_defun(pic, "open-input-file", pic_file_open_input_file);
pic_defun(pic, "open-input-binary-file", pic_file_open_input_binary_file); pic_defun(pic, "open-input-binary-file", pic_file_open_input_binary_file);
pic_defun(pic, "open-output-file", pic_file_open_output_file); pic_defun(pic, "open-output-file", pic_file_open_output_file);
@ -118,5 +117,4 @@ pic_init_file(pic_state *pic)
pic_defun(pic, "file-exists?", pic_file_exists_p); pic_defun(pic, "file-exists?", pic_file_exists_p);
pic_defun(pic, "delete-file", pic_file_delete); pic_defun(pic, "delete-file", pic_file_delete);
} }
ENDLIBRARY(pic);
} }

View File

@ -730,12 +730,10 @@ pic_macro_er_macro_transformer(pic_state *pic)
void void
pic_init_macro(pic_state *pic) pic_init_macro(pic_state *pic)
{ {
DEFLIBRARY(pic, "(picrin macro)") pic_deflibrary ("(picrin macro)") {
{
pic_defun(pic, "make-syntactic-closure", pic_macro_make_sc); pic_defun(pic, "make-syntactic-closure", pic_macro_make_sc);
pic_defun(pic, "identifier?", pic_macro_identifier_p); pic_defun(pic, "identifier?", pic_macro_identifier_p);
pic_defun(pic, "identifier=?", pic_macro_identifier_eq_p); pic_defun(pic, "identifier=?", pic_macro_identifier_eq_p);
pic_defun(pic, "er-macro-transformer", pic_macro_er_macro_transformer); pic_defun(pic, "er-macro-transformer", pic_macro_er_macro_transformer);
} }
ENDLIBRARY(pic);
} }

View File

@ -745,8 +745,7 @@ pic_init_number(pic_state *pic)
pic_defun(pic, "exact", pic_number_exact); pic_defun(pic, "exact", pic_number_exact);
pic_gc_arena_restore(pic, ai); pic_gc_arena_restore(pic, ai);
DEFLIBRARY(pic, "(scheme inexact)") pic_deflibrary ("(scheme inexact)") {
{
pic_defun(pic, "finite?", pic_number_finite_p); pic_defun(pic, "finite?", pic_number_finite_p);
pic_defun(pic, "infinite?", pic_number_infinite_p); pic_defun(pic, "infinite?", pic_number_infinite_p);
pic_defun(pic, "nan?", pic_number_nan_p); pic_defun(pic, "nan?", pic_number_nan_p);
@ -762,5 +761,4 @@ pic_init_number(pic_state *pic)
pic_defun(pic, "sqrt", pic_number_sqrt); pic_defun(pic, "sqrt", pic_number_sqrt);
} }
ENDLIBRARY(pic);
} }

View File

@ -126,13 +126,11 @@ pic_system_getenvs(pic_state *pic)
void void
pic_init_system(pic_state *pic) pic_init_system(pic_state *pic)
{ {
DEFLIBRARY(pic, "(scheme process-context)") pic_deflibrary ("(scheme process-context)") {
{
pic_defun(pic, "command-line", pic_system_cmdline); pic_defun(pic, "command-line", pic_system_cmdline);
pic_defun(pic, "exit", pic_system_exit); pic_defun(pic, "exit", pic_system_exit);
pic_defun(pic, "emergency-exit", pic_system_emergency_exit); pic_defun(pic, "emergency-exit", pic_system_emergency_exit);
pic_defun(pic, "get-environment-variable", pic_system_getenv); pic_defun(pic, "get-environment-variable", pic_system_getenv);
pic_defun(pic, "get-environment-variables", pic_system_getenvs); pic_defun(pic, "get-environment-variables", pic_system_getenvs);
} }
ENDLIBRARY(pic);
} }

View File

@ -41,11 +41,9 @@ pic_jiffies_per_second(pic_state *pic)
void void
pic_init_time(pic_state *pic) pic_init_time(pic_state *pic)
{ {
DEFLIBRARY(pic, "(scheme time)") pic_deflibrary ("(scheme time)") {
{
pic_defun(pic, "current-second", pic_current_second); pic_defun(pic, "current-second", pic_current_second);
pic_defun(pic, "current-jiffy", pic_current_jiffy); pic_defun(pic, "current-jiffy", pic_current_jiffy);
pic_defun(pic, "jiffies-per-second", pic_jiffies_per_second); pic_defun(pic, "jiffies-per-second", pic_jiffies_per_second);
} }
ENDLIBRARY(pic);
} }

View File

@ -173,12 +173,10 @@ pic_var_parameter_converter(pic_state *pic)
void void
pic_init_var(pic_state *pic) pic_init_var(pic_state *pic)
{ {
DEFLIBRARY(pic, "(picrin parameter)") pic_deflibrary ("(picrin parameter)") {
{
pic_defun(pic, "make-parameter", pic_var_make_parameter); pic_defun(pic, "make-parameter", pic_var_make_parameter);
pic_defun(pic, "parameter-ref", pic_var_parameter_ref); pic_defun(pic, "parameter-ref", pic_var_parameter_ref);
pic_defun(pic, "parameter-set!", pic_var_parameter_set); /* no convert */ pic_defun(pic, "parameter-set!", pic_var_parameter_set); /* no convert */
pic_defun(pic, "parameter-converter", pic_var_parameter_converter); pic_defun(pic, "parameter-converter", pic_var_parameter_converter);
} }
ENDLIBRARY(pic);
} }

View File

@ -174,9 +174,7 @@ pic_port_write_simple(pic_state *pic)
void void
pic_init_write(pic_state *pic) pic_init_write(pic_state *pic)
{ {
DEFLIBRARY(pic, "(scheme write)") pic_deflibrary ("(scheme write)") {
{
pic_defun(pic, "write-simple", pic_port_write_simple); pic_defun(pic, "write-simple", pic_port_write_simple);
} }
ENDLIBRARY(pic);
} }