summaryrefslogtreecommitdiff
path: root/libguile/numbers.h
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-06-17 22:32:08 +0200
committerAndy Wingo <wingo@pobox.com>2018-06-17 22:32:08 +0200
commitbdd66fdd2487342f30b82025948746035f2d3653 (patch)
treedd66e950cffa19c6f2eb56fb7f66d8cd1ac5bd58 /libguile/numbers.h
parentd10c3aa3cd2cbe71a9132530613f0ae42121b9db (diff)
downloadguile-bdd66fdd2487342f30b82025948746035f2d3653.tar.gz
Move more number validators to numbers.h.
* libguile/validate.h: * libguile/numbers.h (SCM_OUT_OF_RANGE, SCM_ASSERT_RANGE) SCM_VALIDATE_REAL, SCM_VALIDATE_NUMBER, SCM_VALIDATE_USHORT_COPY) SCM_VALIDATE_SHORT_COPY, SCM_VALIDATE_UINT_COPY) SCM_VALIDATE_INT_COPY, SCM_VALIDATE_ULONG_COPY) SCM_VALIDATE_LONG_COPY, SCM_VALIDATE_SIZE_COPY) SCM_VALIDATE_FLOAT_COPY, SCM_VALIDATE_DOUBLE_COPY) SCM_VALIDATE_DOUBLE_DEF_COPY): Move here, from validate.h.
Diffstat (limited to 'libguile/numbers.h')
-rw-r--r--libguile/numbers.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/libguile/numbers.h b/libguile/numbers.h
index 8a2b38672..b4b77f8c7 100644
--- a/libguile/numbers.h
+++ b/libguile/numbers.h
@@ -655,6 +655,76 @@ SCM_INTERNAL void scm_init_numbers (void);
#define SCM_NUM2DOUBLE(pos, arg) (scm_to_double (arg))
+#define SCM_OUT_OF_RANGE(pos, arg) \
+ do { scm_out_of_range_pos (FUNC_NAME, arg, scm_from_int (pos)); } while (0)
+
+#define SCM_ASSERT_RANGE(pos, arg, f) \
+ do { if (SCM_UNLIKELY (!(f))) \
+ scm_out_of_range_pos (FUNC_NAME, arg, scm_from_int (pos)); } \
+ while (0)
+
+#define SCM_VALIDATE_REAL(pos, z) SCM_MAKE_VALIDATE_MSG (pos, z, REALP, "real")
+
+#define SCM_VALIDATE_NUMBER(pos, z) SCM_MAKE_VALIDATE_MSG (pos, z, NUMBERP, "number")
+
+#define SCM_VALIDATE_USHORT_COPY(pos, k, cvar) \
+ do { \
+ cvar = SCM_NUM2USHORT (pos, k); \
+ } while (0)
+
+#define SCM_VALIDATE_SHORT_COPY(pos, k, cvar) \
+ do { \
+ cvar = SCM_NUM2SHORT (pos, k); \
+ } while (0)
+
+#define SCM_VALIDATE_UINT_COPY(pos, k, cvar) \
+ do { \
+ cvar = SCM_NUM2UINT (pos, k); \
+ } while (0)
+
+#define SCM_VALIDATE_INT_COPY(pos, k, cvar) \
+ do { \
+ cvar = SCM_NUM2INT (pos, k); \
+ } while (0)
+
+#define SCM_VALIDATE_ULONG_COPY(pos, k, cvar) \
+ do { \
+ cvar = SCM_NUM2ULONG (pos, k); \
+ } while (0)
+
+#define SCM_VALIDATE_LONG_COPY(pos, k, cvar) \
+ do { \
+ cvar = SCM_NUM2LONG (pos, k); \
+ } while (0)
+
+#define SCM_VALIDATE_SIZE_COPY(pos, k, cvar) \
+ do { \
+ cvar = SCM_NUM2SIZE (pos, k); \
+ } while (0)
+
+#define SCM_VALIDATE_FLOAT_COPY(pos, k, cvar) \
+ do { \
+ cvar = SCM_NUM2FLOAT (pos, k); \
+ } while (0)
+
+#define SCM_VALIDATE_DOUBLE_COPY(pos, k, cvar) \
+ do { \
+ cvar = SCM_NUM2DOUBLE (pos, k); \
+ } while (0)
+
+#define SCM_VALIDATE_DOUBLE_DEF_COPY(pos, k, default, cvar) \
+ do { \
+ if (SCM_UNBNDP (k)) \
+ { \
+ k = scm_make_real (default); \
+ cvar = default; \
+ } \
+ else \
+ { \
+ cvar = SCM_NUM2DOUBLE (pos, k); \
+ } \
+ } while (0)
+