summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2009-01-18 20:21:44 +0100
committerLudovic Courtès <ludo@gnu.org>2009-02-03 00:03:09 +0100
commit6290d3f10927f887102a164ccb1a7291cc62288d (patch)
treebc43eeb9b5e683fa13a660d36dfd7f33179948fa
parent5bb2d903b9e54fdd5858a16ba11fa91a9dc0c692 (diff)
downloadguile-6290d3f10927f887102a164ccb1a7291cc62288d.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.c12
-rw-r--r--libguile/goops.h2
-rw-r--r--libguile/ports.c2
3 files changed, 8 insertions, 8 deletions
diff --git a/libguile/goops.c b/libguile/goops.c
index 831ab819e..827dbfb33 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;
@@ -2738,11 +2743,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 dc412a445..1f49708c8 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;
}