diff --git a/libguile/variable.c b/libguile/variable.c index 4037e51be..9f542eda0 100644 --- a/libguile/variable.c +++ b/libguile/variable.c @@ -52,24 +52,17 @@ #include "libguile/validate.h" #include "libguile/variable.h" -scm_t_bits scm_tc16_variable; -static int -variable_print (SCM exp, SCM port, scm_print_state *pstate) +void +scm_i_variable_print (SCM exp, SCM port, scm_print_state *pstate) { scm_puts ("#', port); - return 1; } -static SCM -variable_equalp (SCM var1, SCM var2) -{ - return scm_equal_p (SCM_VARIABLE_REF (var1), SCM_VARIABLE_REF (var2)); -} #if SCM_ENABLE_VCELLS @@ -80,9 +73,24 @@ static SCM make_variable (SCM init) { #if !SCM_ENABLE_VCELLS - SCM_RETURN_NEWSMOB (scm_tc16_variable, SCM_UNPACK (init)); + { + SCM z; + SCM_NEWCELL (z); + SCM_SET_CELL_WORD_1 (z, SCM_UNPACK (init)); + SCM_SET_CELL_TYPE (z, scm_tc7_variable); + scm_remember_upto_here_1 (init); + return z; + } #else - SCM_RETURN_NEWSMOB (scm_tc16_variable, scm_cons (sym_huh, init)); + { + SCM z; + SCM cell = scm_cons (sym_huh, init); + SCM_NEWCELL (z); + SCM_SET_CELL_WORD_1 (z, SCM_UNPACK (cell)); + SCM_SET_CELL_TYPE (z, scm_tc7_variable); + scm_remember_upto_here_1 (cell); + return z; + } #endif } @@ -192,11 +200,6 @@ SCM_DEFINE (scm_builtin_variable, "builtin-variable", 1, 0, 0, void scm_init_variable () { - scm_tc16_variable = scm_make_smob_type ("variable", 0); - scm_set_smob_mark (scm_tc16_variable, scm_markcdr); - scm_set_smob_print (scm_tc16_variable, variable_print); - scm_set_smob_equalp (scm_tc16_variable, variable_equalp); - #ifndef SCM_MAGIC_SNARFER #include "libguile/variable.x" #endif diff --git a/libguile/variable.h b/libguile/variable.h index 014fc821f..577f1f820 100644 --- a/libguile/variable.h +++ b/libguile/variable.h @@ -52,9 +52,7 @@ /* Variables */ -extern scm_t_bits scm_tc16_variable; - -#define SCM_VARIABLEP(X) SCM_SMOB_PREDICATE (scm_tc16_variable, X) +#define SCM_VARIABLEP(X) (SCM_NIMP(X) && SCM_TYP7(X) == scm_tc7_variable) #if !SCM_ENABLE_VCELLS #define SCM_VARIABLE_REF(V) SCM_CELL_OBJECT_1(V) @@ -83,6 +81,8 @@ extern SCM scm_variable_set_name_hint (SCM var, SCM hint); extern SCM scm_builtin_variable (SCM name); #endif +extern void scm_i_variable_print (SCM var, SCM port, scm_print_state *pstate); + extern void scm_init_variable (void); #endif /* SCM_VARIABLE_H */