diff options
author | Ludovic Courtès <ludo@gnu.org> | 2009-01-18 20:21:44 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2009-01-18 20:21:44 +0100 |
commit | 63385df2fdc2f9bc70804383f071f2fb74743a86 (patch) | |
tree | 90226f6c09f8c5fc0dba2bbeca65b0fbd3af218f | |
parent | 0953b549464e5bf1433e7f0b8a49ac4b464c3c11 (diff) | |
download | guile-63385df2fdc2f9bc70804383f071f2fb74743a86.tar.gz |
GOOPS: Statically allocate the PORT class array.
* libguile/goops.c (scm_port_class): Statically allocate it.
(create_port_classes): Don't use `scm_calloc ()'.
* libguile/goops.h (scm_port_class): Update declaration.
* libguile/ports.c (scm_make_port_type): When checking whether
GOOPS is initialized, check whether the first element of
SCM_PORT_CLASS is non-zero.
-rw-r--r-- | libguile/goops.c | 12 | ||||
-rw-r--r-- | libguile/goops.h | 2 | ||||
-rw-r--r-- | libguile/ports.c | 2 |
3 files changed, 8 insertions, 8 deletions
diff --git a/libguile/goops.c b/libguile/goops.c index 1c61d10ae..9ac9e9afa 100644 --- a/libguile/goops.c +++ b/libguile/goops.c @@ -152,7 +152,12 @@ SCM scm_class_protected_opaque, scm_class_protected_read_only; SCM scm_class_scm; SCM scm_class_int, scm_class_float, scm_class_double; -SCM *scm_port_class = 0; +/* Port classes. Allocate 3 times the maximum number of port types so that + input ports, output ports, and in/out ports can be stored at different + offsets. See `SCM_IN_PCLASS_INDEX' et al. */ +SCM scm_port_class[3 * SCM_I_MAX_PORT_TYPE_COUNT]; + +/* SMOB classes. */ SCM scm_smob_class[SCM_I_MAX_SMOB_TYPE_COUNT]; SCM scm_no_applicable_method; @@ -2741,11 +2746,6 @@ create_port_classes (void) { long i; - /* Allocate 3 times the maximum number of port types so that input ports, - output ports, and in/out ports can be stored at different offsets. See - `SCM_IN_PCLASS_INDEX' et al. */ - scm_port_class = scm_calloc (3 * SCM_I_MAX_PORT_TYPE_COUNT * sizeof (SCM)); - for (i = 0; i < scm_numptob; ++i) scm_make_port_classes (i, SCM_PTOBNAME (i)); } diff --git a/libguile/goops.h b/libguile/goops.h index 545dac3d3..0dc0cd238 100644 --- a/libguile/goops.h +++ b/libguile/goops.h @@ -168,7 +168,7 @@ SCM_API SCM scm_class_complex; SCM_API SCM scm_class_integer; SCM_API SCM scm_class_fraction; SCM_API SCM scm_class_unknown; -SCM_API SCM *scm_port_class; +SCM_API SCM scm_port_class[]; SCM_API SCM scm_smob_class[]; SCM_API SCM scm_class_top; SCM_API SCM scm_class_object; diff --git a/libguile/ports.c b/libguile/ports.c index c961ce3ae..454b51085 100644 --- a/libguile/ports.c +++ b/libguile/ports.c @@ -172,7 +172,7 @@ scm_make_port_type (char *name, scm_memory_error ("scm_make_port_type"); } /* Make a class object if Goops is present */ - if (scm_port_class) + if (SCM_UNPACK (scm_port_class[0]) != 0) scm_make_port_classes (scm_numptob - 1, SCM_PTOBNAME (scm_numptob - 1)); return scm_tc7_port + (scm_numptob - 1) * 256; } |