Publish the maximum number of SMOB types as `SCM_I_MAX_SMOB_TYPE_COUNT'.
authorLudovic Courtès <ludo@gnu.org>
Sun, 18 Jan 2009 15:42:17 +0000 (16:42 +0100)
committerLudovic Courtès <ludo@gnu.org>
Sun, 18 Jan 2009 15:42:17 +0000 (16:42 +0100)
* libguile/goops.c (create_smob_classes): Refer to
  `SCM_I_MAX_SMOB_TYPE_COUNT' rather than 255 (which is wrong) or 256.

* libguile/smob.c (MAX_SMOB_COUNT): Alias for `SCM_I_MAX_SMOB_TYPE_COUNT'.

* libguile/smob.h (SCM_I_MAX_SMOB_TYPE_COUNT): New macro.

libguile/goops.c
libguile/smob.c
libguile/smob.h

index 1bd56a9..e373a7c 100644 (file)
@@ -2697,8 +2697,8 @@ create_smob_classes (void)
 {
   long i;
 
-  scm_smob_class = (SCM *) scm_malloc (255 * sizeof (SCM));
-  for (i = 0; i < 255; ++i)
+  scm_smob_class = scm_malloc (SCM_I_MAX_SMOB_TYPE_COUNT * sizeof (SCM));
+  for (i = 0; i < SCM_I_MAX_SMOB_TYPE_COUNT; ++i)
     scm_smob_class[i] = 0;
 
   scm_smob_class[SCM_TC2SMOBNUM (scm_tc16_keyword)] = scm_class_keyword;
index 0ad4a35..ddff2a0 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2003, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2003, 2004, 2006, 2009 Free Software Foundation, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -49,7 +49,8 @@
  * tags for smobjects (if you know a tag you can get an index and conversely).
  */
 
-#define MAX_SMOB_COUNT 256
+#define MAX_SMOB_COUNT SCM_I_MAX_SMOB_TYPE_COUNT
+
 long scm_numsmob;
 scm_smob_descriptor scm_smobs[MAX_SMOB_COUNT];
 
index 2bf508e..6f50336 100644 (file)
@@ -3,7 +3,7 @@
 #ifndef SCM_SMOB_H
 #define SCM_SMOB_H
 
-/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2004, 2006, 2009 Free Software Foundation, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -152,6 +152,9 @@ while (0)
 #define SCM_SMOB_APPLY_2(x, a1, a2)    (SCM_SMOB_DESCRIPTOR (x).apply_2 (x, (a1), (a2)))
 #define SCM_SMOB_APPLY_3(x, a1, a2, rst)       (SCM_SMOB_DESCRIPTOR (x).apply_3 (x, (a1), (a2), (rst)))
 
+/* Maximum number of SMOB types.  */
+#define SCM_I_MAX_SMOB_TYPE_COUNT  256
+
 SCM_API long scm_numsmob;
 SCM_API scm_smob_descriptor scm_smobs[];