13#include <tclIntDecls.h>
21#if !defined(MOX_FILE_NAME)
22 #define MOX_FILE_NAME (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
39#if defined(MOX_IGNORE_EXTERN)
43# if defined(DLL_EXPORT)
45# if defined(MOX_BUILD_DLL)
46# define MOX_EXTERN __declspec(dllexport)
48# define MOX_EXTERN __declspec(dllimport)
52# define MOX_EXTERN __attribute__ ((visibility("default")))
61#if defined(MOX_PRIVATE)
62# define MOX_EXTERN_DATA extern
63#elif defined(MOX_IGNORE_EXTERN)
64# define MOX_EXTERN_DATA extern
67# if defined(DLL_EXPORT)
69# if defined(MOX_BUILD_DLL)
70# define MOX_EXTERN_DATA __declspec(dllexport)
72# define MOX_EXTERN_DATA __declspec(dllimport)
76# define MOX_EXTERN_DATA __attribute__ ((visibility("default"))) extern
79# define MOX_EXTERN_DATA extern
83#define MOX(n) libmyoox_ ## n
85#define NS(n) libmyoox_ ## n
91 #error "ATTENTION: not tested on Microsoft"
95 # define __attribute__(dummy)
96 # define __func__ __FUNCTION__
97 # define MOX_CLRCALL __clrcall
98 # define MOX_STDCALL __stdcall
99 # define MOX_CDECL __cdecl
102 # define mox_inline static inline
103 # define mox_unlink _unlink
104 # define mox_snprintf _snprintf
106 # define MOX_ATTR_HOT ???
107 # define MOX_ATTR_COLD ???
118 # define mox_inline static inline
119 # define mox_unlink unlink
120 # define mox_snprintf snprintf
122 # define MOX_ATTR_HOT __attribute__((hot))
123 # define MOX_ATTR_COLD __attribute__((cold))
128 # define MOX_DECL MOX_CLRCALL
129#elif defined(META_COMPILE_AS_CC)
130 # define MOX_DECL MOX_STDCALL
132 # define MOX_DECL MOX_CDECL
141#define MOX_UNUSED __attribute__((unused))
143#define MOX_SETUP_interp MOX_UNUSED MOX_ENV_T interp = moxrt->interp
152#define MOX_RT_SIG 0x66a1499b
167 #define regTclObj(t) MOX_OBJ_T t;
168 #define regTclObj2(t,v) MOX_OBJ_T t;
169 #define regTclCmd(t) MOX_OBJ_T t;
170 #define regTclArray(m,t) MOX_OBJ_T t[m];
181#define MOX(n) libmyoox_ ## n
183#define NS(n) libmyoox_ ## n
185#define MOX_ARGS MOX_ENV_T interp, int objc, MOX_OBJ_T const objv[]
186#define MOX_ARGS_CALL interp, objc, objv
188#define MOX_CMD_ARGS MOX_PTR clientData, MOX_ARGS
189#define MOX_CMD_ARGS_CALL clientData, MOX_ARGS_CALL
191#define MOX_CPPXSTR(s) MOX_CPPSTR(s)
192#define MOX_CPPSTR(s) #s
194#define MoxErrorStack() \
195 Tcl_AppendResult(interp,"\nERROR-STACK: func=",__func__,", file=",__FILE__,", line=",MOX_CPPXSTR(__LINE__),NULL)
197#define regTclCmd(t) MOX_EXTERN int MOX_DECL MOX(t) (MOX_CMD_ARGS);
201#define ClassN(...) MOX(ClassN_direct)(moxrt,interp,__VA_ARGS__)
204#define MoxCreate3N(...) MOX(Create3N_direct)(moxrt,interp,__VA_ARGS__)
216#define MoxMakeNNN(...) MOX(MakeNNN_direct)(moxrt,interp,__VA_ARGS__)
226#define MoxMakeN(...) MOX(MakeN_direct)(moxrt,interp,__VA_ARGS__)
235#define MoxDestroyN(...) MOX(DestroyN_direct)(moxrt, interp,__VA_ARGS__)
248#define MoxResolveN(nsO) MOX(ResolveN)(interp, nsO)
252 Tcl_Namespace *nsPtr;
253 if (TclGetNamespaceFromObj(interp,nsO,&nsPtr) != TCL_OK)
261#define MoxPushN(...) Namespace * nsSave = MOX(NsPush)(interp,__VA_ARGS__)
263 Interp *iPtr = (Interp *) interp;
264 Namespace * savedNsPtr = iPtr->varFramePtr->nsPtr;
265 iPtr->varFramePtr->nsPtr = (Namespace *) nsPtr;
269#define MoxPopN() MOX(NsPop)(interp,nsSave)
271 Interp *iPtr = (Interp *) interp;
272 iPtr->varFramePtr->nsPtr = savedNsPtr;
276#define MoxNsEval(_nsPtr) \
277 Namespace *savedNsPtr=NULL; \
278 for (savedNsPtr = MOX(NsPush)(interp,_nsPtr); savedNsPtr ; savedNsPtr=MOX(NsPop)(interp,savedNsPtr) )
280#define MoxNsErrorRaise(_nsPtr) goto error_ ## _nsPtr
282#define MoxNsErrorCatch(_nsPtr) error_ ## _nsPtr: MOX_UNUSED ; \
283 if ( savedNsPtr && ((savedNsPtr=MOX(NsPop)(interp,savedNsPtr))==NULL) )
285#define MoxNsGetVar(ns,tok) Tcl_ObjGetVar2(interp,moxrt->ns,moxrt->tok,TCL_NAMESPACE_ONLY|TCL_LEAVE_ERR_MSG)
286#define MoxNsSetVar(ns,tok,new) Tcl_ObjSetVar2(interp,moxrt->ns,moxrt->tok,new,TCL_NAMESPACE_ONLY|TCL_LEAVE_ERR_MSG)
296#define MoxMy__CLASS__N(nsO) MOX(My__CLASS__N)(moxrt, nsO, TCL_LEAVE_ERR_MSG)
297#define MoxMy__CLASS__NN(nsP,f) MOX(My__CLASS__NN)(moxrt, nsP, f)
298#define MoxMy__CLASS__NNN(f) MOX(My__CLASS__NNN)(moxrt, f)
301 return Tcl_ObjGetVar2(moxrt->interp,moxrt->my,moxrt->__CLASS__,TCL_NAMESPACE_ONLY|flags);
314 if (myNsO==NULL)
return NULL;
316 if (myNsP==NULL)
return NULL;
320#define MoxMyIsNNN() MOX(MyIsNNN)(moxrt)
321#define MoxMyIsNN(nsP) MOX(MyIsNN)(moxrt,nsP)
322#define MoxMyIsN(nsO) MOX(MyIsN)(moxrt,nsO)
340 if (myNsP == NULL)
return false;
347#define MoxCls__SUPER__NNN(f) MOX(Cls__SUPER__NNN)(moxrt, f)
348#define MoxCls__SUPER__NN(nsP,f) MOX(Cls__SUPER__NN)(moxrt, nsP,f)
349#define MoxCls__SUPER__N(nsO) MOX(Cls__SUPER__N)(moxrt, nsO,TCL_LEAVE_ERR_MSG)
352 return Tcl_ObjGetVar2(moxrt->interp,moxrt->cls,moxrt->__SUPER__,TCL_NAMESPACE_ONLY|flags);
365 if (myNsO==NULL)
return NULL;
367 if (myNsP==NULL)
return NULL;
371#define MoxCls__NAME__NNN(f) MOX(Cls__NAME__NNN)(moxrt, f)
372#define MoxCls__NAME__NN(nsP,f) MOX(Cls__NAME__NN)(moxrt, nsP,f)
373#define MoxCls__NAME__N(nsO) MOX(Cls__NAME__N)(moxrt, nsO,TCL_LEAVE_ERR_MSG)
376 return Tcl_ObjGetVar2(moxrt->interp,moxrt->cls,moxrt->__NAME__,TCL_NAMESPACE_ONLY|flags);
389 if (myNsO==NULL)
return NULL;
391 if (myNsP==NULL)
return NULL;
395#define MoxClsIsNNN() MOX(ClsIsNNN)(moxrt)
396#define MoxClsIsNN(nsP) MOX(ClsIsNN)(moxrt,nsP)
397#define MoxClsIsN(nsO) MOX(ClsIsN)(moxrt,nsO)
415 if (myNsP == NULL)
return false;
419#define MoxCls__NS__NNN(f) MOX(Cls__NS__NNN)(moxrt, f)
420#define MoxCls__NS__NN(nsP,f) MOX(Cls__NS__NN)(moxrt, nsP,f)
421#define MoxCls__NS__N(nsO) MOX(Cls__NS__N)(moxrt, nsO,TCL_LEAVE_ERR_MSG)
424 return Tcl_ObjGetVar2(moxrt->interp,moxrt->cls,moxrt->__NS__,TCL_NAMESPACE_ONLY|flags);
437 if (myNsO==NULL)
return NULL;
439 if (myNsP==NULL)
return NULL;
#define MoxCls__SUPER__NN(nsP, f)
mox_inline bool MOX ClsIsNNN(MOX_RT_T moxrt)
mox_inline MOX_OBJ_T MOX My__CLASS__N(MOX_RT_T moxrt, MOX_OBJ_T myNsO, int flags)
mox_inline MOX_OBJ_T MOX Cls__NS__NN(MOX_RT_T moxrt, MOX_NS_T myNsP, int flags)
mox_inline bool MOX MyIsNN(MOX_RT_T moxrt, MOX_NS_T nsP)
mox_inline MOX_OBJ_T MOX Cls__NS__NNN(MOX_RT_T moxrt, int flags)
mox_inline MOX_NS_T MOX ResolveN(MOX_ENV_T interp, MOX_OBJ_T nsO)
mox_inline MOX_OBJ_T MOX Cls__NAME__NNN(MOX_RT_T moxrt, int flags)
#define MOX_EXTERN
static library
mox_inline MOX_OBJ_T MOX Cls__NS__N(MOX_RT_T moxrt, MOX_OBJ_T myNsO, int flags)
MOX_EXTERN MOX_OBJ_T MOX_DECL MOX MakeN_direct(MOX_RT_T moxrt, MOX_ENV_T interp, MOX_OBJ_T clsNsO, MOX_OBJ_T XnameO, MOX_OBJ_T XnsO)
mox_inline bool MOX MyIsNNN(MOX_RT_T moxrt)
mox_inline bool MOX ClsIsNN(MOX_RT_T moxrt, MOX_NS_T nsP)
MOX_EXTERN int MOX_DECL MOX DestroyN_direct(MOX_RT_T moxrt, MOX_ENV_T interp, MOX_OBJ_T myNsO)
mox_inline MOX_OBJ_T MOX Cls__SUPER__N(MOX_RT_T moxrt, MOX_OBJ_T myNsO, int flags)
mox_inline MOX_OBJ_T MOX My__CLASS__NNN(MOX_RT_T moxrt, int flags)
mox_inline Namespace *MOX NsPop(MOX_ENV_T interp, Namespace *savedNsPtr)
MOX_EXTERN MOX_OBJ_T MOX_DECL MOX MakeNNN_direct(MOX_RT_T moxrt, MOX_ENV_T interp, MOX_OBJ_T clsNsO, MOX_OBJ_T XnameO, MOX_OBJ_T XnsO)
mox_inline bool MOX ClsIsN(MOX_RT_T moxrt, MOX_OBJ_T nsO)
#define MoxCls__NAME__NNN(f)
mox_inline MOX_OBJ_T MOX Cls__SUPER__NN(MOX_RT_T moxrt, MOX_NS_T myNsP, int flags)
#define MoxCls__SUPER__NNN(f)
mox_inline MOX_OBJ_T MOX My__CLASS__NN(MOX_RT_T moxrt, MOX_NS_T myNsP, int flags)
#define MoxMy__CLASS__NN(nsP, f)
MOX_EXTERN int MOX_DECL MOX Create3N_direct(MOX_RT_T moxrt, MOX_ENV_T interp, MOX_OBJ_T clsNsO, MOX_OBJ_T XnameO, MOX_OBJ_T XnsO, int objc, const MOX_OBJ_T *objv)
#define MoxMy__CLASS__NNN(f)
mox_inline MOX_OBJ_T MOX Cls__NAME__N(MOX_RT_T moxrt, MOX_OBJ_T myNsO, int flags)
mox_inline MOX_OBJ_T MOX Cls__SUPER__NNN(MOX_RT_T moxrt, int flags)
mox_inline bool MOX MyIsN(MOX_RT_T moxrt, MOX_OBJ_T nsO)
#define MoxCls__NS__NN(nsP, f)
mox_inline MOX_OBJ_T MOX Cls__NAME__NN(MOX_RT_T moxrt, MOX_NS_T myNsP, int flags)
MOX_EXTERN int MOX_DECL MOX ClassN_direct(MOX_RT_T moxrt, MOX_ENV_T interp, MOX_OBJ_T clsNsO, MOX_OBJ_T XcodeO)
#define MoxCls__NAME__NN(nsP, f)
mox_inline Namespace *MOX NsPush(MOX_ENV_T interp, MOX_NS_T nsPtr)
#define MoxCls__NS__NNN(f)