X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/0f2d19dd46f83f41177f61d585732b32a866d613..44493941d8609c827e3dd21b2cae4d2a248271fa:/libguile/variable.c diff --git a/libguile/variable.c b/libguile/variable.c index 984de26db..f87887f1f 100644 --- a/libguile/variable.c +++ b/libguile/variable.c @@ -42,31 +42,31 @@ #include #include "_scm.h" +#include "eq.h" +#include "genio.h" +#include "smob.h" +#include "variable.h" -#ifdef __STDC__ -static scm_sizet -free_var (SCM obj) -#else + +static scm_sizet free_var SCM_P ((SCM obj)); + static scm_sizet free_var (obj) SCM obj; -#endif { return 0; } -#ifdef __STDC__ -static int -prin_var (SCM exp, SCM port, int writing) -#else + +static int prin_var SCM_P ((SCM exp, SCM port, scm_print_state *pstate)); + static int -prin_var (exp, port, writing) +prin_var (exp, port, pstate) SCM exp; SCM port; - int writing; -#endif + scm_print_state *pstate; { scm_gen_puts (scm_regular_string, "#', port); return 1; } -#ifdef __STDC__ -static SCM -scm_markvar (SCM ptr) -#else + +static SCM scm_markvar SCM_P ((SCM ptr)); + static SCM scm_markvar (ptr) SCM ptr; -#endif { if (SCM_GC8MARKP (ptr)) return SCM_BOOL_F; @@ -100,84 +98,84 @@ scm_markvar (ptr) return SCM_CDR (ptr); } +static SCM var_equal SCM_P ((SCM var1, SCM var2)); + +static SCM +var_equal (var1, var2) + SCM var1; + SCM var2; +{ + return scm_equal_p (SCM_CDR (var1), SCM_CDR (var2)); +} + int scm_tc16_variable; -static scm_smobfuns variable_smob = {scm_markvar, free_var, prin_var, 0}; +static scm_smobfuns variable_smob = {scm_markvar, free_var, prin_var, var_equal}; -static SCM variable_sym; +static SCM anonymous_variable_sym; + + +static SCM make_vcell_variable SCM_P ((SCM vcell)); -#ifdef __STDC__ -static SCM -make_vcell_variable (SCM vcell) -#else static SCM make_vcell_variable (vcell) SCM vcell; -#endif { SCM answer; SCM_NEWCELL(answer); SCM_REDEFER_INTS; - SCM_CAR(answer) = scm_tc16_variable; - SCM_CDR(answer) = vcell; + SCM_SETCAR (answer, scm_tc16_variable); + SCM_SETCDR (answer, vcell); SCM_REALLOW_INTS; return answer; } -SCM_PROC(s_make_variable, "make-variable", 2, 0, 0, scm_make_variable); -#ifdef __STDC__ -SCM -scm_make_variable (SCM init, SCM name_hint) -#else +SCM_PROC(s_make_variable, "make-variable", 1, 1, 0, scm_make_variable); + SCM scm_make_variable (init, name_hint) SCM init; SCM name_hint; -#endif { SCM val_cell; + + if (name_hint == SCM_UNDEFINED) + name_hint = anonymous_variable_sym; + SCM_NEWCELL(val_cell); SCM_DEFER_INTS; - SCM_CAR(val_cell) = name_hint; - SCM_CDR(val_cell) = init; + SCM_SETCAR (val_cell, name_hint); + SCM_SETCDR (val_cell, init); SCM_ALLOW_INTS; return make_vcell_variable (val_cell); } SCM_PROC(s_make_undefined_variable, "make-undefined-variable", 0, 1, 0, scm_make_undefined_variable); -#ifdef __STDC__ -SCM -scm_make_undefined_variable (SCM name_hint) -#else + SCM scm_make_undefined_variable (name_hint) SCM name_hint; -#endif { SCM vcell; if (name_hint == SCM_UNDEFINED) - name_hint = variable_sym; + name_hint = anonymous_variable_sym; SCM_NEWCELL (vcell); SCM_DEFER_INTS; - SCM_CAR (vcell) = name_hint; - SCM_CDR (vcell) = SCM_UNDEFINED; + SCM_SETCAR (vcell, name_hint); + SCM_SETCDR (vcell, SCM_UNDEFINED); SCM_ALLOW_INTS; return make_vcell_variable (vcell); } SCM_PROC(s_variable_p, "variable?", 1, 0, 0, scm_variable_p); -#ifdef __STDC__ -SCM -scm_variable_p (SCM obj) -#else + SCM scm_variable_p (obj) SCM obj; -#endif { return ( (SCM_NIMP(obj) && SCM_VARIABLEP (obj)) ? SCM_BOOL_T @@ -186,14 +184,10 @@ scm_variable_p (obj) SCM_PROC(s_variable_ref, "variable-ref", 1, 0, 0, scm_variable_ref); -#ifdef __STDC__ -SCM -scm_variable_ref (SCM var) -#else + SCM scm_variable_ref (var) SCM var; -#endif { SCM_ASSERT (SCM_NIMP(var) && SCM_VARIABLEP(var), var, SCM_ARG1, s_variable_ref); return SCM_CDR (SCM_CDR (var)); @@ -202,31 +196,23 @@ scm_variable_ref (var) SCM_PROC(s_variable_set_x, "variable-set!", 2, 0, 0, scm_variable_set_x); -#ifdef __STDC__ -SCM -scm_variable_set_x (SCM var, SCM val) -#else + SCM scm_variable_set_x (var, val) SCM var; SCM val; -#endif { SCM_ASSERT (SCM_NIMP(var) && SCM_VARIABLEP (var), var, SCM_ARG1, s_variable_set_x); - SCM_CDR (SCM_CDR (var)) = val; + SCM_SETCDR (SCM_CDR (var), val); return SCM_UNSPECIFIED; } SCM_PROC(s_builtin_variable, "builtin-variable", 1, 0, 0, scm_builtin_variable); -#ifdef __STDC__ -SCM -scm_builtin_variable (SCM name) -#else + SCM scm_builtin_variable (name) SCM name; -#endif { SCM vcell; SCM var_slot; @@ -242,7 +228,7 @@ scm_builtin_variable (name) SCM_DEFER_INTS; if ( SCM_IMP (SCM_CDR (var_slot)) || (SCM_VARVCELL (var_slot) != vcell)) - SCM_CDR (var_slot) = make_vcell_variable (vcell); + SCM_SETCDR (var_slot, make_vcell_variable (vcell)); SCM_ALLOW_INTS; return SCM_CDR (var_slot); @@ -250,14 +236,10 @@ scm_builtin_variable (name) SCM_PROC(s_variable_bound_p, "variable-bound?", 1, 0, 0, scm_variable_bound_p); -#ifdef __STDC__ -SCM -scm_variable_bound_p (SCM var) -#else + SCM scm_variable_bound_p (var) SCM var; -#endif { SCM_ASSERT (SCM_NIMP(var) && SCM_VARIABLEP (var), var, SCM_ARG1, s_variable_bound_p); return (SCM_UNBNDP (SCM_CDR (SCM_VARVCELL (var))) @@ -267,16 +249,12 @@ scm_variable_bound_p (var) -#ifdef __STDC__ -void -scm_init_variable (void) -#else + void scm_init_variable () -#endif { scm_tc16_variable = scm_newsmob (&variable_smob); - variable_sym = SCM_CAR (scm_sysintern ("anonymous-variable", SCM_UNDEFINED)); + anonymous_variable_sym = SCM_CAR (scm_sysintern ("anonymous-variable", SCM_UNDEFINED)); #include "variable.x" }