* fluids.c, guardians.c, srcprop.c, threads.c: Added #include
[bpt/guile.git] / libguile / srcprop.c
index 6e35c53..25f08f9 100644 (file)
@@ -1,4 +1,4 @@
-/*     Copyright (C) 1995,1996 Mikael Djurfeldt
+/*     Copyright (C) 1995,1996,1997,1998 Free Software Foundation
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -12,7 +12,8 @@
  * 
  * You should have received a copy of the GNU General Public License
  * along with this software; see the file COPYING.  If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307 USA
  *
  * As a special exception, the Free Software Foundation gives permission
  * for additional uses of the text contained in its release of GUILE.
  * If you do not wish that, delete this exception notice.
  *
  * The author can be reached at djurfeldt@nada.kth.se
- * Mikael Djurfeldt, SANS/NADA KTH, 10044 STOCKHOLM, SWEDEN
- */
+ * Mikael Djurfeldt, SANS/NADA KTH, 10044 STOCKHOLM, SWEDEN */
 \f
 
 #include <stdio.h>
 #include "_scm.h"
 #include "smob.h"
+#include "genio.h"
 #include "alist.h"
 #include "debug.h"
 #include "hashtab.h"
  *
  */
 
+SCM scm_i_filename;
 SCM scm_i_copy;
-static SCM scm_i_breakpoint, scm_i_line, scm_i_column;
-static SCM scm_i_filename;
+SCM scm_i_line;
+SCM scm_i_column;
+SCM scm_i_breakpoint;
 
 long scm_tc16_srcprops;
 static scm_srcprops_chunk *srcprops_chunklist = 0;
@@ -84,7 +87,6 @@ static SCM
 marksrcprops (obj)
      SCM obj;
 {
-  SCM_SETGC8MARK (obj);
   scm_gc_mark (SRCPROPFNAME (obj));
   scm_gc_mark (SRCPROPCOPY (obj));
   return SRCPROPPLIST (obj);
@@ -112,11 +114,11 @@ prinsrcprops (obj, port, pstate)
      scm_print_state *pstate;
 {
   int writingp = SCM_WRITINGP (pstate);
-  scm_gen_puts (scm_regular_string, "#<srcprops ", port);
+  scm_puts ("#<srcprops ", port);
   SCM_SET_WRITINGP (pstate, 1);
   scm_iprin1 (scm_srcprops_to_plist (obj), port, pstate);
   SCM_SET_WRITINGP (pstate, writingp);
-  scm_gen_putc ('>', port);
+  scm_putc ('>', port);
   return 1;
 }
 
@@ -155,12 +157,12 @@ scm_make_srcprops (line, col, filename, copy, plist)
       srcprops_freelist = (scm_srcprops *) &ptr[1];
     }
   SCM_NEWCELL (ans);
-  SCM_CAR (ans) = scm_tc16_srcprops;
+  SCM_SETCAR (ans, scm_tc16_srcprops);
   ptr->pos = SRCPROPMAKPOS (line, col);
   ptr->fname = filename;
   ptr->copy = copy;
   ptr->plist = plist;
-  SCM_CDR (ans) = (SCM) ptr;
+  SCM_SETCDR (ans, (SCM) ptr);
   SCM_ALLOW_INTS;
   return ans;
 }
@@ -188,8 +190,13 @@ scm_source_properties (obj)
      SCM obj;
 {
   SCM p;
+  SCM_ASSERT (SCM_NIMP (obj), obj, SCM_ARG1, s_source_properties);
   if (SCM_MEMOIZEDP (obj))
-    obj = SCM_MEMOEXP (obj);
+    obj = SCM_MEMOIZED_EXP (obj);
+#ifndef SCM_RECKLESS
+  else if (SCM_NCONSP (obj))
+    scm_wrong_type_arg (s_source_properties, 1, obj);
+#endif
   p = scm_hashq_ref (scm_source_whash, obj, (SCM) NULL);
   if (p != (SCM) NULL && SRCPROPSP (p))
     return scm_srcprops_to_plist (p);
@@ -206,8 +213,13 @@ scm_set_source_properties_x (obj, plist)
      SCM plist;
 {
   SCM handle;
+  SCM_ASSERT (SCM_NIMP (obj), obj, SCM_ARG1, s_set_source_properties_x);
   if (SCM_MEMOIZEDP (obj))
-    obj = SCM_MEMOEXP (obj);
+    obj = SCM_MEMOIZED_EXP (obj);
+#ifndef SCM_RECKLESS
+  else if (SCM_NCONSP (obj))
+    scm_wrong_type_arg (s_set_source_properties_x, 1, obj);
+#endif
   handle = scm_hashq_create_handle_x (scm_source_whash, obj, plist);
   SCM_SETCDR (handle, plist);
   return plist;
@@ -221,8 +233,13 @@ scm_source_property (obj, key)
      SCM key;
 {
   SCM p;
+  SCM_ASSERT (SCM_NIMP (obj), obj, SCM_ARG1, s_source_property);
   if (SCM_MEMOIZEDP (obj))
-    obj = SCM_MEMOEXP (obj);
+    obj = SCM_MEMOIZED_EXP (obj);
+#ifndef SCM_RECKLESS
+  else if (SCM_NCONSP (obj))
+    scm_wrong_type_arg (s_source_property, 1, obj);
+#endif
   p = scm_hashq_ref (scm_source_whash, obj, SCM_EOL);
   if (SCM_IMP (p) || !SRCPROPSP (p))
     goto plist;
@@ -251,8 +268,13 @@ scm_set_source_property_x (obj, key, datum)
 {
   scm_whash_handle h;
   SCM p;
+  SCM_ASSERT (SCM_NIMP (obj), obj, SCM_ARG1, s_set_source_property_x);
   if (SCM_MEMOIZEDP (obj))
-    obj = SCM_MEMOEXP (obj);
+    obj = SCM_MEMOIZED_EXP (obj);
+#ifndef SCM_RECKLESS
+  else if (SCM_NCONSP (obj))
+    scm_wrong_type_arg (s_set_source_property_x, 1, obj);
+#endif
   h = scm_whash_get_handle (scm_source_whash, obj);
   if (SCM_WHASHFOUNDP (h))
     p = SCM_WHASHREF (scm_source_whash, h);
@@ -262,33 +284,47 @@ scm_set_source_property_x (obj, key, datum)
       p = SCM_EOL;
     }
   if (scm_i_breakpoint == key)
-    if (SCM_FALSEP (datum))
-      CLEARSRCPROPBRK (SCM_NIMP (p) && SRCPROPSP (p)
+    {
+      if (SCM_FALSEP (datum))
+       CLEARSRCPROPBRK (SCM_NIMP (p) && SRCPROPSP (p)
+                        ? p
+                        : SCM_WHASHSET (scm_source_whash, h,
+                                        scm_make_srcprops (0,
+                                                           0,
+                                                           SCM_UNDEFINED,
+                                                           SCM_UNDEFINED,
+                                                           p)));
+      else
+       SETSRCPROPBRK (SCM_NIMP (p) && SRCPROPSP (p)
                       ? p
                       : SCM_WHASHSET (scm_source_whash, h,
-                                  scm_make_srcprops (0, 0, SCM_UNDEFINED,
-                                                      SCM_UNDEFINED, p)));
-    else
-      SETSRCPROPBRK (SCM_NIMP (p) && SRCPROPSP (p)
-                    ? p
-                    : SCM_WHASHSET (scm_source_whash, h,
-                                scm_make_srcprops (0, 0, SCM_UNDEFINED,
-                                                    SCM_UNDEFINED, p)));
+                                      scm_make_srcprops (0,
+                                                         0,
+                                                         SCM_UNDEFINED,
+                                                         SCM_UNDEFINED,
+                                                         p)));
+    }
   else if (scm_i_line == key)
     {
+      SCM_ASSERT (SCM_INUMP (datum),
+                 datum, SCM_ARG3, s_set_source_property_x);
       if (SCM_NIMP (p) && SRCPROPSP (p))
-       SETSRCPROPLINE (p, datum);
+       SETSRCPROPLINE (p, SCM_INUM (datum));
       else
        SCM_WHASHSET (scm_source_whash, h,
-                 scm_make_srcprops (datum, 0, SCM_UNDEFINED, SCM_UNDEFINED, p));
+                     scm_make_srcprops (SCM_INUM (datum), 0,
+                                        SCM_UNDEFINED, SCM_UNDEFINED, p));
     }
   else if (scm_i_column == key)
     {
+      SCM_ASSERT (SCM_INUMP (datum),
+                 datum, SCM_ARG3, s_set_source_property_x);
       if (SCM_NIMP (p) && SRCPROPSP (p))
-       SETSRCPROPCOL (p, datum);
+       SETSRCPROPCOL (p, SCM_INUM (datum));
       else
        SCM_WHASHSET (scm_source_whash, h,
-                 scm_make_srcprops (0, datum, SCM_UNDEFINED, SCM_UNDEFINED, p));
+                     scm_make_srcprops (0, SCM_INUM (datum),
+                                        SCM_UNDEFINED, SCM_UNDEFINED, p));
     }
   else if (scm_i_filename == key)
     {