* Some more work to get rid of SCM_LENGTH
[bpt/guile.git] / libguile / validate.h
index bcd7328..4115c82 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: validate.h,v 1.10 2000-05-15 11:47:48 dirk Exp $ */
+/* $Id: validate.h,v 1.18 2000-10-25 11:01:03 dirk Exp $ */
 /*     Copyright (C) 1999, 2000 Free Software Foundation, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
@@ -54,9 +54,6 @@
 #define SCM_SYSERROR_MSG(str, args, val) \
   do { scm_syserror_msg (FUNC_NAME, (str), (args), (val)); } while (0)
 
-#define SCM_COERCE_ROSTRING(pos, scm) \
-  do { scm = scm_coerce_rostring (scm, FUNC_NAME, pos); } while (0)
-
 #define SCM_WTA(pos, scm) \
   do { scm_wta (scm, (char *) pos, FUNC_NAME); } while (0)
 
@@ -83,7 +80,7 @@
   do { scm_out_of_range_pos (FUNC_NAME, arg, SCM_MAKINUM (pos)); } while (0)
 
 #define SCM_ASSERT_RANGE(pos, arg, f) \
-  do { SCM_ASSERT (f, arg, SCM_OUTOFRANGE, FUNC_NAME); } while (0)
+  do { if (!(f)) scm_out_of_range (FUNC_NAME, arg); } while (0)
 
 #define SCM_MUST_MALLOC_TYPE(type) \
   ((type *) scm_must_malloc (sizeof (type), FUNC_NAME))
 
 \f
 
+#define SCM_VALIDATE_REST_ARGUMENT(x) \
+  do { \
+    if (SCM_DEBUG_REST_ARGUMENT) { \
+      if (scm_ilength (x) < 0) { \
+        SCM_MISC_ERROR ("Rest arguments do not form a proper list.", SCM_EOL); \
+      } \
+    } \
+  } while (0)
+
 #define SCM_VALIDATE_NIM(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NIMP)
 
 #define SCM_VALIDATE_BOOL(pos, flag) SCM_MAKE_VALIDATE(pos, flag, BOOLP)
 #define SCM_VALIDATE_BOOL_COPY(pos, flag, cvar) \
   do { \
     SCM_ASSERT (SCM_BOOLP (flag), flag, pos, FUNC_NAME); \
-    cvar = SCM_TRUE_P (flag) ? 1 : 0; \
+    cvar = SCM_EQ_P (flag, SCM_BOOL_T) ? 1 : 0; \
   } while (0)
 
 #define SCM_VALIDATE_CHAR(pos, scm) SCM_MAKE_VALIDATE (pos, scm, CHARP)
 
 #define SCM_VALIDATE_STRING(pos, str) SCM_MAKE_VALIDATE (pos, str, STRINGP)
 
-#define SCM_VALIDATE_STRINGORSUBSTR(pos, str) \
-  do { \
-    SCM_ASSERT (SCM_STRINGP (str) || SCM_SUBSTRP (str), \
-                str, pos, FUNC_NAME); \
-  } while (0)
-
 #define SCM_VALIDATE_STRING_COPY(pos, str, cvar) \
   do { \
     SCM_ASSERT (SCM_STRINGP (str), str, pos, FUNC_NAME); \
-    cvar = SCM_CHARS(str); \
+    cvar = SCM_STRING_CHARS(str); \
   } while (0)
 
 #define SCM_VALIDATE_RWSTRING(pos, str) \
       }                                                \
   } while (0)
 
+#define SCM_VALIDATE_NUMBER_DEF_COPY(pos, number, def, cvar)   \
+  do {                                                         \
+    if (SCM_UNBNDP (number))                                   \
+      cvar = def;                                              \
+    else                                                       \
+      SCM_VALIDATE_NUMBER_COPY(pos, number, cvar);             \
+  } while (0)
+
 #define SCM_VALIDATE_INUM(pos, k) SCM_MAKE_VALIDATE (pos, k, INUMP)
 
 #define SCM_VALIDATE_INUM_COPY(pos, k, cvar) \
 #define SCM_VALIDATE_INUM_MIN_COPY(pos, k, min, cvar) \
   do { \
     SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \
+    SCM_ASSERT_RANGE (pos, k, (SCM_INUM (k) >= min)); \
     cvar = SCM_INUM (k); \
-    SCM_ASSERT_RANGE (pos, k, (cvar >= min)); \
   } while (0)
 
 #define SCM_VALIDATE_INUM_MIN_DEF_COPY(pos, k, min, default, cvar) \
     if (SCM_UNBNDP (k)) \
       k = SCM_MAKINUM (default); \
     SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \
+    SCM_ASSERT_RANGE (pos, k, (SCM_INUM (k) >= min)); \
     cvar = SCM_INUM (k); \
-    SCM_ASSERT_RANGE (pos, k, (cvar >= min)); \
   } while (0)
 
 #define SCM_VALIDATE_INUM_DEF(pos, k, default) \
 #define SCM_VALIDATE_INUM_RANGE_COPY(pos, k, low, high, cvar) \
   do { \
     SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \
+    SCM_ASSERT_RANGE (pos, k, low <= SCM_INUM (k) && SCM_INUM (k) < high); \
     cvar = SCM_INUM (k); \
-    SCM_ASSERT_RANGE (pos, k, cvar >= low && cvar < high); \
   } while (0)
 
 #define SCM_VALIDATE_NULL(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NULLP)
 
 #define SCM_VALIDATE_PROC(pos, proc) \
   do { \
-    SCM_ASSERT (SCM_TRUE_P (scm_procedure_p (proc)), proc, pos, FUNC_NAME); \
+    SCM_ASSERT (SCM_EQ_P (scm_procedure_p (proc), SCM_BOOL_T), proc, pos, FUNC_NAME); \
   } while (0)
 
 #define SCM_VALIDATE_NULLORCONS(pos, env) \
 
 #define SCM_VALIDATE_VECTOR_LEN(pos, v, len) \
   do { \
-    SCM_ASSERT (SCM_VECTORP (v) && len == SCM_LENGTH (v), v, pos, FUNC_NAME); \
+    SCM_ASSERT (SCM_VECTORP (v) && len == SCM_VECTOR_LENGTH (v), v, pos, FUNC_NAME); \
   } while (0)
 
+\f
+
+#if (SCM_DEBUG_DEPRECATED == 0)
+
+#define SCM_VALIDATE_STRINGORSUBSTR SCM_VALIDATE_STRING
+
+#endif  /* SCM_DEBUG_DEPRECATED == 0 */
+
 #endif
 
 /*