Fixed printing of weak vectors.
authorLudovic Courtes <ludovic.courtes@laas.fr>
Tue, 2 May 2006 21:30:58 +0000 (21:30 +0000)
committerLudovic Courtès <ludo@gnu.org>
Thu, 4 Sep 2008 22:48:05 +0000 (00:48 +0200)
* libguile/print.c (iprin1): When displaying a weak vector, access
  elements via `scm_c_vector_ref ()', not via the macro.

git-archimport-id: lcourtes@laas.fr--2005-libre/guile-core--boehm-gc--1.9--patch-14

libguile/print.c

index d81127d..605a84a 100644 (file)
@@ -625,16 +625,30 @@ iprin1 (SCM exp, SCM port, scm_print_state *pstate)
                last = pstate->length - 1;
                cutp = 1;
              }
-           for (i = 0; i < last; ++i)
+           if (SCM_I_WVECTP (exp))
              {
-               /* CHECK_INTS; */
-               scm_iprin1 (SCM_SIMPLE_VECTOR_REF (exp, i), port, pstate);
-               scm_putc (' ', port);
+               /* Elements of weak vectors may not be accessed via the
+                  `SIMPLE_VECTOR_REF ()' macro.  */
+               for (i = 0; i < last; ++i)
+                 {
+                   scm_iprin1 (scm_c_vector_ref (exp, i),
+                               port, pstate);
+                   scm_putc (' ', port);
+                 }
+             }
+           else
+             {
+               for (i = 0; i < last; ++i)
+                 {
+                   scm_iprin1 (SCM_SIMPLE_VECTOR_REF (exp, i), port, pstate);
+                   scm_putc (' ', port);
+                 }
              }
+
            if (i == last)
              {
                /* CHECK_INTS; */
-               scm_iprin1 (SCM_SIMPLE_VECTOR_REF (exp, i), port, pstate);
+               scm_iprin1 (scm_c_vector_ref (exp, i), port, pstate);
              }
            if (cutp)
              scm_puts (" ...", port);