3 |
#ifndef SCM_VALIDATE_H |
#ifndef SCM_VALIDATE_H |
4 |
#define SCM_VALIDATE_H |
#define SCM_VALIDATE_H |
5 |
|
|
6 |
/* Copyright (C) 1999,2000,2001 Free Software Foundation, Inc. |
/* Copyright (C) 1999,2000,2001, 2002 Free Software Foundation, Inc. |
7 |
* |
* |
8 |
* This program is free software; you can redistribute it and/or modify |
* This program is free software; you can redistribute it and/or modify |
9 |
* it under the terms of the GNU General Public License as published by |
* it under the terms of the GNU General Public License as published by |
141 |
SCM_ASSERT_TYPE (SCM_ ## pred (var), var, pos, FUNC_NAME, #pred); \ |
SCM_ASSERT_TYPE (SCM_ ## pred (var), var, pos, FUNC_NAME, #pred); \ |
142 |
} while (0) |
} while (0) |
143 |
|
|
144 |
|
#define SCM_MAKE_VALIDATE_MSG(pos, var, pred, msg) \ |
145 |
|
do { \ |
146 |
|
SCM_ASSERT_TYPE (SCM_ ## pred (var), var, pos, FUNC_NAME, msg); \ |
147 |
|
} while (0) |
148 |
|
|
149 |
|
|
150 |
|
|
151 |
#define SCM_VALIDATE_REST_ARGUMENT(x) \ |
#define SCM_VALIDATE_REST_ARGUMENT(x) \ |
157 |
} \ |
} \ |
158 |
} while (0) |
} while (0) |
159 |
|
|
160 |
#define SCM_VALIDATE_NIM(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NIMP) |
#define SCM_VALIDATE_NIM(pos, scm) SCM_MAKE_VALIDATE_MSG (pos, scm, NIMP, "non-immediate") |
161 |
|
|
162 |
#define SCM_VALIDATE_BOOL(pos, flag) SCM_MAKE_VALIDATE(pos, flag, BOOLP) |
#define SCM_VALIDATE_BOOL(pos, flag) SCM_MAKE_VALIDATE_MSG(pos, flag, BOOLP, "boolean") |
163 |
|
|
164 |
#define SCM_VALIDATE_BOOL_COPY(pos, flag, cvar) \ |
#define SCM_VALIDATE_BOOL_COPY(pos, flag, cvar) \ |
165 |
do { \ |
do { \ |
167 |
cvar = SCM_EQ_P (flag, SCM_BOOL_T) ? 1 : 0; \ |
cvar = SCM_EQ_P (flag, SCM_BOOL_T) ? 1 : 0; \ |
168 |
} while (0) |
} while (0) |
169 |
|
|
170 |
#define SCM_VALIDATE_CHAR(pos, scm) SCM_MAKE_VALIDATE (pos, scm, CHARP) |
#define SCM_VALIDATE_CHAR(pos, scm) SCM_MAKE_VALIDATE_MSG (pos, scm, CHARP, "character") |
171 |
|
|
172 |
#define SCM_VALIDATE_CHAR_COPY(pos, scm, cvar) \ |
#define SCM_VALIDATE_CHAR_COPY(pos, scm, cvar) \ |
173 |
do { \ |
do { \ |
175 |
cvar = SCM_CHAR (scm); \ |
cvar = SCM_CHAR (scm); \ |
176 |
} while (0) |
} while (0) |
177 |
|
|
178 |
#define SCM_VALIDATE_STRING(pos, str) SCM_MAKE_VALIDATE (pos, str, STRINGP) |
#define SCM_VALIDATE_STRING(pos, str) SCM_MAKE_VALIDATE_MSG (pos, str, STRINGP, "string") |
179 |
|
|
180 |
#define SCM_VALIDATE_STRING_COPY(pos, str, cvar) \ |
#define SCM_VALIDATE_STRING_COPY(pos, str, cvar) \ |
181 |
do { \ |
do { \ |
201 |
&& (size_t) c_end <= SCM_STRING_LENGTH (str));\ |
&& (size_t) c_end <= SCM_STRING_LENGTH (str));\ |
202 |
} while (0) |
} while (0) |
203 |
|
|
204 |
#define SCM_VALIDATE_REAL(pos, z) SCM_MAKE_VALIDATE (pos, z, REALP) |
#define SCM_VALIDATE_REAL(pos, z) SCM_MAKE_VALIDATE_MSG (pos, z, REALP, "real") |
205 |
|
|
206 |
#define SCM_VALIDATE_NUMBER(pos, z) SCM_MAKE_VALIDATE (pos, z, NUMBERP) |
#define SCM_VALIDATE_NUMBER(pos, z) SCM_MAKE_VALIDATE_MSG (pos, z, NUMBERP, "number") |
207 |
|
|
208 |
#define SCM_VALIDATE_INUM(pos, k) SCM_MAKE_VALIDATE (pos, k, INUMP) |
#define SCM_VALIDATE_INUM(pos, k) SCM_MAKE_VALIDATE_MSG (pos, k, INUMP, "exact integer") |
209 |
|
|
210 |
#define SCM_VALIDATE_INUM_COPY(pos, k, cvar) \ |
#define SCM_VALIDATE_INUM_COPY(pos, k, cvar) \ |
211 |
do { \ |
do { \ |
253 |
cvar = SCM_NUM2DOUBLE (pos, k); \ |
cvar = SCM_NUM2DOUBLE (pos, k); \ |
254 |
} while (0) |
} while (0) |
255 |
|
|
256 |
#define SCM_VALIDATE_BIGINT(pos, k) SCM_MAKE_VALIDATE (pos, k, BIGP) |
#define SCM_VALIDATE_BIGINT(pos, k) SCM_MAKE_VALIDATE_MSG (pos, k, BIGP, "bignum") |
257 |
|
|
258 |
#define SCM_VALIDATE_INUM_MIN(pos, k, min) \ |
#define SCM_VALIDATE_INUM_MIN(pos, k, min) \ |
259 |
do { \ |
do { \ |
326 |
cvar = SCM_INUM (k); \ |
cvar = SCM_INUM (k); \ |
327 |
} while (0) |
} while (0) |
328 |
|
|
329 |
#define SCM_VALIDATE_NULL(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NULLP) |
#define SCM_VALIDATE_NULL(pos, scm) SCM_MAKE_VALIDATE_MSG (pos, scm, NULLP, "null") |
330 |
|
|
331 |
#define SCM_VALIDATE_NULL_OR_NIL(pos, scm) SCM_MAKE_VALIDATE (pos, scm, NULL_OR_NIL_P) |
#define SCM_VALIDATE_NULL_OR_NIL(pos, scm) SCM_MAKE_VALIDATE_MSG (pos, scm, NULL_OR_NIL_P, "null") |
332 |
|
|
333 |
#define SCM_VALIDATE_CONS(pos, scm) SCM_MAKE_VALIDATE (pos, scm, CONSP) |
#define SCM_VALIDATE_CONS(pos, scm) SCM_MAKE_VALIDATE_MSG (pos, scm, CONSP, "pair") |
334 |
|
|
335 |
#define SCM_VALIDATE_LIST(pos, lst) \ |
#define SCM_VALIDATE_LIST(pos, lst) \ |
336 |
do { \ |
do { \ |
372 |
SCM_ASSERT (scm_valid_oport_value_p (port), port, pos, FUNC_NAME); \ |
SCM_ASSERT (scm_valid_oport_value_p (port), port, pos, FUNC_NAME); \ |
373 |
} while (0) |
} while (0) |
374 |
|
|
375 |
#define SCM_VALIDATE_PRINTSTATE(pos, a) SCM_MAKE_VALIDATE(pos, a, PRINT_STATE_P) |
#define SCM_VALIDATE_PRINTSTATE(pos, a) SCM_MAKE_VALIDATE_MSG(pos, a, PRINT_STATE_P, "print-state") |
376 |
|
|
377 |
#define SCM_VALIDATE_SMOB(pos, obj, type) \ |
#define SCM_VALIDATE_SMOB(pos, obj, type) \ |
378 |
do { \ |
do { \ |
380 |
obj, pos, FUNC_NAME); \ |
obj, pos, FUNC_NAME); \ |
381 |
} while (0) |
} while (0) |
382 |
|
|
383 |
#define SCM_VALIDATE_THREAD(pos, a) SCM_MAKE_VALIDATE (pos, a, THREADP) |
#define SCM_VALIDATE_THREAD(pos, a) SCM_MAKE_VALIDATE_MSG (pos, a, THREADP, "thread") |
384 |
|
|
385 |
#define SCM_VALIDATE_THUNK(pos, thunk) \ |
#define SCM_VALIDATE_THUNK(pos, thunk) \ |
386 |
do { \ |
do { \ |
387 |
SCM_ASSERT (!SCM_FALSEP (scm_thunk_p (thunk)), thunk, pos, FUNC_NAME); \ |
SCM_ASSERT (!SCM_FALSEP (scm_thunk_p (thunk)), thunk, pos, FUNC_NAME); \ |
388 |
} while (0) |
} while (0) |
389 |
|
|
390 |
#define SCM_VALIDATE_SYMBOL(pos, sym) SCM_MAKE_VALIDATE (pos, sym, SYMBOLP) |
#define SCM_VALIDATE_SYMBOL(pos, sym) SCM_MAKE_VALIDATE_MSG (pos, sym, SYMBOLP, "symbol") |
391 |
|
|
392 |
#define SCM_VALIDATE_VARIABLE(pos, var) SCM_MAKE_VALIDATE (pos, var, VARIABLEP) |
#define SCM_VALIDATE_VARIABLE(pos, var) SCM_MAKE_VALIDATE_MSG (pos, var, VARIABLEP, "variable") |
393 |
|
|
394 |
#define SCM_VALIDATE_MEMOIZED(pos, obj) SCM_MAKE_VALIDATE (pos, obj, MEMOIZEDP) |
#define SCM_VALIDATE_MEMOIZED(pos, obj) SCM_MAKE_VALIDATE_MSG (pos, obj, MEMOIZEDP, "memoized code") |
395 |
|
|
396 |
#define SCM_VALIDATE_CLOSURE(pos, obj) SCM_MAKE_VALIDATE (pos, obj, CLOSUREP) |
#define SCM_VALIDATE_CLOSURE(pos, obj) SCM_MAKE_VALIDATE_MSG (pos, obj, CLOSUREP, "closure") |
397 |
|
|
398 |
#define SCM_VALIDATE_PROC(pos, proc) \ |
#define SCM_VALIDATE_PROC(pos, proc) \ |
399 |
do { \ |
do { \ |
405 |
SCM_ASSERT (SCM_NULLP (env) || SCM_CONSP (env), env, pos, FUNC_NAME); \ |
SCM_ASSERT (SCM_NULLP (env) || SCM_CONSP (env), env, pos, FUNC_NAME); \ |
406 |
} while (0) |
} while (0) |
407 |
|
|
408 |
#define SCM_VALIDATE_HOOK(pos, a) SCM_MAKE_VALIDATE (pos, a, HOOKP) |
#define SCM_VALIDATE_HOOK(pos, a) SCM_MAKE_VALIDATE_MSG (pos, a, HOOKP, "hook") |
409 |
|
|
410 |
#define SCM_VALIDATE_RGXP(pos, a) SCM_MAKE_VALIDATE (pos, a, RGXP) |
#define SCM_VALIDATE_RGXP(pos, a) SCM_MAKE_VALIDATE_MSG (pos, a, RGXP, "regexp") |
411 |
|
|
412 |
#define SCM_VALIDATE_DIR(pos, port) SCM_MAKE_VALIDATE (pos, port, DIRP) |
#define SCM_VALIDATE_DIR(pos, port) SCM_MAKE_VALIDATE_MSG (pos, port, DIRP, "directory port") |
413 |
|
|
414 |
#define SCM_VALIDATE_PORT(pos, port) SCM_MAKE_VALIDATE (pos, port, PORTP) |
#define SCM_VALIDATE_PORT(pos, port) SCM_MAKE_VALIDATE_MSG (pos, port, PORTP, "port") |
415 |
|
|
416 |
#define SCM_VALIDATE_INPUT_PORT(pos, port) \ |
#define SCM_VALIDATE_INPUT_PORT(pos, port) \ |
417 |
SCM_MAKE_VALIDATE (pos, port, INPUT_PORT_P) |
SCM_MAKE_VALIDATE_MSG (pos, port, INPUT_PORT_P, "input port") |
418 |
|
|
419 |
#define SCM_VALIDATE_OUTPUT_PORT(pos, port) \ |
#define SCM_VALIDATE_OUTPUT_PORT(pos, port) \ |
420 |
SCM_MAKE_VALIDATE (pos, port, OUTPUT_PORT_P) |
SCM_MAKE_VALIDATE_MSG (pos, port, OUTPUT_PORT_P, "output port") |
421 |
|
|
422 |
#define SCM_VALIDATE_FPORT(pos, port) SCM_MAKE_VALIDATE (pos, port, FPORTP) |
#define SCM_VALIDATE_FPORT(pos, port) SCM_MAKE_VALIDATE_MSG (pos, port, FPORTP, "file port") |
423 |
|
|
424 |
#define SCM_VALIDATE_OPFPORT(pos, port) SCM_MAKE_VALIDATE (pos, port, OPFPORTP) |
#define SCM_VALIDATE_OPFPORT(pos, port) SCM_MAKE_VALIDATE_MSG (pos, port, OPFPORTP, "open file port") |
425 |
|
|
426 |
#define SCM_VALIDATE_OPINPORT(pos, port) \ |
#define SCM_VALIDATE_OPINPORT(pos, port) \ |
427 |
SCM_MAKE_VALIDATE (pos, port, OPINPORTP) |
SCM_MAKE_VALIDATE_MSG (pos, port, OPINPORTP, "open input port") |
428 |
|
|
429 |
#define SCM_VALIDATE_OPENPORT(pos, port) \ |
#define SCM_VALIDATE_OPENPORT(pos, port) \ |
430 |
do { \ |
do { \ |
432 |
port, pos, FUNC_NAME); \ |
port, pos, FUNC_NAME); \ |
433 |
} while (0) |
} while (0) |
434 |
|
|
435 |
#define SCM_VALIDATE_OPPORT(pos, port) SCM_MAKE_VALIDATE (pos, port, OPPORTP) |
#define SCM_VALIDATE_OPPORT(pos, port) SCM_MAKE_VALIDATE_MSG (pos, port, OPPORTP, "open port") |
436 |
|
|
437 |
#define SCM_VALIDATE_OPOUTPORT(pos, port) \ |
#define SCM_VALIDATE_OPOUTPORT(pos, port) \ |
438 |
SCM_MAKE_VALIDATE (pos, port, OPOUTPORTP) |
SCM_MAKE_VALIDATE_MSG (pos, port, OPOUTPORTP, "open output port") |
439 |
|
|
440 |
#define SCM_VALIDATE_OPOUTSTRPORT(pos, port) \ |
#define SCM_VALIDATE_OPOUTSTRPORT(pos, port) \ |
441 |
SCM_MAKE_VALIDATE (pos, port, OPOUTSTRPORTP) |
SCM_MAKE_VALIDATE_MSG (pos, port, OPOUTSTRPORTP, "open output string port") |
442 |
|
|
443 |
#define SCM_VALIDATE_FLUID(pos, fluid) SCM_MAKE_VALIDATE (pos, fluid, FLUIDP) |
#define SCM_VALIDATE_FLUID(pos, fluid) SCM_MAKE_VALIDATE_MSG (pos, fluid, FLUIDP, "fluid") |
444 |
|
|
445 |
#define SCM_VALIDATE_KEYWORD(pos, v) SCM_MAKE_VALIDATE (pos, v, KEYWORDP) |
#define SCM_VALIDATE_KEYWORD(pos, v) SCM_MAKE_VALIDATE_MSG (pos, v, KEYWORDP, "keyword") |
446 |
|
|
447 |
#define SCM_VALIDATE_STACK(pos, v) SCM_MAKE_VALIDATE (pos, v, STACKP) |
#define SCM_VALIDATE_STACK(pos, v) SCM_MAKE_VALIDATE_MSG (pos, v, STACKP, "stack") |
448 |
|
|
449 |
#define SCM_VALIDATE_FRAME(pos, v) SCM_MAKE_VALIDATE (pos, v, FRAMEP) |
#define SCM_VALIDATE_FRAME(pos, v) SCM_MAKE_VALIDATE_MSG (pos, v, FRAMEP, "frame") |
450 |
|
|
451 |
#define SCM_VALIDATE_RSTATE(pos, v) SCM_MAKE_VALIDATE (pos, v, RSTATEP) |
#define SCM_VALIDATE_RSTATE(pos, v) SCM_MAKE_VALIDATE_MSG (pos, v, RSTATEP, "random-generator-state") |
452 |
|
|
453 |
#define SCM_VALIDATE_ARRAY(pos, v) \ |
#define SCM_VALIDATE_ARRAY(pos, v) \ |
454 |
do { \ |
do { \ |
457 |
v, pos, FUNC_NAME); \ |
v, pos, FUNC_NAME); \ |
458 |
} while (0) |
} while (0) |
459 |
|
|
460 |
#define SCM_VALIDATE_VECTOR(pos, v) SCM_MAKE_VALIDATE (pos, v, VECTORP) |
#define SCM_VALIDATE_VECTOR(pos, v) SCM_MAKE_VALIDATE_MSG (pos, v, VECTORP, "vector") |
461 |
|
|
462 |
#define SCM_VALIDATE_VECTOR_OR_DVECTOR(pos, v) \ |
#define SCM_VALIDATE_VECTOR_OR_DVECTOR(pos, v) \ |
463 |
do { \ |
do { \ |
466 |
v, pos, FUNC_NAME); \ |
v, pos, FUNC_NAME); \ |
467 |
} while (0) |
} while (0) |
468 |
|
|
469 |
#define SCM_VALIDATE_STRUCT(pos, v) SCM_MAKE_VALIDATE (pos, v, STRUCTP) |
#define SCM_VALIDATE_STRUCT(pos, v) SCM_MAKE_VALIDATE_MSG (pos, v, STRUCTP, "struct") |
470 |
|
|
471 |
#define SCM_VALIDATE_VTABLE(pos, v) \ |
#define SCM_VALIDATE_VTABLE(pos, v) \ |
472 |
do { \ |
do { \ |