lpmoo-1.2/etc/
lpmoo-1.2/mudlib/
lpmoo-1.2/mudlib/etc/
lpmoo-1.2/mudlib/include/
lpmoo-1.2/mudlib/include/moo/
lpmoo-1.2/mudlib/lpc/
lpmoo-1.2/mudlib/std/auto/
lpmoo-1.2/mudlib/std/bfuns/
/*
 * NAME:	verb.h
 * DESCRIPTION:	runtime macros for compiled verb objects
 */

# include <objects.h>
# include <moo/verbinfo.h>
# include <moo/data.h>
# include <moo/errors.h>

# ifdef RUNTIME
# define VARS			vars
# define SP			sp
# define RESET()		(GET_SP(), GET_VARS())
# define STORE()		PUT_SP()
# else  /* ! RUNTIME */
# define VARS			info[I_VARS]
# define SP			stack[0]
# define RESET()		/* do nothing */
# define STORE()		/* do nothing */
# endif

# define RAISE(error)		raise(error, info)

# define PUSH(val)		(stack[++SP] = (val))
# define POP()			(stack[SP--])

# define GET_VARS()		(vars = info[I_VARS])
# define PUT_VARS()		(info[I_VARS] = vars)

# define GET_SP()		(sp = stack[0])
# define PUT_SP()		(stack[0] = sp)

# define LINENO(line)		(lineno = (line))

# define KFUN1(func, arg1)		k_##func(info, arg1)
# define KFUN2(func, arg1, arg2)	k_##func(info, arg1, arg2)
# define KFUN3(func, arg1, arg2, arg3)	k_##func(info, arg1, arg2, arg3)

# define PREP_FORK(id)		prep_fork(stack, info, id)

# ifdef INLINE_PUSHVAR
# define VAR(var)  \
  (info[I_VARDEFS][var - VAR_OFFSET] == '0' ? RAISE(E_VARNF) : VARS[var])
# else
# define VAR(x)			var(info, x)
# endif

# define TYPEOF(x)		moo_typeof(x)
# define TRUTHOF(x)		moo_truthof(x)
# define EQUALP(x, y)		moo_equalp(x, y)

# define PROGRAMMER(info)	(info[I_PRGMR])
# define WIZARDP(info)		(info[I_FLAGS] & IF_WIZARD)

# define JS_BEGIN  \
  mixed RET; if (js && js[1])  \
    { RET = call_other(js[1], js[2], js[3]...); RESET(); }  \
  switch (js ? js[0] : 0) { case 0:
# define JS_PREP(NUM)	STORE(); if (0) { case NUM: js = 0; } else {
# define JS_JUMP(NUM)	case NUM:
# define JS_END		}

# define JS_DATA(n)	stack, info, n, js
# define JS_PROTO	mixed *stack, mixed *info, int bjump, mixed *js

# define JS_INIT_I(cs)	allocate(global->get_stack_size()), cs, 0, 0
# define JS_INIT	JS_INIT_I(0)

# define STD_VARS  \
  NUM(T_NUM) /* NUM   */, NUM(T_OBJ) /* OBJ */, NUM(T_STR) /* STR   */,  \
  NUM(T_LST) /* LIST  */, NUM(T_ERR) /* ERR */, NUM(T_FLT) /* FLOAT */,  \
  NUM(T_TBL) /* TABLE */, NUM(T_BUF) /* BUF */