diff --git a/extlib/benz/bool.c b/extlib/benz/bool.c index 4315c3b1..558442d5 100644 --- a/extlib/benz/bool.c +++ b/extlib/benz/bool.c @@ -186,13 +186,11 @@ pic_bool_boolean_eq_p(pic_state *pic) void pic_init_bool(pic_state *pic) { - void pic_defun_vm(pic_state *, const char *, pic_sym *, pic_func_t); - pic_defun(pic, "eq?", pic_bool_eq_p); pic_defun(pic, "eqv?", pic_bool_eqv_p); pic_defun(pic, "equal?", pic_bool_equal_p); - pic_defun_vm(pic, "not", pic->uNOT, pic_bool_not); + pic_defun(pic, "not", pic_bool_not); pic_defun(pic, "boolean?", pic_bool_boolean_p); pic_defun(pic, "boolean=?", pic_bool_boolean_eq_p); diff --git a/extlib/benz/cont.c b/extlib/benz/cont.c index 85394f7d..b5b25b4f 100644 --- a/extlib/benz/cont.c +++ b/extlib/benz/cont.c @@ -304,12 +304,10 @@ pic_cont_call_with_values(pic_state *pic) void pic_init_cont(pic_state *pic) { - void pic_defun_vm(pic_state *, const char *, pic_sym *, pic_func_t); - pic_defun(pic, "call-with-current-continuation", pic_cont_callcc); pic_defun(pic, "call/cc", pic_cont_callcc); pic_defun(pic, "dynamic-wind", pic_cont_dynamic_wind); - pic_defun_vm(pic, "values", pic->uVALUES, pic_cont_values); - pic_defun_vm(pic, "call-with-values", pic->uCALL_WITH_VALUES, pic_cont_call_with_values); + pic_defun(pic, "values", pic_cont_values); + pic_defun(pic, "call-with-values", pic_cont_call_with_values); } diff --git a/extlib/benz/number.c b/extlib/benz/number.c index 52eed9b3..e0cd1181 100644 --- a/extlib/benz/number.c +++ b/extlib/benz/number.c @@ -801,8 +801,6 @@ pic_number_sqrt(pic_state *pic) void pic_init_number(pic_state *pic) { - void pic_defun_vm(pic_state *, const char *, pic_sym *, pic_func_t); - size_t ai = pic_gc_arena_preserve(pic); pic_defun(pic, "number?", pic_number_real_p); @@ -816,17 +814,17 @@ pic_init_number(pic_state *pic) pic_defun(pic, "inexact?", pic_number_inexact_p); pic_gc_arena_restore(pic, ai); - pic_defun_vm(pic, "=", pic->uEQ, pic_number_eq); - pic_defun_vm(pic, "<", pic->uLT, pic_number_lt); - pic_defun_vm(pic, ">", pic->uGT, pic_number_gt); - pic_defun_vm(pic, "<=", pic->uLE, pic_number_le); - pic_defun_vm(pic, ">=", pic->uGE, pic_number_ge); + pic_defun(pic, "=", pic_number_eq); + pic_defun(pic, "<", pic_number_lt); + pic_defun(pic, ">", pic_number_gt); + pic_defun(pic, "<=", pic_number_le); + pic_defun(pic, ">=", pic_number_ge); pic_gc_arena_restore(pic, ai); - pic_defun_vm(pic, "+", pic->uADD, pic_number_add); - pic_defun_vm(pic, "-", pic->uSUB, pic_number_sub); - pic_defun_vm(pic, "*", pic->uMUL, pic_number_mul); - pic_defun_vm(pic, "/", pic->uDIV, pic_number_div); + pic_defun(pic, "+", pic_number_add); + pic_defun(pic, "-", pic_number_sub); + pic_defun(pic, "*", pic_number_mul); + pic_defun(pic, "/", pic_number_div); pic_gc_arena_restore(pic, ai); pic_defun(pic, "abs", pic_number_abs); diff --git a/extlib/benz/pair.c b/extlib/benz/pair.c index 91ecf3eb..806c569b 100644 --- a/extlib/benz/pair.c +++ b/extlib/benz/pair.c @@ -760,13 +760,11 @@ pic_pair_assoc(pic_state *pic) void pic_init_pair(pic_state *pic) { - void pic_defun_vm(pic_state *, const char *, pic_sym *, pic_func_t); - - pic_defun_vm(pic, "pair?", pic->uPAIRP, pic_pair_pair_p); - pic_defun_vm(pic, "cons", pic->uCONS, pic_pair_cons); - pic_defun_vm(pic, "car", pic->uCAR, pic_pair_car); - pic_defun_vm(pic, "cdr", pic->uCDR, pic_pair_cdr); - pic_defun_vm(pic, "null?", pic->uNILP, pic_pair_null_p); + pic_defun(pic, "pair?", pic_pair_pair_p); + pic_defun(pic, "cons", pic_pair_cons); + pic_defun(pic, "car", pic_pair_car); + pic_defun(pic, "cdr", pic_pair_cdr); + pic_defun(pic, "null?", pic_pair_null_p); pic_defun(pic, "set-car!", pic_pair_set_car); pic_defun(pic, "set-cdr!", pic_pair_set_cdr); diff --git a/extlib/benz/state.c b/extlib/benz/state.c index 51788c6f..ed2751bf 100644 --- a/extlib/benz/state.c +++ b/extlib/benz/state.c @@ -115,6 +115,9 @@ pic_features(pic_state *pic) #define define_builtin_syntax(uid, name) \ pic_define_syntactic_keyword_(pic, pic->lib->env, pic_intern_cstr(pic, name), uid) +#define VM(uid, name) \ + pic_define_syntactic_keyword_(pic, pic->lib->env, pic_intern_cstr(pic, name), uid) + static void pic_init_core(pic_state *pic) { @@ -135,6 +138,21 @@ pic_init_core(pic_state *pic) pic_defun(pic, "features", pic_features); + VM(pic->uCONS, "cons"); + VM(pic->uCAR, "car"); + VM(pic->uCDR, "cdr"); + VM(pic->uNILP, "null?"); + VM(pic->uSYMBOLP, "symbol?"); + VM(pic->uPAIRP, "pair?"); + VM(pic->uNOT, "not"); + VM(pic->uADD, "+"); + VM(pic->uSUB, "-"); + VM(pic->uMUL, "*"); + VM(pic->uDIV, "/"); + VM(pic->uEQ, "="); + VM(pic->uLT, "<"); + VM(pic->uLE, "<="); + pic_init_undef(pic); DONE; pic_init_bool(pic); DONE; pic_init_pair(pic); DONE; diff --git a/extlib/benz/symbol.c b/extlib/benz/symbol.c index b31f7962..ba5fb47c 100644 --- a/extlib/benz/symbol.c +++ b/extlib/benz/symbol.c @@ -99,9 +99,7 @@ pic_symbol_string_to_symbol(pic_state *pic) void pic_init_symbol(pic_state *pic) { - void pic_defun_vm(pic_state *, const char *, pic_sym *, pic_func_t); - - pic_defun_vm(pic, "symbol?", pic->uSYMBOLP, pic_symbol_symbol_p); + pic_defun(pic, "symbol?", pic_symbol_symbol_p); pic_defun(pic, "symbol->string", pic_symbol_symbol_to_string); pic_defun(pic, "string->symbol", pic_symbol_string_to_symbol); diff --git a/extlib/benz/vm.c b/extlib/benz/vm.c index d1cffea1..6720987e 100644 --- a/extlib/benz/vm.c +++ b/extlib/benz/vm.c @@ -1134,23 +1134,6 @@ pic_define_syntactic_keyword(pic_state *pic, struct pic_env *env, pic_sym *sym, } } -void -pic_defun_vm(pic_state *pic, const char *name, pic_sym *uid, pic_func_t func) -{ - struct pic_proc *proc; - pic_sym *sym; - - proc = pic_make_proc(pic, func); - - sym = pic_intern_cstr(pic, name); - - pic_put_variable(pic, pic->lib->env, pic_obj_value(sym), uid); - - pic_dict_set(pic, pic->globals, uid, pic_obj_value(proc)); - - pic_export(pic, sym); -} - void pic_define_(pic_state *pic, const char *name, pic_value val) { @@ -1161,7 +1144,9 @@ pic_define_(pic_state *pic, const char *name, pic_value val) if ((uid = pic_find_variable(pic, pic->lib->env, pic_obj_value(sym))) == NULL) { uid = pic_add_variable(pic, pic->lib->env, pic_obj_value(sym)); } else { - pic_warnf(pic, "redefining global"); + if (pic_dict_has(pic, pic->globals, uid)) { + pic_warnf(pic, "redefining variable: ~s", pic_obj_value(uid)); + } } pic_dict_set(pic, pic->globals, uid, val);