diff options
author | Ludovic Courtès <ludo@gnu.org> | 2009-01-18 16:53:01 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2009-02-03 00:02:50 +0100 |
commit | 04795a1cb259c20896fb2edb50c58086027281b0 (patch) | |
tree | 21d4d40a7a4148e1e2a8592f6cf5029b23fb4da5 /libguile/smob.c | |
parent | 202271f291971cf14175f5a1a193955f72d43d79 (diff) | |
download | guile-04795a1cb259c20896fb2edb50c58086027281b0.tar.gz |
GOOPS: Statically allocate the SMOB class array.
* libguile/goops.c (scm_smob_class): Statically allocate it.
(create_smob_classes): Don't malloc(3) `scm_smob_class'.
* libguile/goops.h (scm_smob_class): Update declaration.
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): When
checking whether GOOPS is initialized, check whether the first element
of SCM_SMOB_CLASS is non-zero.
Diffstat (limited to 'libguile/smob.c')
-rw-r--r-- | libguile/smob.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/libguile/smob.c b/libguile/smob.c index 2e781ed1e..899197901 100644 --- a/libguile/smob.c +++ b/libguile/smob.c @@ -309,7 +309,7 @@ scm_make_smob_type (char const *name, size_t size) } /* Make a class object if Goops is present. */ - if (scm_smob_class) + if (SCM_UNPACK (scm_smob_class[0]) != 0) scm_smob_class[new_smob] = scm_make_extended_class (name, 0); return scm_tc7_smob + new_smob * 256; @@ -449,8 +449,8 @@ scm_set_smob_apply (scm_t_bits tc, SCM (*apply) (), scm_smobs[SCM_TC2SMOBNUM (tc)].apply_2 = apply_2; scm_smobs[SCM_TC2SMOBNUM (tc)].apply_3 = apply_3; scm_smobs[SCM_TC2SMOBNUM (tc)].gsubr_type = type; - - if (scm_smob_class) + + if (SCM_UNPACK (scm_smob_class[0]) != 0) scm_i_inherit_applicable (scm_smob_class[SCM_TC2SMOBNUM (tc)]); } |