#ifndef _EXPRFAST_
# define _EXPRFAST_ 1
/* ---------------------------------------------------------------------- */
/*                   Copyright (C) 1991 by Natrlich!                     */
/*                      This file is copyrighted!                         */
/*                Refer to the documentation for details.                 */
/* ---------------------------------------------------------------------- */
# if VERSION

# if ! _EXPR_
extern exp_m huge  *ex_h;
extern ref   huge  *rp;
extern expr  huge  *ep;
extern lexpr huge  *lp;
extern buffer huge *bp;
# endif

#define refer( l, ex)                                                   \
    (rp = ref_alloc(), rp->line = bp->line, rp->ref = ex,               \
    l->type |= L_REF, rp->next = l->refs, l->refs = rp, rp)

#define ival_pl( value)  (ep = exp_alloc(), ep->val = value, ep)

#define lex_pl( s, ex)                                                  \
  (lp = lex_alloc(), lp->string = s, lp->expr = ex, lp->next = 0, lp)

#define lex_ch( l, r)  (l->next = r, l)

/* NOTE THAT this must not be the first exp_alloc call */
#define exp_alloc()                                                     \
   (ex_h->free-- ? ex_h->tab++ : (ex_h->free++, sexp_alloc()))

# else
#  define exp_alloc()     sexp_alloc()
#  define lex_ch( x, y)   slex_ch( x, y)
# endif
#endif
