magic/lisp/lispargs.h

50 lines
1.8 KiB
C

/*************************************************************************
*
* lispargs.h --
*
* Macros for looking at various entries in a list.
*
* (c) 1996 California Institute of Technology
* Department of Computer Science
* Pasadena, CA 91125.
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for any purpose and without fee is hereby
* granted, provided that the above copyright notice appear in all
* copies. The California Institute of Technology makes no representations
* about the suitability of this software for any purpose. It is
* provided "as is" without express or implied warranty. Export of this
* software outside of the United States of America may require an
* export license.
*
* $Header$
*
* requires: lispInt.h
*
*************************************************************************/
#define ARG1P(s) (s)
#define ARG1(s) CAR(s)
#define EARG2P(s) (LTYPE(CDR(s)) != S_LIST || LLIST(CDR(s)))
#define ARG2P(s) (LTYPE(CDR(s)) == S_LIST && LLIST(CDR(s)))
#define ARG2(s) CAR(LLIST(CDR(s)))
#define ARG3P(s) (LTYPE(CDR(LLIST(CDR(s)))) == S_LIST && LLIST(CDR(LLIST(CDR(s)))))
#define ARG3(s) CAR(LLIST(CDR(LLIST(CDR(s)))))
#define ARG4P(s) (LTYPE(CDR(LLIST(CDR(LLIST(CDR(s)))))) == S_LIST && LLIST(CDR(LLIST(CDR(LLIST(CDR(s)))))))
#define ARG4(s) CAR(LLIST(CDR(LLIST(CDR(LLIST(CDR(s)))))))
/*
what i'd really like is
do { ... } while (0)
because that forces the user to use ";" at the end . . . but
Sun's cc thinks you should be warned about such statements -sigh-
*/
#define RETURN { LispStackDisplay (); return NULL; }
#define RETURNPOP { LispStackDisplay (); LispStackPop(); return NULL; }
#define NUMBER(t) ((t) == S_INT || (t) == S_FLOAT)