diff --git a/include/picrin.h b/include/picrin.h index a1c32c1f..c3373a7e 100644 --- a/include/picrin.h +++ b/include/picrin.h @@ -75,15 +75,15 @@ typedef struct { pic_sym sDEFINE, sLAMBDA, sIF, sBEGIN, sQUOTE, sSETBANG; pic_sym sQUASIQUOTE, sUNQUOTE, sUNQUOTE_SPLICING; - pic_sym sDEFINE_SYNTAX; - pic_sym sDEFINE_LIBRARY, sIMPORT, sEXPORT; + pic_sym sDEFINE_SYNTAX, sIMPORT, sEXPORT; + pic_sym sDEFINE_LIBRARY, sIN_LIBRARY; pic_sym sCONS, sCAR, sCDR, sNILP; pic_sym sADD, sSUB, sMUL, sDIV, sMINUS; pic_sym sEQ, sLT, sLE, sGT, sGE, sNOT; pic_sym rDEFINE, rLAMBDA, rIF, rBEGIN, rQUOTE, rSETBANG; - pic_sym rDEFINE_SYNTAX; - pic_sym rDEFINE_LIBRARY, rIMPORT, rEXPORT; + pic_sym rDEFINE_SYNTAX, rIMPORT, rEXPORT; + pic_sym rDEFINE_LIBRARY, rIN_LIBRARY; xhash syms; /* name to symbol */ xhash sym_names; /* symbol to name */ diff --git a/src/lib.c b/src/lib.c index b45bb71a..45351083 100644 --- a/src/lib.c +++ b/src/lib.c @@ -249,6 +249,18 @@ pic_lib_define_library(pic_state *pic) return pic_none_value(); } +static pic_value +pic_lib_in_library(pic_state *pic) +{ + pic_value spec; + + pic_get_args(pic, "o", &spec); + + pic_in_library(pic, spec); + + return pic_none_value(); +} + void pic_init_lib(pic_state *pic) { @@ -257,4 +269,5 @@ pic_init_lib(pic_state *pic) pic_defmacro(pic, pic->sIMPORT, pic->rIMPORT, pic_lib_import); pic_defmacro(pic, pic->sEXPORT, pic->rEXPORT, pic_lib_export); pic_defmacro(pic, pic->sDEFINE_LIBRARY, pic->rDEFINE_LIBRARY, pic_lib_define_library); + pic_defmacro(pic, pic->sIN_LIBRARY, pic->rIN_LIBRARY, pic_lib_in_library); } diff --git a/src/macro.c b/src/macro.c index a95bf66e..e9c9b64b 100644 --- a/src/macro.c +++ b/src/macro.c @@ -364,6 +364,7 @@ pic_null_syntactic_environment(pic_state *pic) pic_define_syntactic_keyword(pic, senv, pic->sDEFINE_LIBRARY, pic->rDEFINE_LIBRARY); pic_define_syntactic_keyword(pic, senv, pic->sIMPORT, pic->rIMPORT); pic_define_syntactic_keyword(pic, senv, pic->sEXPORT, pic->rEXPORT); + pic_define_syntactic_keyword(pic, senv, pic->sIN_LIBRARY, pic->rIN_LIBRARY); return senv; } diff --git a/src/state.c b/src/state.c index 6cd6c139..3402ffb1 100644 --- a/src/state.c +++ b/src/state.c @@ -92,9 +92,10 @@ pic_open(int argc, char *argv[], char **envp) register_core_symbol(pic, sUNQUOTE, "unquote"); register_core_symbol(pic, sUNQUOTE_SPLICING, "unquote-splicing"); register_core_symbol(pic, sDEFINE_SYNTAX, "define-syntax"); - register_core_symbol(pic, sDEFINE_LIBRARY, "define-library"); register_core_symbol(pic, sIMPORT, "import"); register_core_symbol(pic, sEXPORT, "export"); + register_core_symbol(pic, sDEFINE_LIBRARY, "define-library"); + register_core_symbol(pic, sIN_LIBRARY, "in-library"); register_core_symbol(pic, sCONS, "cons"); register_core_symbol(pic, sCAR, "car"); register_core_symbol(pic, sCDR, "cdr"); @@ -124,9 +125,10 @@ pic_open(int argc, char *argv[], char **envp) register_renamed_symbol(pic, rSETBANG, "set!"); register_renamed_symbol(pic, rQUOTE, "quote"); register_renamed_symbol(pic, rDEFINE_SYNTAX, "define-syntax"); - register_renamed_symbol(pic, rDEFINE_LIBRARY, "define-library"); register_renamed_symbol(pic, rIMPORT, "import"); register_renamed_symbol(pic, rEXPORT, "export"); + register_renamed_symbol(pic, rDEFINE_LIBRARY, "define-library"); + register_renamed_symbol(pic, rIN_LIBRARY, "in-library"); pic_gc_arena_restore(pic, ai); /* root block */