/*
 * $Id: tclOOIntDecls.h,v 1.10 2008/10/22 20:23:59 nijtmans Exp $
 *
 * This file is (mostly) automatically generated from tclOO.decls.
 */

#ifndef _TCLOOINTDECLS
#define _TCLOOINTDECLS

#undef TCL_STORAGE_CLASS
#ifdef BUILD_tcl
#   define TCL_STORAGE_CLASS DLLEXPORT
#else
#   ifdef USE_TCL_STUBS
#      define TCL_STORAGE_CLASS
#   else
#      define TCL_STORAGE_CLASS DLLIMPORT
#   endif
#endif

/*
 * WARNING: This file is automatically generated by the tools/genStubs.tcl
 * script.  Any modifications to the function declarations below should be made
 * in the generic/tclOO.decls script.
 */

/* !BEGIN!: Do not edit below this line. */

/*
 * Exported function declarations:
 */

#ifndef TclOOGetDefineCmdContext_TCL_DECLARED
#define TclOOGetDefineCmdContext_TCL_DECLARED
/* 0 */
EXTERN Tcl_Object	TclOOGetDefineCmdContext (Tcl_Interp * interp);
#endif
#ifndef TclOOMakeProcInstanceMethod_TCL_DECLARED
#define TclOOMakeProcInstanceMethod_TCL_DECLARED
/* 1 */
EXTERN Tcl_Method	TclOOMakeProcInstanceMethod (Tcl_Interp * interp,
				Object * oPtr, int flags, Tcl_Obj * nameObj,
				Tcl_Obj * argsObj, Tcl_Obj * bodyObj,
				const Tcl_MethodType * typePtr,
				ClientData clientData, Proc ** procPtrPtr);
#endif
#ifndef TclOOMakeProcMethod_TCL_DECLARED
#define TclOOMakeProcMethod_TCL_DECLARED
/* 2 */
EXTERN Tcl_Method	TclOOMakeProcMethod (Tcl_Interp * interp,
				Class * clsPtr, int flags, Tcl_Obj * nameObj,
				const char * namePtr, Tcl_Obj * argsObj,
				Tcl_Obj * bodyObj,
				const Tcl_MethodType * typePtr,
				ClientData clientData, Proc ** procPtrPtr);
#endif
#ifndef TclOONewProcInstanceMethod_TCL_DECLARED
#define TclOONewProcInstanceMethod_TCL_DECLARED
/* 3 */
EXTERN Method *		TclOONewProcInstanceMethod (Tcl_Interp * interp,
				Object * oPtr, int flags, Tcl_Obj * nameObj,
				Tcl_Obj * argsObj, Tcl_Obj * bodyObj,
				ProcedureMethod ** pmPtrPtr);
#endif
#ifndef TclOONewProcMethod_TCL_DECLARED
#define TclOONewProcMethod_TCL_DECLARED
/* 4 */
EXTERN Method *		TclOONewProcMethod (Tcl_Interp * interp,
				Class * clsPtr, int flags, Tcl_Obj * nameObj,
				Tcl_Obj * argsObj, Tcl_Obj * bodyObj,
				ProcedureMethod ** pmPtrPtr);
#endif
#ifndef TclOOObjectCmdCore_TCL_DECLARED
#define TclOOObjectCmdCore_TCL_DECLARED
/* 5 */
EXTERN int		TclOOObjectCmdCore (Object * oPtr,
				Tcl_Interp * interp, int objc,
				Tcl_Obj *const * objv, int publicOnly,
				Class * startCls);
#endif
#ifndef TclOOIsReachable_TCL_DECLARED
#define TclOOIsReachable_TCL_DECLARED
/* 6 */
EXTERN int		TclOOIsReachable (Class * targetPtr,
				Class * startPtr);
#endif
#ifndef TclOONewForwardMethod_TCL_DECLARED
#define TclOONewForwardMethod_TCL_DECLARED
/* 7 */
EXTERN Method *		TclOONewForwardMethod (Tcl_Interp * interp,
				Class * clsPtr, int isPublic,
				Tcl_Obj * nameObj, Tcl_Obj * prefixObj);
#endif
#ifndef TclOONewForwardInstanceMethod_TCL_DECLARED
#define TclOONewForwardInstanceMethod_TCL_DECLARED
/* 8 */
EXTERN Method *		TclOONewForwardInstanceMethod (Tcl_Interp * interp,
				Object * oPtr, int isPublic,
				Tcl_Obj * nameObj, Tcl_Obj * prefixObj);
#endif
#ifndef TclOONewProcInstanceMethodEx_TCL_DECLARED
#define TclOONewProcInstanceMethodEx_TCL_DECLARED
/* 9 */
EXTERN Tcl_Method	TclOONewProcInstanceMethodEx (Tcl_Interp * interp,
				Tcl_Object oPtr,
				TclOO_PreCallProc preCallPtr,
				TclOO_PostCallProc postCallPtr,
				ProcErrorProc errProc, ClientData clientData,
				Tcl_Obj * nameObj, Tcl_Obj * argsObj,
				Tcl_Obj * bodyObj, int flags,
				void ** internalTokenPtr);
#endif
#ifndef TclOONewProcMethodEx_TCL_DECLARED
#define TclOONewProcMethodEx_TCL_DECLARED
/* 10 */
EXTERN Tcl_Method	TclOONewProcMethodEx (Tcl_Interp * interp,
				Tcl_Class clsPtr,
				TclOO_PreCallProc preCallPtr,
				TclOO_PostCallProc postCallPtr,
				ProcErrorProc errProc, ClientData clientData,
				Tcl_Obj * nameObj, Tcl_Obj * argsObj,
				Tcl_Obj * bodyObj, int flags,
				void ** internalTokenPtr);
#endif
#ifndef TclOOInvokeObject_TCL_DECLARED
#define TclOOInvokeObject_TCL_DECLARED
/* 11 */
EXTERN int		TclOOInvokeObject (Tcl_Interp * interp,
				Tcl_Object object, Tcl_Class startCls,
				int publicPrivate, int objc,
				Tcl_Obj *const * objv);
#endif
#ifndef TclOOObjectSetFilters_TCL_DECLARED
#define TclOOObjectSetFilters_TCL_DECLARED
/* 12 */
EXTERN void		TclOOObjectSetFilters (Object * oPtr, int numFilters,
				Tcl_Obj *const * filters);
#endif
#ifndef TclOOClassSetFilters_TCL_DECLARED
#define TclOOClassSetFilters_TCL_DECLARED
/* 13 */
EXTERN void		TclOOClassSetFilters (Tcl_Interp * interp,
				Class * classPtr, int numFilters,
				Tcl_Obj *const * filters);
#endif
#ifndef TclOOObjectSetMixins_TCL_DECLARED
#define TclOOObjectSetMixins_TCL_DECLARED
/* 14 */
EXTERN void		TclOOObjectSetMixins (Object * oPtr, int numMixins,
				Class *const * mixins);
#endif
#ifndef TclOOClassSetMixins_TCL_DECLARED
#define TclOOClassSetMixins_TCL_DECLARED
/* 15 */
EXTERN void		TclOOClassSetMixins (Tcl_Interp * interp,
				Class * classPtr, int numMixins,
				Class *const * mixins);
#endif

typedef struct TclOOIntStubs {
    int magic;
    const struct TclOOIntStubHooks *hooks;

    Tcl_Object (*tclOOGetDefineCmdContext) (Tcl_Interp * interp); /* 0 */
    Tcl_Method (*tclOOMakeProcInstanceMethod) (Tcl_Interp * interp, Object * oPtr, int flags, Tcl_Obj * nameObj, Tcl_Obj * argsObj, Tcl_Obj * bodyObj, const Tcl_MethodType * typePtr, ClientData clientData, Proc ** procPtrPtr); /* 1 */
    Tcl_Method (*tclOOMakeProcMethod) (Tcl_Interp * interp, Class * clsPtr, int flags, Tcl_Obj * nameObj, const char * namePtr, Tcl_Obj * argsObj, Tcl_Obj * bodyObj, const Tcl_MethodType * typePtr, ClientData clientData, Proc ** procPtrPtr); /* 2 */
    Method * (*tclOONewProcInstanceMethod) (Tcl_Interp * interp, Object * oPtr, int flags, Tcl_Obj * nameObj, Tcl_Obj * argsObj, Tcl_Obj * bodyObj, ProcedureMethod ** pmPtrPtr); /* 3 */
    Method * (*tclOONewProcMethod) (Tcl_Interp * interp, Class * clsPtr, int flags, Tcl_Obj * nameObj, Tcl_Obj * argsObj, Tcl_Obj * bodyObj, ProcedureMethod ** pmPtrPtr); /* 4 */
    int (*tclOOObjectCmdCore) (Object * oPtr, Tcl_Interp * interp, int objc, Tcl_Obj *const * objv, int publicOnly, Class * startCls); /* 5 */
    int (*tclOOIsReachable) (Class * targetPtr, Class * startPtr); /* 6 */
    Method * (*tclOONewForwardMethod) (Tcl_Interp * interp, Class * clsPtr, int isPublic, Tcl_Obj * nameObj, Tcl_Obj * prefixObj); /* 7 */
    Method * (*tclOONewForwardInstanceMethod) (Tcl_Interp * interp, Object * oPtr, int isPublic, Tcl_Obj * nameObj, Tcl_Obj * prefixObj); /* 8 */
    Tcl_Method (*tclOONewProcInstanceMethodEx) (Tcl_Interp * interp, Tcl_Object oPtr, TclOO_PreCallProc preCallPtr, TclOO_PostCallProc postCallPtr, ProcErrorProc errProc, ClientData clientData, Tcl_Obj * nameObj, Tcl_Obj * argsObj, Tcl_Obj * bodyObj, int flags, void ** internalTokenPtr); /* 9 */
    Tcl_Method (*tclOONewProcMethodEx) (Tcl_Interp * interp, Tcl_Class clsPtr, TclOO_PreCallProc preCallPtr, TclOO_PostCallProc postCallPtr, ProcErrorProc errProc, ClientData clientData, Tcl_Obj * nameObj, Tcl_Obj * argsObj, Tcl_Obj * bodyObj, int flags, void ** internalTokenPtr); /* 10 */
    int (*tclOOInvokeObject) (Tcl_Interp * interp, Tcl_Object object, Tcl_Class startCls, int publicPrivate, int objc, Tcl_Obj *const * objv); /* 11 */
    void (*tclOOObjectSetFilters) (Object * oPtr, int numFilters, Tcl_Obj *const * filters); /* 12 */
    void (*tclOOClassSetFilters) (Tcl_Interp * interp, Class * classPtr, int numFilters, Tcl_Obj *const * filters); /* 13 */
    void (*tclOOObjectSetMixins) (Object * oPtr, int numMixins, Class *const * mixins); /* 14 */
    void (*tclOOClassSetMixins) (Tcl_Interp * interp, Class * classPtr, int numMixins, Class *const * mixins); /* 15 */
} TclOOIntStubs;

#if defined(USE_TCLOO_STUBS) && !defined(USE_TCLOO_STUB_PROCS)
extern const TclOOIntStubs *tclOOIntStubsPtr;
#endif /* defined(USE_TCLOO_STUBS) && !defined(USE_TCLOO_STUB_PROCS) */

#if defined(USE_TCLOO_STUBS) && !defined(USE_TCLOO_STUB_PROCS)

/*
 * Inline function declarations:
 */

#ifndef TclOOGetDefineCmdContext
#define TclOOGetDefineCmdContext \
	(tclOOIntStubsPtr->tclOOGetDefineCmdContext) /* 0 */
#endif
#ifndef TclOOMakeProcInstanceMethod
#define TclOOMakeProcInstanceMethod \
	(tclOOIntStubsPtr->tclOOMakeProcInstanceMethod) /* 1 */
#endif
#ifndef TclOOMakeProcMethod
#define TclOOMakeProcMethod \
	(tclOOIntStubsPtr->tclOOMakeProcMethod) /* 2 */
#endif
#ifndef TclOONewProcInstanceMethod
#define TclOONewProcInstanceMethod \
	(tclOOIntStubsPtr->tclOONewProcInstanceMethod) /* 3 */
#endif
#ifndef TclOONewProcMethod
#define TclOONewProcMethod \
	(tclOOIntStubsPtr->tclOONewProcMethod) /* 4 */
#endif
#ifndef TclOOObjectCmdCore
#define TclOOObjectCmdCore \
	(tclOOIntStubsPtr->tclOOObjectCmdCore) /* 5 */
#endif
#ifndef TclOOIsReachable
#define TclOOIsReachable \
	(tclOOIntStubsPtr->tclOOIsReachable) /* 6 */
#endif
#ifndef TclOONewForwardMethod
#define TclOONewForwardMethod \
	(tclOOIntStubsPtr->tclOONewForwardMethod) /* 7 */
#endif
#ifndef TclOONewForwardInstanceMethod
#define TclOONewForwardInstanceMethod \
	(tclOOIntStubsPtr->tclOONewForwardInstanceMethod) /* 8 */
#endif
#ifndef TclOONewProcInstanceMethodEx
#define TclOONewProcInstanceMethodEx \
	(tclOOIntStubsPtr->tclOONewProcInstanceMethodEx) /* 9 */
#endif
#ifndef TclOONewProcMethodEx
#define TclOONewProcMethodEx \
	(tclOOIntStubsPtr->tclOONewProcMethodEx) /* 10 */
#endif
#ifndef TclOOInvokeObject
#define TclOOInvokeObject \
	(tclOOIntStubsPtr->tclOOInvokeObject) /* 11 */
#endif
#ifndef TclOOObjectSetFilters
#define TclOOObjectSetFilters \
	(tclOOIntStubsPtr->tclOOObjectSetFilters) /* 12 */
#endif
#ifndef TclOOClassSetFilters
#define TclOOClassSetFilters \
	(tclOOIntStubsPtr->tclOOClassSetFilters) /* 13 */
#endif
#ifndef TclOOObjectSetMixins
#define TclOOObjectSetMixins \
	(tclOOIntStubsPtr->tclOOObjectSetMixins) /* 14 */
#endif
#ifndef TclOOClassSetMixins
#define TclOOClassSetMixins \
	(tclOOIntStubsPtr->tclOOClassSetMixins) /* 15 */
#endif

#endif /* defined(USE_TCLOO_STUBS) && !defined(USE_TCLOO_STUB_PROCS) */

/* !END!: Do not edit above this line. */

#undef TCL_STORAGE_CLASS
#define TCL_STORAGE_CLASS DLLIMPORT

#endif /* _TCLOOINTDECLS */
