diff options
author | Andy Wingo <wingo@pobox.com> | 2018-06-17 22:32:08 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2018-06-17 22:32:08 +0200 |
commit | bdd66fdd2487342f30b82025948746035f2d3653 (patch) | |
tree | dd66e950cffa19c6f2eb56fb7f66d8cd1ac5bd58 /libguile/numbers.h | |
parent | d10c3aa3cd2cbe71a9132530613f0ae42121b9db (diff) | |
download | guile-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.h | 70 |
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) + |