mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-20 02:30:23 +02:00
* Fix range checks of SCM_VALIDATE* macros.
This commit is contained in:
parent
627df12801
commit
fdf25853e1
2 changed files with 16 additions and 5 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
2000-06-30 Dirk Herrmann <D.Herrmann@tu-bs.de>
|
||||||
|
|
||||||
|
* validate.h (SCM_VALIDATE_INUM_MIN_COPY,
|
||||||
|
SCM_VALIDATE_INUM_MIN_DEF_COPY, SCM_VALIDATE_INUM_RANGE_COPY):
|
||||||
|
Perform all range checks based on the input value. The former way
|
||||||
|
of using the value that is assigned to the target variable fails
|
||||||
|
if the assignment to the target variable itself can change the
|
||||||
|
value because of type conversion.
|
||||||
|
|
||||||
|
(SCM_ASSERT_RANGE): Use scm_out_of_range to signal range errors.
|
||||||
|
|
||||||
2000-06-30 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
|
2000-06-30 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
|
||||||
|
|
||||||
* gc.c (scm_gc_for_newcell): Behave gracefully also if scm_igc
|
* gc.c (scm_gc_for_newcell): Behave gracefully also if scm_igc
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: validate.h,v 1.12 2000-06-05 11:39:46 dirk Exp $ */
|
/* $Id: validate.h,v 1.13 2000-06-30 09:48:25 dirk Exp $ */
|
||||||
/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
do { scm_out_of_range_pos (FUNC_NAME, arg, SCM_MAKINUM (pos)); } while (0)
|
do { scm_out_of_range_pos (FUNC_NAME, arg, SCM_MAKINUM (pos)); } while (0)
|
||||||
|
|
||||||
#define SCM_ASSERT_RANGE(pos, arg, f) \
|
#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) \
|
#define SCM_MUST_MALLOC_TYPE(type) \
|
||||||
((type *) scm_must_malloc (sizeof (type), FUNC_NAME))
|
((type *) scm_must_malloc (sizeof (type), FUNC_NAME))
|
||||||
|
@ -212,8 +212,8 @@
|
||||||
#define SCM_VALIDATE_INUM_MIN_COPY(pos, k, min, cvar) \
|
#define SCM_VALIDATE_INUM_MIN_COPY(pos, k, min, cvar) \
|
||||||
do { \
|
do { \
|
||||||
SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \
|
SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \
|
||||||
|
SCM_ASSERT_RANGE (pos, k, (SCM_INUM (k) >= min)); \
|
||||||
cvar = SCM_INUM (k); \
|
cvar = SCM_INUM (k); \
|
||||||
SCM_ASSERT_RANGE (pos, k, (cvar >= min)); \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define SCM_VALIDATE_INUM_MIN_DEF_COPY(pos, k, min, default, cvar) \
|
#define SCM_VALIDATE_INUM_MIN_DEF_COPY(pos, k, min, default, cvar) \
|
||||||
|
@ -221,8 +221,8 @@
|
||||||
if (SCM_UNBNDP (k)) \
|
if (SCM_UNBNDP (k)) \
|
||||||
k = SCM_MAKINUM (default); \
|
k = SCM_MAKINUM (default); \
|
||||||
SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \
|
SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \
|
||||||
|
SCM_ASSERT_RANGE (pos, k, (SCM_INUM (k) >= min)); \
|
||||||
cvar = SCM_INUM (k); \
|
cvar = SCM_INUM (k); \
|
||||||
SCM_ASSERT_RANGE (pos, k, (cvar >= min)); \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define SCM_VALIDATE_INUM_DEF(pos, k, default) \
|
#define SCM_VALIDATE_INUM_DEF(pos, k, default) \
|
||||||
|
@ -257,8 +257,8 @@
|
||||||
#define SCM_VALIDATE_INUM_RANGE_COPY(pos, k, low, high, cvar) \
|
#define SCM_VALIDATE_INUM_RANGE_COPY(pos, k, low, high, cvar) \
|
||||||
do { \
|
do { \
|
||||||
SCM_ASSERT (SCM_INUMP (k), k, pos, FUNC_NAME); \
|
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); \
|
cvar = SCM_INUM (k); \
|
||||||
SCM_ASSERT_RANGE (pos, k, cvar >= low && cvar < high); \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define SCM_VALIDATE_NULL(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NULLP)
|
#define SCM_VALIDATE_NULL(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NULLP)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue