diff options
Diffstat (limited to 'libguile/deprecated.h')
-rw-r--r-- | libguile/deprecated.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/libguile/deprecated.h b/libguile/deprecated.h index 039ec540f..7f71bb4d7 100644 --- a/libguile/deprecated.h +++ b/libguile/deprecated.h @@ -325,6 +325,78 @@ SCM_API SCM scm_gentemp (SCM prefix, SCM obarray); SCM_API SCM SCM_MAKINUM (scm_t_signed_bits val); +/* Users shouldn't know about INUMs. + */ + +#define SCM_VALIDATE_INUM(pos, k) SCM_MAKE_VALIDATE_MSG (pos, k, INUMP, "exact integer") + +#define SCM_VALIDATE_INUM_COPY(pos, k, cvar) \ + do { \ + SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \ + cvar = SCM_INUM (k); \ + } while (0) + +#define SCM_VALIDATE_BIGINT(pos, k) SCM_MAKE_VALIDATE_MSG (pos, k, BIGP, "bignum") + +#define SCM_VALIDATE_INUM_MIN(pos, k, min) \ + do { \ + SCM_ASSERT (SCM_INUMP(k), k, pos, FUNC_NAME); \ + SCM_ASSERT_RANGE (pos, k, (SCM_INUM (k) >= min)); \ + } while (0) + +#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); \ + } while (0) + +#define SCM_VALIDATE_INUM_MIN_DEF_COPY(pos, k, min, default, cvar) \ + do { \ + if (SCM_UNBNDP (k)) \ + k = SCM_I_MAKINUM (default); \ + SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \ + SCM_ASSERT_RANGE (pos, k, (SCM_INUM (k) >= min)); \ + cvar = SCM_INUM (k); \ + } while (0) + +#define SCM_VALIDATE_INUM_DEF(pos, k, default) \ + do { \ + if (SCM_UNBNDP (k)) \ + k = SCM_I_MAKINUM (default); \ + else SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \ + } while (0) + +#define SCM_VALIDATE_INUM_DEF_COPY(pos, k, default, cvar) \ + do { \ + if (SCM_UNBNDP (k)) \ + { \ + k = SCM_I_MAKINUM (default); \ + cvar = default; \ + } \ + else \ + { \ + SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \ + cvar = SCM_INUM (k); \ + } \ + } while (0) + +/* [low, high) */ +#define SCM_VALIDATE_INUM_RANGE(pos, k, low, high) \ + do { SCM_ASSERT(SCM_INUMP(k), k, pos, FUNC_NAME); \ + SCM_ASSERT_RANGE(pos, k, \ + (SCM_INUM (k) >= low && \ + SCM_INUM (k) < high)); \ + } while (0) + +#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); \ + } while (0) + + void scm_i_init_deprecated (void); #endif |