/* Copyright Per Bothner 1987. Read the file Q-INFO */
#ifndef _VarGet
#define _VarGet (-1)
#define _VarSet (-2)
#define _VarCoerce (-3)
#define _VarValRelease (-4)
#define _VarNotify (-5)
#define GenVarGet(v) (*MemGetType(v)->var->getVal)(v)
#define VarGet(var) (*((Var*)var)->opTab[_VarGet])(var)
#define VarSet(var, new) (*((Var*)var)->opTab[_VarSet])(var, new)
#define VarCoerce(var, new) (*((Var*)var)->opTab[_VarCoerce])(var, new)
#define VarValRelease(var) (*((Var*)var)->opTab[_VarValRelease])(var)
#define VarNotify(var, master) (*((Var*)var)->opTab[_VarNotify])(var, master)
extern Object DefaultVarGet(), DefaultVarSet(),
    DefaultVarCoerce(), DefaultVarValRelease();
struct VarHandles
  {
    Func getVal;	/* get value stored in variable */
    Func primSet;	/* set new value, assuming no old value */
    Func freeVal;	/* release old value */
    Func varCoerce;	/* not needed ? */
    Func notify;
  };
extern Object NullCoerce(), IdentityFunc(), VarPreApply();
#endif
