* Don't use return value from SCM_SETCDR or SCM_WHASHSET.
authorDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Tue, 18 Jul 2000 16:09:09 +0000 (16:09 +0000)
committerDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Tue, 18 Jul 2000 16:09:09 +0000 (16:09 +0000)
libguile/ChangeLog
libguile/read.c
libguile/srcprop.c

index 880fd96..51aab8b 100644 (file)
@@ -1,3 +1,9 @@
+2000-07-18  Dirk Herrmann  <D.Herrmann@tu-bs.de>
+
+       read.c (scm_lreadrecparen), srcprop.c (scm_set_source_property_x):
+       SCM_SETCDR and SCM_WHASHSET macros don't deliver a return value.
+       Thanks to Han-Wen Nienhuys for the bug report.
+
 2000-07-18  Dirk Herrmann  <D.Herrmann@tu-bs.de>
 
        * root.[ch] (scm_call_catching_errors):  Deprecated.
index 5aa743e..1fa8600 100644 (file)
@@ -666,6 +666,8 @@ scm_lreadrecparen (SCM *tok_buf, SCM port, char *name, SCM *copy)
                           SCM_EOL);
   while (')' != (c = scm_flush_ws (port, name)))
     {
+      SCM new_tail;
+
       scm_ungetc (c, port);
       if (SCM_EQ_P (scm_sym_dot, (tmp = scm_lreadr (tok_buf, port, copy))))
        {
@@ -679,12 +681,17 @@ scm_lreadrecparen (SCM *tok_buf, SCM port, char *name, SCM *copy)
            scm_wta (SCM_UNDEFINED, "missing close paren", "");
          goto exit;
        }
-      tl = SCM_SETCDR (tl, scm_cons (tmp, SCM_EOL));
+
+      new_tail = scm_cons (tmp, SCM_EOL);
+      SCM_SETCDR (tl, new_tail);
+      tl = new_tail;
+
       if (SCM_COPY_SOURCE_P)
-       tl2 = SCM_SETCDR (tl2, scm_cons (SCM_CONSP (tmp)
-                                        ? *copy
-                                        : tmp,
-                                        SCM_EOL));
+       {
+         SCM new_tail2 = scm_cons (SCM_CONSP (tmp) ? *copy : tmp, SCM_EOL);
+         SCM_SETCDR (tl2, new_tail2);
+         tl2 = new_tail2;
+       }
     }
 exit:
   scm_whash_insert (scm_source_whash,
index 7f2271d..0ac089c 100644 (file)
@@ -262,24 +262,22 @@ SCM_DEFINE (scm_set_source_property_x, "set-source-property!", 3, 0, 0,
     }
   if (SCM_EQ_P (scm_sym_breakpoint, key))
     {
-      if (SCM_FALSEP (datum))
-       CLEARSRCPROPBRK (SRCPROPSP (p)
-                        ? p
-                        : SCM_WHASHSET (scm_source_whash, h,
-                                        scm_make_srcprops (0,
-                                                           0,
-                                                           SCM_UNDEFINED,
-                                                           SCM_UNDEFINED,
-                                                           p)));
+      if (SRCPROPSP (p))
+       {
+         if (SCM_FALSEP (datum))
+           CLEARSRCPROPBRK (p);
+         else
+           SETSRCPROPBRK (p);
+       }
       else
-       SETSRCPROPBRK (SRCPROPSP (p)
-                      ? p
-                      : SCM_WHASHSET (scm_source_whash, h,
-                                      scm_make_srcprops (0,
-                                                         0,
-                                                         SCM_UNDEFINED,
-                                                         SCM_UNDEFINED,
-                                                         p)));
+       {
+         SCM sp = scm_make_srcprops (0, 0, SCM_UNDEFINED, SCM_UNDEFINED, p);
+         SCM_WHASHSET (scm_source_whash, h, sp);
+         if (SCM_FALSEP (datum))
+           CLEARSRCPROPBRK (sp);
+         else
+           SETSRCPROPBRK (sp);
+       }
     }
   else if (SCM_EQ_P (scm_sym_line, key))
     {