diff --git a/libguile/gc.h b/libguile/gc.h index bebfeb995..01b252021 100644 --- a/libguile/gc.h +++ b/libguile/gc.h @@ -85,37 +85,40 @@ typedef scm_cell * SCM_CELLPTR; /* Low level cell data accessing macros: */ -#define SCM_VALIDATE_CELL(x) \ - ((void) \ - (SCM_DEBUG_CELL_ACCESSES ? (!scm_cellp (x) ? (abort (), 0) : 1) : 1)) +#if SCM_DEBUG_CELL_ACCESSES == 1 +#define SCM_VALIDATE_CELL(cell, expr) \ + (!scm_cellp (cell) ? abort (), 0 : (expr)) +#else +#define SCM_VALIDATE_CELL(cell, expr) expr +#endif -#define SCM_CELL_WORD(x, n) \ - ((SCM_VALIDATE_CELL (x)), \ - (((scm_bits_t *) SCM2PTR (x)) [n])) +#define SCM_CELL_WORD(x, n) \ + SCM_VALIDATE_CELL ((x), \ + ((scm_bits_t *) SCM2PTR (x)) [n]) #define SCM_CELL_WORD_0(x) SCM_CELL_WORD (x, 0) #define SCM_CELL_WORD_1(x) SCM_CELL_WORD (x, 1) #define SCM_CELL_WORD_2(x) SCM_CELL_WORD (x, 2) #define SCM_CELL_WORD_3(x) SCM_CELL_WORD (x, 3) -#define SCM_CELL_OBJECT(x, n) \ - ((SCM_VALIDATE_CELL (x)), \ - (SCM_PACK (((scm_bits_t *) SCM2PTR (x)) [n]))) +#define SCM_CELL_OBJECT(x, n) \ + SCM_VALIDATE_CELL ((x), \ + SCM_PACK (((scm_bits_t *) SCM2PTR (x)) [n])) #define SCM_CELL_OBJECT_0(x) SCM_CELL_OBJECT (x, 0) #define SCM_CELL_OBJECT_1(x) SCM_CELL_OBJECT (x, 1) #define SCM_CELL_OBJECT_2(x) SCM_CELL_OBJECT (x, 2) #define SCM_CELL_OBJECT_3(x) SCM_CELL_OBJECT (x, 3) -#define SCM_SET_CELL_WORD(x, n, v) \ - ((SCM_VALIDATE_CELL (x)), \ - ((((scm_bits_t *) SCM2PTR (x)) [n]) = (scm_bits_t) (v))) +#define SCM_SET_CELL_WORD(x, n, v) \ + SCM_VALIDATE_CELL ((x), \ + ((scm_bits_t *) SCM2PTR (x)) [n] = (scm_bits_t) (v)) #define SCM_SET_CELL_WORD_0(x, v) SCM_SET_CELL_WORD (x, 0, v) #define SCM_SET_CELL_WORD_1(x, v) SCM_SET_CELL_WORD (x, 1, v) #define SCM_SET_CELL_WORD_2(x, v) SCM_SET_CELL_WORD (x, 2, v) #define SCM_SET_CELL_WORD_3(x, v) SCM_SET_CELL_WORD (x, 3, v) -#define SCM_SET_CELL_OBJECT(x, n, v) \ - ((SCM_VALIDATE_CELL (x)), \ - ((((scm_bits_t *) SCM2PTR (x)) [n]) = SCM_UNPACK (v))) +#define SCM_SET_CELL_OBJECT(x, n, v) \ + SCM_VALIDATE_CELL ((x), \ + ((scm_bits_t *) SCM2PTR (x)) [n] = SCM_UNPACK (v)) #define SCM_SET_CELL_OBJECT_0(x, v) SCM_SET_CELL_OBJECT (x, 0, v) #define SCM_SET_CELL_OBJECT_1(x, v) SCM_SET_CELL_OBJECT (x, 1, v) #define SCM_SET_CELL_OBJECT_2(x, v) SCM_SET_CELL_OBJECT (x, 2, v)