summaryrefslogtreecommitdiff
path: root/libguile/guardians.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/guardians.c')
-rw-r--r--libguile/guardians.c25
1 files changed, 4 insertions, 21 deletions
diff --git a/libguile/guardians.c b/libguile/guardians.c
index b2fa0a946..d9cfc129b 100644
--- a/libguile/guardians.c
+++ b/libguile/guardians.c
@@ -116,13 +116,6 @@ g_mark (SCM ptr)
return SCM_BOOL_F;
}
-static scm_sizet
-g_free (SCM ptr)
-{
- scm_must_free ((char *) GUARDIAN (ptr));
- return sizeof (guardian_t);
-}
-
static int
g_print (SCM exp, SCM port, scm_print_state *pstate)
{
@@ -135,13 +128,6 @@ g_print (SCM exp, SCM port, scm_print_state *pstate)
return 1;
}
-static scm_smobfuns g_smob = {
- g_mark,
- g_free,
- g_print,
- 0 /* g_equalp */
-};
-
#define CCLO_G(cclo) (SCM_VELTS (cclo)[1])
static SCM
@@ -168,15 +154,11 @@ scm_make_guardian ()
SCM z1 = scm_cons (SCM_BOOL_F, SCM_BOOL_F);
SCM z2 = scm_cons (SCM_BOOL_F, SCM_BOOL_F);
SCM z;
- SCM_NEWCELL (z);
-
- SCM_DEFER_INTS;
/* A tconc starts out with one tail pair. */
g->live.head = g->live.tail = z1;
g->zombies.head = g->zombies.tail = z2;
- SCM_SETCDR (z, g);
- SCM_SETCAR (z, scm_tc16_guardian);
- SCM_ALLOW_INTS;
+
+ SCM_NEWSMOB (z, scm_tc16_guardian, g);
CCLO_G (cclo) = z;
@@ -277,7 +259,8 @@ scm_get_one_zombie (SCM guardian)
void
scm_init_guardian()
{
- scm_tc16_guardian = scm_newsmob (&g_smob);
+ scm_tc16_guardian = scm_make_smob_type_mfpe ("guardian", sizeof (guardian_t),
+ g_mark, NULL, g_print, NULL);
guard1 = scm_make_subr_opt ("guardian", scm_tc7_subr_2o, guard, 0);
#include "guardians.x"