theSq3Lite 10.0
Loading...
Searching...
No Matches
LibMkKernel_atl.h
Go to the documentation of this file.
1
9#pragma once
10
11#include "libmyoox_mox.h"
12#include "LibMkKernel_mk.h"
13
16#if !defined(META_FILE_NAME)
17 #define META_FILE_NAME (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
18#endif
20#if 0
21 #define OT_DEBUG_NAMESPACE_DELETE(c,...) do { \
22 mk_dbg_color_ln(c, "delete namespace %-3s : " __VA_ARGS__); \
23 /* MkSysPrintStackTrace_RT(NULL,NULL,0,__func__,1,0,-1); */ \
24 } while (0)
25#else
26 #define OT_DEBUG_NAMESPACE_DELETE(...)
27#endif
28
29/*****************************************************************************/
30/* */
31/* Macro_API */
32/* */
33/*****************************************************************************/
34
35// BEGIN-HEADER - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
36
37#undef HEADER
38#define HEADER
40// If the source of libmkkernel is direct used in an external library
41// (without dynamic linking) and this library should *not* export
42// the symbol's of libmkkernel then the flag META_IGNORE_EXTERN have
43// to be set
44#undef MK_ATL_EXTERN
45#if defined(META_IGNORE_EXTERN)
46# define MK_ATL_EXTERN
47#elif defined(PIC)
48 // does we build a DLL ?
49# if defined(DLL_EXPORT)
50 // does we build the libmkkernel library ?
51# if defined(MK_ATL_BUILD_DLL)
52# define MK_ATL_EXTERN __declspec(dllexport)
53# else
54# define MK_ATL_EXTERN __declspec(dllimport)
55# endif
56# else
57 // no DLL - architecture specific extern specifier
58# define MK_ATL_EXTERN __attribute__ ((visibility("default")))
59# endif
60#else
62# define MK_ATL_EXTERN
63#endif
64
65// external data lookup
66#undef MK_ATL_EXTERN_DATA
67#if defined(META_PRIVATE)
68# define MK_ATL_EXTERN_DATA extern
69#elif defined(META_IGNORE_EXTERN)
70# define MK_ATL_EXTERN_DATA extern
71#elif defined(PIC)
72 // does we build a DLL ?
73# if defined(DLL_EXPORT)
74 // does we build the libmkkernel library ?
75# if defined(MK_ATL_BUILD_DLL)
76# define MK_ATL_EXTERN_DATA __declspec(dllexport)
77# else
78# define MK_ATL_EXTERN_DATA __declspec(dllimport)
79# endif
80# else
81 // no DLL - architecture specific extern specifier
82# define MK_ATL_EXTERN_DATA __attribute__ ((visibility("default"))) extern
83# endif
84#else
85# define MK_ATL_EXTERN_DATA extern
86#endif
87
88#undef MK
89#define MK(n) atlmkkernel_ ## n
90#undef NS
91#define NS(n) atlmkkernel_ ## n
92
93// END-HEADER - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
94
95#define META_CONTEXT_S hdl
96
97#define OT_ProcRet int
98
99#define ATL_OBJV_ARGS int objc, OT_OBJ_T const objv[]
100#define ATL_OBJV_ARGS_CALL objc, objv
101
102#define ATL_ARGS OT_ENV_T interp, int objc, OT_OBJ_T const objv[]
103#define ATL_ARGS_CALL interp, objc, objv
104
105#define OBJECT_ARGS ClientData clientData, ATL_ARGS
106#define OBJECT_ARGS_CALL hdl, ATL_ARGS_CALL
107
108#define OBJCMD_ARGS ClientData clientData, ATL_ARGS
109#define OBJCMD_ARGS_CALL clientData, ATL_ARGS_CALL
110
111#define CONSTR_ARGS OBJECT_ARGS
112
113#define SKIP_ARGS ATL_ARGS, int __skip
114#define SKIP_ARGS_CALL ATL_ARGS_CALL, __skip
115
116#define OtClass_ARGS OBJECT_ARGS
117#define OtClass_ARGS_CALL OBJECT_ARGS_CALL
118
119// class args ******************************************************************************
120
121// BEGIN-Class-def - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
122
123#define MkBufferListC_ARGS OBJECT_ARGS
124#define MkBufferListC_ARGS_CALL OBJECT_ARGS_CALL
125#define MkBufferC_ARGS OBJECT_ARGS
126#define MkBufferC_ARGS_CALL OBJECT_ARGS_CALL
127#define MkBufferStreamC_ARGS OBJECT_ARGS
128#define MkBufferStreamC_ARGS_CALL OBJECT_ARGS_CALL
129#define MkErrorC_ARGS OBJECT_ARGS
130#define MkErrorC_ARGS_CALL OBJECT_ARGS_CALL
131#define MkLogFileC_ARGS OBJECT_ARGS
132#define MkLogFileC_ARGS_CALL OBJECT_ARGS_CALL
133#define MkObjectC_ARGS OBJECT_ARGS
134#define MkObjectC_ARGS_CALL OBJECT_ARGS_CALL
135#define MkRuntimeC_ARGS OBJECT_ARGS
136#define MkRuntimeC_ARGS_CALL OBJECT_ARGS_CALL
137
138// END-Class-def - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
139
140// setup ***********************************************************************************
141
142#define OT_SETUP_ARGS_ALL(d) \
143 OT_OBJ_T retObj=NULL; \
144 MK_UNUSED static const MK_STRN __doc=d; \
145 MK_UNUSED OT_OBJ_T frame=NULL; \
146
147#define OT_FRAME_CLEANUP if (frame != NULL) { Tcl_DecrRefCount(frame); frame = NULL; }
148
149#define OT_SETUP_VARARGS(min,max,d) \
150 OT_SETUP_ARGS_ALL(d) \
151 OT_CHECK_NUM_ARGS(min,max)
152
153#define OT_SETUP_CONSTRUCTOR_ARGS(...) OT_SETUP_VARARGS(__VA_ARGS__)
154
155#define OT_SETUP_ONEARG(d) \
156 OT_SETUP_ARGS_ALL(d) \
157 OT_CHECK_NUM_ARGS(1,1)
158
159#define OT_SETUP_NOARG(d) \
160 OT_SETUP_ARGS_ALL(d) \
161 OT_CHECK_NUM_ARGS(0,0)
162
163#define OT_SETUP_obj MK_OBJ obj = OBJ
164#define OT_SETUP_doc __attribute__((unused)) const MK_STRN __doc = __func__;
165
166#define SETUP_ARGS MK_RT_ARGS ATL_ARGS
167#define SETUP_ARGS_CALL MK_RT_CALL ATL_ARGS_CALL
168
169//#define OT_retObj_CONSTR(x) retObj = SELF2VAL(AtomCreateCONSTR(MkOBJ(x),OT_CLASS,nameO));
170#define OT_CONSTRUCTOR_POST(x)
171
172#define OT_retObj_SET(val) retObj = (val)
173#define OT_retObj_SET_isPtr ((long)retObj) > 0x1
174#define OT_retObj_SET_None retObj = ((OT_OBJ_T)0x1)
175#define OT_retObj_SET_isNone ((long)retObj) == 0x1
176#define OT_retObj_SET_Error retObj = NULL
177 /*Tcl_AppendResult(interp,"\n -> found in: ", doc, NULL);*/
178#define OT_retObj_SET_List retObj = Tcl_NewListObj(0,NULL)
179#define OT_retObj_APPEND(var) check_LNG(Tcl_ListObjAppendElement(interp,retObj,var)) goto error
180#define OT_retObj_RETURN do { \
181 if (OT_retObj_SET_isPtr) { \
182 Tcl_SetObjResult(interp,retObj); \
183 return TCL_OK; \
184 } else if (OT_retObj_SET_isNone) { \
185 Tcl_ResetResult(interp); \
186 return TCL_OK; \
187 } else { \
188 return TCL_ERROR; \
189 } \
190} while (0)
191
192#define OT_retObj_SET_BOL(nat) retObj = BOL2VAL(nat);
193#define OT_retObj_SET_I8(nat) retObj = I82VAL(nat);
194#define OT_retObj_SET_I16(nat) retObj = I162VAL(nat);
195#define OT_retObj_SET_U16(nat) retObj = U162VAL(nat);
196#define OT_retObj_SET_I32(nat) retObj = INT2VAL(nat);
197#define OT_retObj_SET_I64(nat) retObj = I642VAL(nat);
198#define OT_retObj_SET_LLG(nat) retObj = LLG2VAL(nat);
199#define OT_retObj_SET_FLT(nat) retObj = FLT2VAL(nat);
200#define OT_retObj_SET_DBL(nat) retObj = DBL2VAL(nat);
201#define OT_retObj_SET_BIN(nat,len) retObj = BIN2VAL(nat,len);
202#define OT_retObj_SET_STR(nat) retObj = STRN2VAL(nat);
203#define OT_retObj_SET_STRN(nat) retObj = STRN2VAL(nat);
204#define OT_retObj_SET_LONG(nat) retObj = LONG2VAL(nat);
205#define OT_retObj_SET_HDL(nat) retObj = HDL2VAL(nat);
206
207// METHOD CALL **********************************************************************
208
209#if 0
210
211#define OT_MK_CALL_0_v1
212
213// calling an object TROUGH the Tcl_Eval api
214#define OT_MK_CALL_0(hdl,cls,meth,ret) \
215{
216 ret = MK(EvalObjvVR)(NULL,interp,0,MK(cls##_ObjNew)(interp,hdl),MK(cls##_##meth##_Obj),NULL);
217}
218
219#else
220
221// call an method direct.
222// !! ATTENTION !! the "selfO" is NULL -> do NOT use this call for any "internal" usage.
223#define OT_MK_CALL_0(hdl,cls,meth,ret) { \
224 OT_SELF_T selfO = cls##_ObjNew(hdl); \
225 assert(selfO != NULL); \
226 RL_init(2,cls##_##meth,RL_NewS(0,MK_CPPXSTR(::cls::meth))) ; RL_O(1,SELF2VAL(selfO)) ; \
227 check_LNG(RL_EvalEx(TCL_EVAL_GLOBAL)) goto error; \
228 ret = Tcl_GetObjResult(interp); \
229}
230
231#endif
232
233// MARK_R ---------------------------------------------------------------------------
234// Runtime
235
236typedef MOX_PTR OT_PTR_T ;
237typedef MOX_ENV_T OT_ENV_T ;
238typedef MOX_NS_T OT_NS_T ;
239typedef MOX_CLS_T OT_CLS_T ;
240typedef MOX_OBJ_T OT_OBJ_T ;
241
243typedef MOX_OBJ_T OT_SELF_T ;
244
250
251#define OT_MK_RT_SIG 0x62384526
252
253struct AtlClassDefS;
254
255typedef struct {
257 //OT_MK_RT_StatusE status;
260 MOX_RT_T moxrt;
261 #define AtlClassName_buf_size 64
262 char AtlClassName_buf[AtlClassName_buf_size];
263
264 #define regTclObj(t) OT_OBJ_T t;
265 #define regTclObj2(t,v) OT_OBJ_T t;
266 #define regTclCmd(t) OT_OBJ_T t;
267 #define regTclArray(m,t) OT_OBJ_T t[m];
269 #undef regTclArray
270 #undef regTclCmd
271 #undef regTclObj
272 #undef regTclObj2
273
274 const Tcl_ObjType *LONG;
275 const Tcl_ObjType *WIDE;
276 const Tcl_ObjType *DOUBLE;
277 const Tcl_ObjType *BOOLEAN;
278 const Tcl_ObjType *INDEX;
279 const Tcl_ObjType *NS;
280
282
283 // BEGIN-CLASS-rt - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
284
313
314 // END-CLASS-rt - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
315
316} OT_MK_RT_S;
318
320
321#define OT_MK_ARGS OT_MK_RT_T amkrt, OT_ENV_T interp, MK_RT_ARGS
322#define OT_MK_CALL amkrt, interp, MK_RT_CALL
323
324#define OT_LNG_NULL NULL
325#define OT_LNG_UNDEF NULL
326#define OT_LNG_RETURN(ret,cmd) \
327 check_LNG(cmd) goto error; \
328 ret = Tcl_GetObjResult(interp); \
329
330#define OT_LNG_NAME_FROM_OBJECT(_obj) VAL2STR(_obj)
331#define OT_LNG_NAME_FROM_CLASS(_cls) OT_LNG_NAME_FROM_OBJECT(_cls)
332#define OT_LNG_NAME_FROM_OBJ(_obj) OT_LNG_NAME_FROM_OBJECT(_obj)
333// silent assume a "OT_LNG_OBJECT_IS" or "OT_LNG_CLASS_IS" befor set "retP"
334#define OT_LNG_OBJ_CLASSNAME(val) MK(ClassName)(OT_Prefix_CALL val, false)
335#define OT_LNG_OBJ_CLASSNAME_SHORT(val) MK(ClassName)(OT_Prefix_CALL val, true)
336#define OT_OBJ_TYPE_STRING(val) MK(ClassName)(OT_Prefix_CALL val, false)
337
338// self adon
339#define OT_LNG_SELF_2_LNG(selfT) ((OT_OBJ_T)(selfT))
340
341#define OT_LNG_OBJV(__skip) objv[__skip]
342
343#define OT_OBJ_TO_CLASS(obj) obj
344#define OT_OBJ_TO_ENUM(str) #str
345
346#define OT_LNG_SET_VAR(var,val) \
347 if (Tcl_ObjSetVar2(interp, var, NULL, val, TCL_LEAVE_ERR_MSG) == NULL) goto error
348
349#define OT_LNG_EMBEDDED(type,call,...) ({ \
350 type ret = (type) 0; \
351 check_LNG(call (__VA_ARGS__,&ret)) { \
352 OT_ERROR_APPEND_LNG_STACK(); \
353 goto error; \
354 } \
355 ret; \
356})
357
358// ERROR ******************************************************************************
359
360#define OT_ERROR_LNG_RETURN return TCL_ERROR
361
362#define OT_ERROR_VAR_DEFAULT(...) Tcl_SetObjResult(interp,Tcl_ObjPrintf(__VA_ARGS__))
363#define OT_ERROR_STR_DEFAULT(...) Tcl_SetObjResult(interp,Tcl_NewStringObj(__VA_ARGS__,-1))
364
365#define OT_ERROR_TYPE(str) Tcl_SetObjResult(interp, Tcl_ObjPrintf("TYPE ERROR: %s", str))
366
367#define OT_ERROR_SOFT_CONSTRUCTOR(class) do { \
368 Tcl_SetResult(interp, "InitSoftError: '" #class "' soft constructor return 'NULL' pointer", TCL_STATIC); \
369} while (0)
370
371#define OT_ERROR_CONSTRUCTOR(class) do { \
372 Tcl_SetResult(interp, "InitError: '" #class "' constructor return 'NULL' pointer", TCL_STATIC); \
373 if (MkErrorCheckE_0E()) { \
374 Tcl_AppendResult(interp, "\nMqError: ", MkErrorGetText_0E(), NULL); \
375 MkErrorReset_0M(); \
376 } \
377} while (0)
378
379// !! attention → always jumps to error
380#define OT_ERROR_NUMARGS(...) \
381 MkErrorC_CheckD(WrongNumArgs(__VA_ARGS__))
382
383#define OT_ERROR_ABNORMAL(mng) do { \
384 MkErrorSetV_4M(mng,__func__,999,"AbnormalError: %s", Tcl_GetStringResult(interp));\
385 Tcl_ResetResult(interp); \
386} while (0)
387
388#define OT_ERROR_APPEND_LNG_STACK() \
389 Tcl_AppendResult(interp,"\nERROR-STACK: func=",__func__,", file=",__FILE__,", line=",MK_CPPXSTR(__LINE__),NULL)
390
391// =============================================================================================================
392// return
393
394#define OT_ERROR_LNG_RETURN_VAR_ERROR(...) return ({ OT_ERROR_VAR_DEFAULT(__VA_ARGS__); TCL_ERROR; })
395#define OT_ERROR_LNG_RETURN_STR_ERROR(...) return ({ OT_ERROR_STR_DEFAULT(__VA_ARGS__); TCL_ERROR; })
396
397#define OT_ERROR_LNG_RETURN_HDL_NAT_NULL(_hdl) do { \
398 OT_ERROR_VAR_DEFAULT("[HdlIsNullError] : %s", MkObjectToString(_hdl)); \
399 return TCL_ERROR; \
400} while (0)
401
402#define OT_ERROR_LNG_RETURN_INVALID_CLASS(_clsHasS,_clsExpS) do { \
403 OT_ERROR_VAR_DEFAULT("[InvalidClassError] : Expect class '%s' but get class '%s'", _clsExpS, _clsHasS ); \
404 return TCL_ERROR; \
405} while (0)
406
407#define OT_ERROR_LNG_RETURN_HDL_IS_NULL() return MK(OT_ERROR_LNG_RETURN_HDL_IS_NULL)(OT_MK_CALL OT_CLASS, OT_SELF)
409
410// check *********************************************************************************
411
412#define OT_Prefix_ARGS OT_MK_ARGS
413#define OT_Prefix_CALL OT_MK_CALL
414#define OT_Check_ARGS OT_MK_ARGS MK_MNG hdl, MK_STRN const arg, ATL_OBJV_ARGS, int *skipP
415#define OT_Check_CALL(arg) OT_MK_CALL hdl, arg, ATL_OBJV_ARGS_CALL, &__skip
416#define OT_Check_CALL2(arg) OT_MK_CALL hdl, arg, ATL_OBJV_ARGS_CALL, skipP
417
418#define OT_CHECK_OPTIONAL(val) if (__skip < objc) {val}
419#define OT_CHECK_REQUIRED(val) val
420
421#define OT_CHECK_NUM_ARGS(min,max) \
422 if ((objc-__skip) < min || (objc-__skip) > max) { \
423 OT_ERROR_NUMARGS(hdl,__skip, objc, min, max, ""); \
424 }
425// printLV("objc<%i>, __skip<%i>, min<1>, max<999>\n",objc, __skip);
426
427#define OT_CHECK_NOARGS \
428 if (__skip != objc) { \
429 OT_ERROR_NUMARGS(hdl,objc, __skip, -999, +999, ""); \
430 }
431
432#define OT_GET_CONSTR_NAME(ctor) VAL2STR(MoxCls__NAME__N(ctor))
433
434#define OT_CHECK_BNP(val,len) \
435 if (__skip >= objc) {\
436 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
437 } else { \
438 int i; \
439 val = (MK_BINN) Tcl_GetByteArrayFromObj(objv[__skip++], &i); \
440 len = (MK_SIZE)i; \
441 }
442
443#define OT_CHECK_BCP(val) \
444 if (__skip >= objc) {\
445 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
446 } else { \
447 val = (MK_BIN) Tcl_GetByteArrayFromObj(objv[__skip++], NULL); \
448 }
449
450#define OT_CHECK_BCPN(val) \
451 if (__skip >= objc) {\
452 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
453 } else { \
454 val = (MK_BINN) Tcl_GetByteArrayFromObj(objv[__skip++], NULL); \
455 }
456
457// ----------------------------------------------------------------------------
458
459#define MkErrorC_Check(mng,PROC) \
460 if (unlikely(MkErrorCheckI(PROC))) { \
461 OT_ERROR_META_2_LNG(mng); goto error; \
462 }
463
464#define MkErrorC_CheckD(PROC) \
465 if (unlikely(MkErrorCheckI(PROC))) { \
466 OT_ERROR_META_2_LNG(hdl); goto error; \
467 }
468
469#define OT_ERROR_META_2_LNG(m) MK(MkExceptionC_Raise) (OT_Prefix_CALL m, __doc, __FILE__, __LINE__)
470#define OT_ERROR_LNG_2_META(m) MK(MkExceptionC_Catch) (OT_Prefix_CALL m, NULL, __func__)
471
472#define check_LNG(code) if ((code) != TCL_OK)
473#define check_NULL(code) if ((code) == NULL)
474#define check_META(code) if (MkErrorCheckI(code))
475
476// new object ******************************************************************************
477
478#define OT_TMP_BOL_OBJ(val) BOL2VAL(val)
479#define OT_TMP_I8_OBJ(val) I82VAL(val)
480#define OT_TMP_I16_OBJ(val) I162VAL(val)
481#define OT_TMP_I32_OBJ(val) INT2VAL(val)
482#define OT_TMP_I64_OBJ(val) I642VAL(val)
483#define OT_TMP_FLT_OBJ(val) FLT2VAL(val)
484#define OT_TMP_DBL_OBJ(val) DBL2VAL(val)
485#define OT_TMP_BIN_OBJ(val,len) BIN2VAL(val,len)
486#define OT_TMP_STR_OBJ(val) STRN2VAL(val)
487#define OT_TMP_CST_OBJ(val) STRN2VAL(val)
488
489// atom ******************************************************************************
490
492mk_inline bool MK_DECL MK(AtomDeleteHard) (OT_MK_ARGS OT_SELF_T);
493mk_inline void MK_DECL MK(AtomDispose) (OT_MK_ARGS OT_SELF_T);
494
495// THIS is an soft-delete called from the "<destructor>", SOFT mean that SELF is already on-DELETE
496#define OT_OBJECT_DELETE_SOFT(O) error: done in Atom_ns_delete
497
498// THIS is an hard-delete called from everywhere, HARD mean that SELF have to be deleted too
499#define OT_OBJECT_DELETE_HARD(O) MK(AtomDeleteHard) (OT_MK_CALL O)
500
501// THIS is an "dispose" delete the link between LNG an META
502#define OT_OBJECT_DISPOSE(O) MK(AtomDispose) (OT_MK_CALL O)
503// This is the delete via the destructor which is called via "DestroyN" which destroy the "namespace"
504#define OT_OBJECT_DELETE(O) MK(AtomDispose) (OT_MK_CALL O)
505
506#define OT_REF_INCR(_obj) Tcl_IncrRefCount(_obj)
507#define OT_REF_DECR(_obj) Tcl_DecrRefCount(_obj)
508#define OT_REF_INCR_AND_RETURN(_obj) ({ Tcl_IncrRefCount(_obj); _obj;})
509#define OT_REF_DECR_AND_NULL(_obj) if (_obj) { Tcl_DecrRefCount (_obj) ; _obj = NULL; }
510
511// call ******************************************************************************
512
513#define MkCallS_SIG 0x30364351
523
524typedef struct MkCallS {
527 OT_OBJ_T my; // if "MkCallS_static" -> this is the CLASS "my"
528 OT_OBJ_T mth; // if 'proc' than NULL if 'method' than "method-name"
529 OT_OBJ_T args; // additionals arguments passed to the calling proc at beginning of the argument list
530 MK_MNG hdl; // always the 'hdl'
531 OT_MK_RT_T amkrt; // always the 'atl-runtime'
532 bool isAlloc; // instance was alloced
533 OT_CLS_T nsO; // SLOW but secure: namespace of the check proc ATTENTION class NS have to be constant
534 MK_RT mkrt; // used to setup local "mkrt" if "mkrt" is NOT part of the callback-args
535
537
538MK_ATL_EXTERN void MK(CallLog) ( MK_RT_ARGS MkCallS *call, MK_STRN caller );
539#define MkCallLog(c) MK(CallLog) ( MK_RT_CALL_NULL (c), __func__ )
540
541#define MkProcResolve_maxArgsLen 16
542MK_ATL_EXTERN enum MkErrorE MK_DECL MK(ProcResolve) ( OT_MK_ARGS MK_MNG, struct MkCallS* );
543
544mk_inline void MK(ProcResolveAppendArgs) (
545 struct MkCallS *call,
546 int *objcP,
547 OT_OBJ_T objv[]
548) {
549 assert(call != NULL);
550 assert(objcP != NULL);
551 assert(objv != NULL);
552
553 if (call->args == NULL) return;
554 int myobjc;
555 OT_OBJ_T *myobjv;
556 int objc = *objcP;
557 // call->args already checked to be a valid TCL-LIST
558 Tcl_ListObjGetElements(NULL,call->args,&myobjc,&myobjv);
559 for (int i=0; i<myobjc; i++) {
560//printLLngObj(objv[i])
561 objv[objc++] = myobjv[i];
562 }
563 *objcP = objc;
564}
565
566mk_inline void MK(CallFree) ( MK_CBP *dataP )
567{
568 if (amkrtR.signature != OT_MK_RT_SIG) return;
569
570 MkCallS * call = *dataP;
571
572//MkCallLog(call);
573
574 call->signature = 0x0;
575
580
581 if (call->isAlloc) MkSysFree(*dataP);
582 else *dataP = NULL;
583}
584
585mk_inline void MK(CallFreeOnce) ( MK_CBP *callP )
586{
587 MK(CallFree) (callP);
588}
589
590#ifdef META_HAS_THREAD
591 #define OT_OBJ_COPY(o) ({OT_OBJ_T t=(o); if (t) { t = Tcl_NewStringObj(Tcl_GetString(t),-1); OT_REF_INCR(t); }; t; })
592#else
593 #define OT_OBJ_COPY(o) ({OT_OBJ_T t=(o); if (t) { OT_REF_INCR(t); }; t; })
594#endif
595
596mk_inline void MK(CallCopy) ( MK_RT_ARGS MK_OBJ obj, MK_CBP *dataP )
597{
598 assert (dataP != NULL && *dataP != NULL);
599
600 MkCallS *call = MkSysMemDup(MK_ERROR_PANIC,*dataP,sizeof(*call));
601 call->isAlloc = true;
602
603 call->my = OT_OBJ_COPY (call->my) ;
604 call->mth = OT_OBJ_COPY (call->mth) ;
605 call->args = OT_OBJ_COPY (call->args) ;
606 call->nsO = OT_OBJ_COPY (call->nsO) ;
607
608 *dataP = call;
609}
610
611/*
612#define CallProlog(m) \
613 OT_MK_RT_T const amkrt = call->amkrt; \
614 if (amkrt->signature != OT_MK_RT_SIG) { \
615 mk_warning("amkrt->signature <%p:%d>", amkrt, amkrt->signature); \
616 printSTACK_1(m); \
617 return MK_OK; \
618 } \
619 OT_ENV_T const interp = amkrt->interp; \
620 if (Tcl_InterpDeleted(interp) ) { \
621 mk_warning("interp deleted <%p>", interp); \
622 printSTACK_1(m); \
623 return MK_OK; \
624 } \
625
626*/
627
628#define CallProlog(m) \
629 /* 1. setup runtime */ \
630 OT_MK_RT_T const amkrt = call->amkrt; \
631 assert (amkrt->signature == OT_MK_RT_SIG); \
632 OT_ENV_T const interp = amkrt->interp; \
633 assert (!Tcl_InterpDeleted(interp)); \
634 \
635 /* 2. setup arguments */ \
636 Tcl_Obj *objv[5+MkProcResolve_maxArgsLen]; \
637 \
638 rescan: \
639 int objc = 1; \
640 \
641 /* 1. setup methode */ \
642 objv[0] = call->mth; \
643 \
644 /* 2. setup my */ \
645 switch (call->type) { \
646 case MkCallS_own_method: \
647 dbgMsg("%s","MkCallS_own_method"); \
648 break; \
649 case MkCallS_static: \
650 dbgMsg("%s","MkCallS_static"); \
651 break; \
652 case MkCallS_proc: \
653 dbgMsg("%s","MkCallS_proc"); \
654 break; \
655 case MkCallS_other_method: \
656 dbgMsg("%s","MkCallS_other_method"); \
657 objv[objc++] = call->my; \
658 break; \
659 case MkCallS_init: { \
660 dbgMsg("%s","MkCallS_init"); \
661 check_META(MK(ProcResolve)(OT_MK_CALL (m), call)) goto error_mq; \
662 goto rescan; \
663 } \
664 case MkCallS_null: \
665 dbgMsg("%s","MkCallS_null"); \
666 return MK_OK; \
667 case MkCallS_error: \
668 dbgMsg("%s","MkCallS_error"); \
669 goto error; \
670 }
671
672// check *****************************************************************************
673
674#define NO_OtCheckEnum
675#define NO_OtCheckEnumFlag
676#define NO_TestObject
678
679#define OT_CHECK_ENUM(ename,val) \
680 if (__skip >= objc) {\
681 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
682 } else { \
683 check_LNG(Get_ ## ename ## _FromObj_path (MK_RT_CALL interp,objv[__skip++],&val)) goto error; \
684 }
685
686#define OT_CHECK_ENUM_FLAG(ename,val) \
687 if (__skip >= objc) {\
688 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
689 } else { \
690 check_LNG(Get_ ## ename ## _FromObj_path (MK_RT_CALL interp,objv[__skip++],&val)) goto error; \
691 }
692
693// object 2 native *************************************************************************
694
696
697#define OT_CHECK_LNGTMPL(val,func) MkErrorC_CheckD (func(OT_Check_CALL(#val),&val));
698
699#define OT_CHECK_bool(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsBOOL))
700#define OT_CHECK_NB1(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsBOL))
701#define OT_CHECK_NI1(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsI8))
702#define OT_CHECK_NI2(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsI16))
703#define OT_CHECK_U2N(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsU16))
704#define OT_CHECK_NI4(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsI32))
705#define OT_CHECK_U4N(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsU32))
706#define OT_CHECK_NI8(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsI64))
707#define OT_CHECK_IXN(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsLLG))
708#define OT_CHECK_NF4(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsFLT))
709#define OT_CHECK_NF8(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsDBL))
710#define OT_CHECK_STRN(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsSTRN))
711#define OT_CHECK_NIL(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsLONG))
712#define OT_CHECK_NIH(val) MK_HDL_REF_S3(OT_CHECK_) (val)
713
714#define OT_CHECK_STRN_NULL(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsCSTNull))
715
716MK_ATL_EXTERN enum MkErrorE MK_DECL MK(Obj_AsSTR_COPY) (OT_Check_ARGS,MK_STR,size_t);
717#define OT_CHECK_C_COPY(val,size) MkErrorC_CheckD (MK(Obj_AsSTR_COPY)(OT_Check_CALL(#val),val,size));
718
719// inspection *************************************************************************
720
721#define OT_GET_CALL_PROC MK(Get_Call_Proc)(OT_MK_CALL &frame)
722#define OT_GET_CALL_FILE MK(Get_Call_File)(OT_MK_CALL &frame)
723#define OT_GET_CALL_LINE MK(Get_Call_Line)(OT_MK_CALL &frame)
724
725#define FRAME_ARGS OT_MK_ARGS OT_OBJ_T * frameP
726#define FRAME_CALL OT_MK_CALL &frame
727
731MK_ATL_EXTERN bool MK_DECL MK(Get_Call_Stack) ( OT_MK_ARGS MK_ERR const, int );
732
733// enum ******************************************************************************
734
736 const char *key;
737 int val;
738};
739
740MK_ATL_EXTERN int MK_DECL MK(EnumFlagWorker) (MK_RT_ARGS OT_ENV_T , const struct LookupEnumE*, OT_OBJ_T , int*);
741
742// from MkBufferC_atl.c
744MK_ATL_EXTERN int MK_DECL MK(MkBufferC_GetBFL) (MkBufferC_ARGS);
745MK_ATL_EXTERN int MK_DECL MK(MkBufferC_Temp) (MkBufferC_ARGS);
746
747// from MkBufferListC_atl.c
749
753
754typedef int (*LookupClassF) (SKIP_ARGS);
755
757 const char *key;
759};
760
761#define WNA(min,max,txt) { \
762/* printObjV */ \
763 if (objc<(__skip+min) || objc>(__skip+max)) { \
764 Tcl_WrongNumArgs (interp, __skip, objv, txt); \
765 return TCL_ERROR; \
766 } \
767}
768
769#define AltClassDef(...) MK(ClassDef)(OT_MK_CALL __VA_ARGS__)
771
772typedef struct {
773 const char *name; /* Name of this type of method, mostly for
774 * debugging purposes. */
775 Tcl_ObjCmdProc *callProc; /* How to invoke this method. */
777
778#define AtlUnknownSetup(...) MK(UnknownSetup) (interp, __VA_ARGS__)
779MK_ATL_EXTERN int MK_DECL MK(UnknownSetup) (
780 OT_ENV_T,
781 const OtObjProcDefS[],
782 ClientData
783);
784
785//*****************************************************************************
786//*
787//* FRAME feature
788//*
789//*****************************************************************************
790
797typedef struct MkVarFrameS * OT_VARFRAME;
798
799#define OT_VARFRAME_CREATE \
800 struct MkVarFrameS otVarFrame = {50, 0}; otVarFrame.data = otVarFrame.prealloc; \
801 OT_VARFRAME varframe = &otVarFrame;
802
803#define OT_VARFRAME_DELETE { \
804 for (int i=0; i<varframe->num; i++) Tcl_DecrRefCount(varframe->data[i]); \
805 varframe = NULL; \
806}
807
808#define OT_VARFRAME_ARGS MK_RT_ARGS OT_VARFRAME varframe
809#define OT_VARFRAME_CALL MK_RT_CALL varframe
810
811static inline OT_OBJ_T MK(OT_VARFRAME_ADD)(OT_VARFRAME_ARGS, OT_OBJ_T add) {
812 if (varframe != NULL) {
813 if (varframe->num >= varframe->max) {
814 void *tmp;
815 if (varframe->data == varframe->prealloc) {
816 tmp = MkSysCalloc(MK_ERROR_PANIC,(size_t)varframe->max*2,sizeof(OT_OBJ_T));
817 memcpy(tmp,varframe->data,(size_t)varframe->max*sizeof(OT_OBJ_T));
818 } else {
819 tmp = MkSysReCalloc(MK_ERROR_PANIC,varframe->data,varframe->max,varframe->max,sizeof(OT_OBJ_T));
820 }
821 varframe->data = tmp;
822 varframe->max *= 2;
823 }
824 varframe->data[varframe->num++] = add;
825 Tcl_IncrRefCount(add);
826 }
827 return add;
828}
829
830#define OT_VARFRAME_OBJ_RESULT(itp) MK(OT_VARFRAME_ADD)(OT_VARFRAME_CALL,Tcl_GetObjResult(itp))
831
832
833/*****************************************************************************/
834/* MARK_F */
835/* functions */
836/* */
837/*****************************************************************************/
838
841MK_ATL_EXTERN int MK_DECL MK(EvalObjvVA) (OT_ENV_T, int, ...);
842
844MK_ATL_EXTERN enum MkErrorE MK_DECL MK(LngListToMkBufferListS) ( OT_Prefix_ARGS OT_OBJ_T , MK_BFL* );
845
846#define OT_EVAL_ARGS OT_ENV_T interp, int objc, OT_OBJ_T const objv[], int flags
847#define OT_EVAL_CALL interp, objc, objv , flags
848
850{
851 check_LNG(Tcl_EvalObjv (interp, objc, objv, flags)) return NULL;
852 return Tcl_GetObjResult(interp);
853}
854
856{
857//printAry2("objv",objc,objv)
858 check_LNG(Tcl_EvalObjv (interp, objc, objv, flags)) return NULL;
859 OT_OBJ_T result = OT_VARFRAME_OBJ_RESULT(interp);
860//printLng(result)
861 return result;
862}
863
864// The "MK(EvalObjv)" IS required to "cleanup" the "objv" after the "eval" to free TEMPORARY Tcl_Obj*
865mk_inline int NS(EvalObjv) ( OT_EVAL_ARGS )
866{
867 int i,ret;
868 for (i=0;i<objc;i++) Tcl_IncrRefCount(objv[i]);
869 ret = Tcl_EvalObjv (interp, objc, objv, flags);
870 for (i=0;i<objc;i++) Tcl_DecrRefCount(objv[i]);
871 return ret;
872}
873
874MK_ATL_EXTERN int MK_DECL MK(FillNamespace) (OT_ENV_T, const OtObjProcDefS[], ClientData);
875MK_ATL_EXTERN MK_ERR MK_DECL MK(MkExceptionC_Catch) (OT_Prefix_ARGS MK_MNG const, MK_EXP const, MK_STRN const);
876MK_ATL_EXTERN void MK_DECL MK(MkExceptionC_Raise) (OT_Prefix_ARGS MK_MNGN const, MK_STRN const, MK_STRN const, MK_I32);
877
878// from MkCall_atl.c
879
880void MK_DECL NS(ObjectDeleteFree) ( MkObjectDeleteFreeF_ARGS );
881enum MkErrorE MK_DECL NS(ObjectDeleteCall) ( MkObjectDeleteCallF_ARGS );
882
883// enum ******************************************************************************
884
885// BEGIN-enum-tostring - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
886
887#define OT_NEW_Mk_enum_OBJ(typ,val) MK(Mk ## typ ## _ToString(val))
888
890
892
894
896
897// END-enum-tostring - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
898
899// BEGIN-enum - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
900
901MK_ATL_EXTERN int MK_DECL MK(Get_MkErrorE_FromObj)(MK_RT_ARGS OT_ENV_T interp, OT_OBJ_T enumE, enum MkErrorE *ret);
902#define Get_MkErrorE_FromObj_path MK(Get_MkErrorE_FromObj)
903
904MK_ATL_EXTERN int MK_DECL MK(Get_MkIdSE_FromObj)(MK_RT_ARGS OT_ENV_T interp, OT_OBJ_T enumE, enum MkIdSE *ret);
905#define Get_MkIdSE_FromObj_path MK(Get_MkIdSE_FromObj)
906
907MK_ATL_EXTERN int MK_DECL MK(Get_MkTimeoutE_FromObj)(MK_RT_ARGS OT_ENV_T interp, OT_OBJ_T enumE, enum MkTimeoutE *ret);
908#define Get_MkTimeoutE_FromObj_path MK(Get_MkTimeoutE_FromObj)
909
910MK_ATL_EXTERN int MK_DECL MK(Get_MkTypeE_FromObj)(MK_RT_ARGS OT_ENV_T interp, OT_OBJ_T enumE, enum MkTypeE *ret);
911#define Get_MkTypeE_FromObj_path MK(Get_MkTypeE_FromObj)
912
913// END-enum - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
914
915//
916// ==================================================================================
917//
918
919#define SETUP_interp MK_UNUSED OT_ENV_T interp = amkrt->interp
920#define SETUP_moxrt MK_UNUSED MOX_RT_T moxrt = amkrt->moxrt; \
921 assert(moxrt && moxrt->signature == MOX_RT_SIG);
922#define SETUP_amkrt(r) MK_UNUSED OT_MK_RT_T const amkrt = (r) ? (r) : &amkrtR; \
923 assert(amkrt && amkrt->signature == OT_MK_RT_SIG); \
924 SETUP_interp; \
925 SETUP_moxrt
926
927#define OT_SELF_O(o) ((OT_SELF_T)(*o).self)
928#define OT_SELF_X(x) OT_SELF_O(MkOBJ(x))
929#define OT_SELF_M(m) OT_SELF_O((MK_OBJ)(m)) /* unsafe */
930#define OT_SELF selfO
931
932#define SetupHdlFromMetaData_init_2(_SHORT) \
933 MK_RT_SETUP_METHOD; \
934 int __skip; OT_SELF_T selfO; _SHORT hdl;
935
936#define SetupHdlFromMetaData_2(_SHORT) \
937 SetupHdlFromMetaData_init_2(_SHORT) \
938 if (objc < 2) OT_ERROR_LNG_RETURN_STR_ERROR("error: missing hdl argument"); \
939 __skip = 2; \
940 selfO = objv[1]; \
941 hdl = SELF2HDL(selfO); \
942 if (hdl == NULL) OT_ERROR_LNG_RETURN_HDL_IS_NULL();
943
944#define SetupHdlFromMetaData__null_allow_2(_SHORT) \
945 SetupHdlFromMetaData_init_2(_SHORT) \
946 if (objc < 2) { \
947 __skip = 1; \
948 selfO = OT_CLASS; \
949 hdl = NULL; \
950 } else { \
951 __skip = 2; \
952 selfO = objv[1]; \
953 hdl = SELF2HDL(selfO); \
954 }
955
956#define SetupHdlConstr(_ClassC) \
957 MK_RT_SETUP_METHOD; \
958 int __skip=2; \
959 /* on ATL the self is already available if the CTOR is called */ \
960 MK_UNUSED OT_SELF_T selfO = objv[1]; \
961 if (!AtlClassIsN(selfO,_ClassC##_lngO)) \
962 OT_ERROR_LNG_RETURN_INVALID_CLASS(VAL2STR(MoxMy__CLASS__N(selfO)),OT_CLASS_NAME); \
963 MK_UNUSED MK_TYP hdl = _ClassC##_TT; \
964
965#define SetupHdlStatic(_ClassC) \
966 MK_RT_SETUP_METHOD; \
967 int __skip=1; \
968 MK_UNUSED OT_SELF_T selfO = OT_CLASS; \
969 MK_UNUSED MK_TYP hdl = _ClassC##_TT; \
970
971/*****************************************************************************/
972/* */
973/* definition's */
974/* */
975/*****************************************************************************/
976
977#define PTR2VAL(nat) (OT_OBJ_T)(nat)
978#define SELF2VAL(slf) (slf)
979#define CLS2VAL(cls) (cls)
980#define META2VAL_X(x) SELF2VAL(OT_SELF_X(x))
981#define META2VAL_O(o) SELF2VAL(OT_SELF_O(o))
982
983#define I82VAL(nat) Tcl_NewIntObj(nat)
984#define BOL2VAL(nat) Tcl_NewBooleanObj(nat)
985#define I162VAL(nat) Tcl_NewIntObj(nat)
986#define U162VAL(nat) Tcl_NewIntObj((int)nat)
987#define INT2VAL(nat) Tcl_NewIntObj(nat)
988#define I642VAL(nat) Tcl_NewWideIntObj(nat)
989#define HDL2VAL(nat) Tcl_NewIntObj(nat)
990#define LLG2VAL(nat) Tcl_NewWideIntObj(nat)
991#define FLT2VAL(nat) Tcl_NewDoubleObj(nat)
992#define DBL2VAL(nat) Tcl_NewDoubleObj(nat)
993#define STRN2VAL(nat) MK(STRN2VAL)(nat)
994#define BIN2VAL(ptr,len) Tcl_NewByteArrayObj((const unsigned char*)ptr,(int)len)
995#define STR2VAL(ptr) Tcl_NewStringObj((const char*)ptr,-1)
996#define STR2VAL_2(ptr,len) Tcl_NewStringObj((const char*)ptr,(int)len)
997#define LONG2VAL(nat) Tcl_NewLongObj(nat)
998
999#define VAL2STR(val) Tcl_GetString(val)
1000#define VAL2STR_NULL(val) (val?Tcl_GetString(val):"NULL")
1001#define VAL2SELF(val) (val)
1002
1003#define VAL2OBJ(val) ((MK_OBJ)Self2PtrN(val))
1004#define VAL2BFL(val) ((MK_BFL)Self2PtrN(val))
1005#define VAL2MNG(val) ((MK_MNG)Self2PtrN(val))
1006
1007// *********************************************************************************************
1008
1010 static MkThreadLocal OT_OBJ_T T_MK_NULL = NULL;
1011 if (T_MK_NULL == NULL) {
1012 T_MK_NULL = Tcl_NewStringObj(MK_NULL_STR,-1);
1013 Tcl_IncrRefCount(T_MK_NULL);
1014 }
1015 // mark=MK_NULL
1016 if (val==MK_NULL) {
1017 return T_MK_NULL;
1018 } else {
1019 return Tcl_NewStringObj(val,-1);
1020 }
1021}
1022
1023/*****************************************************************************/
1024/* */
1025/* Tcl private Interface */
1026/* */
1027/*****************************************************************************/
1028
1029#define AtlInfoScript(s) MK(AtlInfoScript)(OT_MK_CALL s)
1031
1032#define AtlInfoExists(l) MK(AtlInfoExists)(OT_MK_CALL l)
1034
1035#define AtlArrayExists(l) MK(AtlArrayExists)(OT_MK_CALL l)
1037
1038#define AtlClassIsN(...) OT_LNG_EMBEDDED(bool,MK(AtlClassIsN),OT_MK_CALL __VA_ARGS__)
1040
1041/*****************************************************************************/
1042/* */
1043/* former TclMsgque.c */
1044/* */
1045/*****************************************************************************/
1046
1047// TODO → who set OT_SHARED_IS_DLL ?
1048#ifdef OT_SHARED_IS_DLL
1049# define OT_ATL_EXTERN __declspec(dllexport)
1050#else
1051# define OT_ATL_EXTERN __attribute__ ((visibility("default")))
1052#endif
1053
1054/*****************************************************************************/
1055/* MARK_C */
1056/* Class_API */
1057/* */
1058/*****************************************************************************/
1059
1068
1070
1071#define AtlClassDefGetNN(...) NS(AtlClassDefGetNN)(OT_MK_CALL __VA_ARGS__)
1073
1074#define AtlGetClassFrmNsPtr(nsP,flg) MK(GetClassFrmNsPtr)(OT_MK_CALL nsP, flg)
1075mk_inline OT_CLS_T MK(GetClassFrmNsPtr) ( OT_MK_ARGS OT_NS_T nsP, int flags ) {
1076 AtlClassDefT clsDef = AtlClassDefGetNN(nsP,NULL,NULL,flags);
1077 if (clsDef != NULL) return clsDef->classO;
1078/*
1079 assert(nsP != NULL);
1080 SETUP_moxrt;
1081 return MoxCls__NS__NN(nsP,0);
1082*/
1083 return NULL;
1084}
1085
1086// borrow reference
1087#define AtlGetClassFromProc(cmdT) MK(GetClassFromProc)(OT_MK_CALL cmdT)
1088mk_inline OT_CLS_T MK(GetClassFromProc) ( OT_MK_ARGS Tcl_Command cmdT ) {
1089 Tcl_CmdInfo cmdInfo;
1090 Tcl_GetCommandInfoFromToken(cmdT,&cmdInfo);
1092 return MoxCls__NS__NN(cmdInfo.namespacePtr,0);
1093}
1094
1095#define OT_TMP_BAC_OBJ(val) MK(MkBufferListC_ObjNew) (OT_MK_CALL val)
1096
1097// BEGIN-CLASS - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
1098
1099// ----------------------------------------------------------------------
1100// class: MkBufferListC
1101
1102 #define MkBufferListC_rt (*amkrt)
1103 #define MkBufferListC_lngO (MkBufferListC_rt.AtlMkBufferListC)
1104 #undef MkBufferListCTT
1105 #define MkBufferListCTT (MkBufferListC_rt.AtlMkBufferListCTT)
1106
1107 int MK(pMkBufferListC_Init) (OT_MK_ARGS OT_NS_T);
1108
1109 #define MkBufferListC_ObjNew(nat) MK(MkBufferListC_ObjNew) (OT_MK_CALL nat)
1110 #define OT_TMP_BFL_OBJ(nat) MkBufferListC_ObjNew (nat)
1111 #define OT_retObj_SET_BFL(nat) retObj = MkBufferListC_ObjNew (nat)
1112
1115 return ( hdl ? MK(AtomObjNew) (OT_MK_CALL MkBufferListC_X2obj(hdl), amkrt) : MkBufferListC_rt.AtlMkBufferListC_MK_NULL );
1116 }
1117
1118// ----------------------------------------------------------------------
1119// class: MkBufferC
1120
1121 #define MkBufferC_rt (*amkrt)
1122 #define MkBufferC_lngO (MkBufferC_rt.AtlMkBufferC)
1123 #undef MkBufferCTT
1124 #define MkBufferCTT (MkBufferC_rt.AtlMkBufferCTT)
1125
1126 int MK(pMkBufferC_Init) (OT_MK_ARGS OT_NS_T);
1127
1128 #define MkBufferC_ObjNew(nat) MK(MkBufferC_ObjNew) (OT_MK_CALL nat)
1129 #define OT_TMP_BUF_OBJ(nat) MkBufferC_ObjNew (nat)
1130 #define OT_retObj_SET_BUF(nat) retObj = MkBufferC_ObjNew (nat)
1131
1134 return ( hdl ? MK(AtomObjNew) (OT_MK_CALL MkBufferC_X2obj(hdl), amkrt) : MkBufferC_rt.AtlMkBufferC_MK_NULL );
1135 }
1136
1137// ----------------------------------------------------------------------
1138// class: MkBufferStreamC
1139
1140 #define MkBufferStreamC_rt (*amkrt)
1141 #define MkBufferStreamC_lngO (MkBufferStreamC_rt.AtlMkBufferStreamC)
1142 #undef MkBufferStreamCTT
1143 #define MkBufferStreamCTT (MkBufferStreamC_rt.AtlMkBufferStreamCTT)
1144
1145 int MK(pMkBufferStreamC_Init) (OT_MK_ARGS OT_NS_T);
1146
1147 #define MkBufferStreamC_ObjNew(nat) MK(MkBufferStreamC_ObjNew) (OT_MK_CALL nat)
1148 #define OT_TMP_BUS_OBJ(nat) MkBufferStreamC_ObjNew (nat)
1149 #define OT_retObj_SET_BUS(nat) retObj = MkBufferStreamC_ObjNew (nat)
1150
1153 return ( hdl ? MK(AtomObjNew) (OT_MK_CALL MkBufferStreamC_X2obj(hdl), amkrt) : MkBufferStreamC_rt.AtlMkBufferStreamC_MK_NULL );
1154 }
1155
1156// ----------------------------------------------------------------------
1157// class: MkErrorC
1158
1159 #define MkErrorC_rt (*amkrt)
1160 #define MkErrorC_lngO (MkErrorC_rt.AtlMkErrorC)
1161 #undef MkErrorCTT
1162 #define MkErrorCTT (MkErrorC_rt.AtlMkErrorCTT)
1163
1164 int MK(pMkErrorC_Init) (OT_MK_ARGS OT_NS_T);
1165
1166 #define MkErrorC_ObjNew(nat) MK(MkErrorC_ObjNew) (OT_MK_CALL nat)
1167 #define OT_TMP_ERR_OBJ(nat) MkErrorC_ObjNew (nat)
1168 #define OT_retObj_SET_ERR(nat) retObj = MkErrorC_ObjNew (nat)
1169
1172 return ( hdl ? MK(AtomObjNew) (OT_MK_CALL MkErrorC_X2obj(hdl), amkrt) : MkErrorC_rt.AtlMkErrorC_MK_NULL );
1173 }
1174
1175// ----------------------------------------------------------------------
1176// class: MkLogFileC
1177
1178 #define MkLogFileC_rt (*amkrt)
1179 #define MkLogFileC_lngO (MkLogFileC_rt.AtlMkLogFileC)
1180 #undef MkLogFileCTT
1181 #define MkLogFileCTT (MkLogFileC_rt.AtlMkLogFileCTT)
1182
1183 int MK(pMkLogFileC_Init) (OT_MK_ARGS OT_NS_T);
1184
1185 #define MkLogFileC_ObjNew(nat) MK(MkLogFileC_ObjNew) (OT_MK_CALL nat)
1186 #define OT_TMP_LFL_OBJ(nat) MkLogFileC_ObjNew (nat)
1187 #define OT_retObj_SET_LFL(nat) retObj = MkLogFileC_ObjNew (nat)
1188
1191 return ( hdl ? MK(AtomObjNew) (OT_MK_CALL MkLogFileC_X2obj(hdl), amkrt) : MkLogFileC_rt.AtlMkLogFileC_MK_NULL );
1192 }
1193
1194// ----------------------------------------------------------------------
1195// class: MkObjectC
1196
1197 #define MkObjectC_rt (*amkrt)
1198 #define MkObjectC_lngO (MkObjectC_rt.AtlMkObjectC)
1199 #undef MkObjectCTT
1200 #define MkObjectCTT (MkObjectC_rt.AtlMkObjectCTT)
1201
1202 int MK(pMkObjectC_Init) (OT_MK_ARGS OT_NS_T);
1203
1204 #define MkObjectC_ObjNew(nat) MK(MkObjectC_ObjNew) (OT_MK_CALL nat)
1205 #define OT_TMP_OBJ_OBJ(nat) MkObjectC_ObjNew (nat)
1206 #define OT_retObj_SET_OBJ(nat) retObj = MkObjectC_ObjNew (nat)
1207
1210 return ( hdl ? MK(AtomObjNew) (OT_MK_CALL MkObjectC_X2obj(hdl), amkrt) : MkObjectC_rt.AtlMkObjectC_MK_NULL );
1211 }
1212
1213// ----------------------------------------------------------------------
1214// class: MkRuntimeC
1215
1216 #define MkRuntimeC_rt (*amkrt)
1217 #define MkRuntimeC_lngO (MkRuntimeC_rt.AtlMkRuntimeC)
1218 #undef MkRuntimeCTT
1219 #define MkRuntimeCTT (MkRuntimeC_rt.AtlMkRuntimeCTT)
1220
1221 int MK(pMkRuntimeC_Init) (OT_MK_ARGS OT_NS_T);
1222
1223 #define MkRuntimeC_ObjNew(nat) MK(MkRuntimeC_ObjNew) (OT_MK_CALL nat)
1224 #define OT_TMP_RT_OBJ(nat) MkRuntimeC_ObjNew (nat)
1225 #define OT_retObj_SET_RT(nat) retObj = MkRuntimeC_ObjNew (nat)
1226
1229 return ( hdl ? MK(AtomObjNew) (OT_MK_CALL MkRuntimeC_X2obj(hdl), amkrt) : MkRuntimeC_rt.AtlMkRuntimeC_MK_NULL );
1230 }
1231
1232// END-CLASS - created by 'atl_MqS.tcl -i NHI1_HOME/theKernel/c/gen/c_mkkernel.meta' - DO NOT change
1233
1234/*****************************************************************************/
1235/* */
1236/* reference */
1237/* */
1238/*****************************************************************************/
1239
1240#define ME_REF_MkBinaryR MkBinaryR
1241#define OT_GET__ME_REF_MkBinaryR(b) BIN2VAL(b.data,b.size)
1242#define VAL2MkBinaryR(obj) \
1243 ({int size;unsigned char * bin =Tcl_GetByteArrayFromObj(obj,&size);MkBinaryCreate(size,bin);})
1244#define OT_CHECK__ME_REF_MkBinaryR(val) \
1245 if (__skip >= objc) { \
1246 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
1247 } else { \
1248 val = VAL2MkBinaryR(objv[__skip++]); \
1249 }
1250
1251#define ME_REF_MkStringR MkStringR
1252#define OT_GET__ME_REF_MkStringR(s) STR2VAL_2(s.ptr,s.len)
1253#define VAL2MkStringR(obj) \
1254 ({int len;char * str =Tcl_GetStringFromObj(obj,&len);MkStringCreate(len,str);})
1255#define OT_CHECK__ME_REF_MkStringR(val) \
1256 if (__skip >= objc) { \
1257 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
1258 } else { \
1259 val = VAL2MkStringR(objv[__skip++]); \
1260 }
1261
1263 int len = 0;
1264 char* str = Tcl_GetStringFromObj(tclO,&len);
1265 return MkStringCreate(len,str);
1266}
1267
1269 if (tclO) Tcl_DecrRefCount(tclO);
1270}
1271
1272#define Ot_GetBooleanFromObj(val) ({int bol; if (Tcl_GetBooleanFromObj(interp,val,&bol)==TCL_ERROR) goto error; bol;})
1273
1274/*****************************************************************************/
1275/* */
1276/* enum helpers */
1277/* */
1278/*****************************************************************************/
1279
1280// helper for xxx_ToString, the ERROR returned from Tcl_ListObjAppendElement is NOT checked
1281#define ot_fixstr(_s,_l) Tcl_NewStringObj(_s,_l)
1282#define ot_fixstrobj(_s) ot_fixstr(_s,strlen(_s))
1283#define ot_enum_append(_o,_s) Tcl_ListObjAppendElement(NULL,_o,ot_fixstrobj(_s))
1284
1285/*****************************************************************************/
1286/* */
1287/* inline functions */
1288/* */
1289/*****************************************************************************/
1290
1291// debugging ***********************************************************************************
1292
1293#define printLng(var) printV(#var" = '%s' [ref=%i]",(var?VAL2STR(var):"NULL"),(var)?(var)->refCount:-1)
1294#define printXLng(x,var) printXV(x,#var" = '%s' [ref=%i]",(var?VAL2STR(var):"NULL"),(var)?(var)->refCount:-1)
1295#define printXLngObj(x,var) printXC2(x,MK(PrintObj)(OT_Prefix_CALL #var,var))
1296#define printLLngObj(var) printLC2( MK(PrintObj)(OT_Prefix_CALL #var,var))
1297#define printLngObj(var) printTxt(MK(PrintObj)(OT_Prefix_CALL #var,var))
1298#define printLngObj2(var) MK(PrintObj2)(OT_Prefix_CALL #var,var,__func__)
1299
1300#define printLngErrorCode() do { \
1301 OT_OBJ_T errorCode = Tcl_GetVar2Ex (interp, "errorCode", NULL, TCL_GLOBAL_ONLY); \
1302 printLngObj(errorCode); \
1303} while (0); \
1304
1305#define printLngErrorInfo() do { \
1306 OT_OBJ_T errorInfo = Tcl_GetVar2Ex (interp, "errorInfo", NULL, TCL_GLOBAL_ONLY); \
1307 printLngObj(errorInfo); \
1308} while (0); \
1309
1310#define printObjv \
1311 printV("printObjv: __skip=%i, objc=%i",__skip,objc);\
1312 printAry(objc,objv)
1313
1314#define printXObjv(x) \
1315 printXV(x,"__skip=%i, objc=%i",__skip,objc);\
1316 printXAry(x,objc,objv)
1317
1318#define printAry(c,o) \
1319 printAry3(#o,c,o)
1320
1321#define printAryDetail(c,o) \
1322 for(int i=0;i<c;i++) { printLngObj(o[i]) }
1323
1324#define printXAry(x,c,o) \
1325 for(int i=0;i<c;i++) { printXV(x,"%2i= %s",i,o[i]?Tcl_GetString(o[i]):"NULL"); }
1326
1327#define printXAryDetail(x,c,o) \
1328 for(int i=0;i<c;i++) { printXLngObj(x,o[i]) }
1329
1330#define printAry3(txt, c,o) do { \
1331 mk_dbg_Z_start(512,MK_COLOR_BLUE "%s : ",txt); \
1332 for(int i=0;i<c;i++) { \
1333 mk_dbg_Z_next(MK_COLOR_YELLOW "[%d:%p]" MK_COLOR_RESET "='%s' ",i,o[i],o[i]?Tcl_GetString(o[i]):"NULL"); \
1334 } \
1335 mk_dbg_Z_end(); \
1336} while (0)
1337
1338#define printAryX(x,t,c,o) \
1339 printXV(x, "%-15s = ",t); \
1340 for(int i=0;i<c;i++) { \
1341 fprintf(stderr, "'%s' ",o[i]?Tcl_GetString(o[i]):"NULL"); \
1342 } \
1343 fputc('\n', stderr);
1344
1345#define printAryL(t,c,o) printAryX(META_CONTEXT_S,t,c,o) \
1346
1347#define xstr(s) str(s)
1348#define str(s) #s
1349
1350#define printLngClass(clsC) printV(#clsC " name = %s", OT_LNG_NAME_FROM_CLASS(clsC))
1351#define printLngObject(objO) printV(#objO " name = %s", OT_LNG_NAME_FROM_OBJECT(objO))
1352
1353// ---------------------------------------------------------------------------
1354// SELF
1355
1356#define Self2PtrNN(myP) MK(Self2PtrNN)(myP)
1357#define Self2PtrN(myO) MK(Self2PtrN)(interp,myO)
1358
1360 return nsP->clientData;
1361}
1362
1364 OT_NS_T myP = MoxResolveN(myO);
1365 if (myP == NULL) return NULL;
1366 return Self2PtrNN(myP);
1367}
1368
1369/*
1370#define PTR2SELF(s,p) MK(PTR2SELF)(interp,s,p)
1371mk_inline OT_SELF_T MK(PTR2SELF) ( OT_ENV_T interp, OT_SELF_T selfO, MK_MNG ptr ) {
1372 OT_NS_T ns = MoxResolveN(selfO);
1373 if (ns == NULL) return NULL;
1374 ns->clientData = ptr;
1375 return selfO;
1376}
1377*/
1378
1384
1385mk_inline OT_OBJ_T MK(AtomObjNew) (
1387 MK_OBJ obj,
1388 MK_PTR env
1389) {
1390 #define __doc "AtomObjNew"
1391 MK_PTR selfO = NULL;
1392 // force "class-NULL object → test done BEFORE "AtomObjNew" is called
1393 assert(obj != NULL);
1394 MkErrorC_Check(obj, MkSelfNew(obj,&selfO,env))
1395 OT_OBJ_T ret = OT_LNG_SELF_2_LNG(selfO);
1396 return ret;
1397 #undef __doc
1398error:
1399 return NULL;
1400}
1401
1402// update SELF if OBJECT is already available
1403// CALLED from: "<contructor>", MkAtomCreate
1406 OT_SELF_T selfO,
1407 MK_OBJ obj,
1408 MK_PTR const env
1409);
1410
1411#define AtomInit(...) MK(AtomInit)(OT_MK_CALL __VA_ARGS__)
1412
1413// create OBJECT and update SELF
1414// CALLED from: "*_SelfCreate"
1417 MK_OBJ obj,
1418 OT_CLS_T cls,
1419 OT_OBJ_T nameO,
1420 OT_OBJ_T nsO,
1421 int objc,
1422 OT_OBJ_T const objv[],
1423 MK_PTR const env
1424);
1425
1426#define AtomCreate(...) MK(AtomCreate)(OT_MK_CALL __VA_ARGS__)
1427
1430 MK_OBJ obj,
1431 OT_CLS_T cls,
1432 OT_OBJ_T nameO,
1433 OT_OBJ_T nsO,
1434 MK_PTR const env
1435);
1436
1437#define AtomMake(...) MK(AtomMake)(OT_MK_CALL __VA_ARGS__)
1438
1441 OT_CLS_T cls,
1442 MK_STRN name,
1443 MK_PTR const env
1444) {
1445 return AtomMake(NULL, cls, STR2VAL(name), NULL, env);
1446}
1447
1448#define AtomCreateNULL(...) MK(AtomCreateNULL)(OT_MK_CALL __VA_ARGS__)
1449
1452 MK_OBJ obj,
1453 OT_CLS_T cls,
1454 OT_OBJ_T nameO,
1455 MK_PTR const env
1456);
1457
1458#define AtomCreateCONSTR(...) MK(AtomCreateCONSTR)(OT_MK_CALL __VA_ARGS__)
1459
1460// ATL object is still alive
1461// called by: "Delete" and "Dispose" as pseudo-DTOR
1462mk_inline bool MK(AtomDeleteHard)(
1464 OT_SELF_T selfO
1465) {
1466 assert(selfO != NULL);
1467 // if (Tcl_InterpDeleted(interp)) return false;
1468 OT_NS_T ns = MoxResolveN(selfO);
1469 check_NULL(ns) return false;
1470 Tcl_DeleteNamespace(ns);
1471 // refer: AtomInit
1472 OT_REF_DECR(selfO);
1473 return true;
1474}
1475
1476// SOFT: delete META if ATL is still active
1477// CALLED from: "Dispose"
1478mk_inline void MK(AtomDispose) (
1480 OT_SELF_T selfO
1481) {
1482 assert(selfO != NULL);
1483 MK_MNG mng = VAL2MNG(selfO);
1484 check_NULL(mng) return;
1485 MK_OBJ obj = MkObj(mng);
1486 check_NULL(obj) return;
1487 // unlink ATL from META
1489}
1490
1491// SOFT: delete META if ATL is still active
1492// CALLED from: "Dispose"
1493mk_inline void MK(AtomUnlink) (
1495 OT_SELF_T selfO
1496) {
1497#if 0
1498 // I need a HATRD-DELETE here because the namespace should also be deleted.
1499 //
1500 // Every instance has a namespace, and the @e instance-ns has a dependency on the @e instance-type-ns.
1501 // The @RMqExit uses `Tcl_Exit` to delete, among other things, all namespaces, including the @e instance-ns.
1502 // However, the @e instance-ns in turn has a dependency on the @e type-ns, which is also deleted.
1503 // A simple @e unlink removes the dependency, which then results in the @e type-ns being deleted, perhaps @b BEFORE
1504 // the @e instance-ns, which in turn has consequences for memory management.
1505 MK(AtomDeleteHard) ( OT_MK_CALL selfO );
1506#else
1507 assert(selfO != NULL);
1508 OT_OBJ_T myO = SELF2VAL(selfO);
1509 check_NULL(myO) return;
1510
1511 OT_NS_T myNs = MoxResolveN(myO);
1512 myNs->clientData = NULL;
1513 myNs->deleteProc = NULL;
1514 //PTR2SELF(selfO,0);
1515#endif
1516}
1517
1518// ==============================================================================================
1519// extension
1520
1521#if 1
1522 #define Atl_EvalObjv(...) Tcl_EvalObjv(__VA_ARGS__)
1523#else
1524 MK_ATL_EXTERN int Atl_EvalObjv( Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], int flags );
1525#endif
1526
1527#undef HEADER
#define MkErrorC_rt
__thread OT_MK_RT_S amkrtR
#define check_NULL(code)
#define MK(n)
#define AtomMake(...)
#define AtlInfoExists(l)
#define AtomInit(...)
#define SETUP_moxrt
AtlClassDefS * AtlClassDefT
#define AtlInfoScript(s)
#define AtomCreate(...)
MOX_ENV_T OT_ENV_T
#define STR2VAL(ptr)
MOX_NS_T OT_NS_T
MK_STRN OT_ENUM_T
#define MkErrorC_ObjNew(nat)
OT_MK_RT_StatusE
@ OT_MK_RT_STATUS_NEW
@ OT_MK_RT_STATUS_DELETED
@ OT_MK_RT_STATUS_ONEXIT
#define MkRuntimeC_rt
#define SKIP_ARGS
#define MkBufferStreamC_ObjNew(nat)
#define AtomCreateNULL(...)
#define MkBufferC_rt
#define AtomCreateCONSTR(...)
#define MkLogFileC_ObjNew(nat)
#define MkBufferC_ObjNew(nat)
#define AtlClassIsN(...)
#define MkObjectC_ObjNew(nat)
static MkStringR Ot_GetStringFromObj(OT_OBJ_T tclO)
MOX_OBJ_T OT_SELF_T
static void Ot_DecrRefCount(OT_OBJ_T tclO)
#define OT_Check_ARGS
#define MkBufferListC_ObjNew(nat)
MOX_CLS_T OT_CLS_T
#define MkBufferC_ARGS
#define NS(n)
#define VAL2MNG(val)
#define OT_ERROR_LNG_RETURN_HDL_IS_NULL()
#define Self2PtrNN(myP)
#define AtlClassDefGetNN(...)
#define MkBufferListC_rt
#define OT_LNG_SELF_2_LNG(selfT)
#define FRAME_ARGS
struct MkVarFrameS * OT_VARFRAME
int(* LookupClassF)(SKIP_ARGS)
MOX_PTR OT_PTR_T
#define OT_VARFRAME_OBJ_RESULT(itp)
#define check_LNG(code)
#define Self2PtrN(myO)
#define OT_MK_CALL
struct MkCallS MkCallS
#define OT_MK_ARGS
#define MkLogFileC_rt
MkCallTypeE
@ MkCallS_init
@ MkCallS_null
@ MkCallS_error
@ MkCallS_own_method
@ MkCallS_other_method
@ MkCallS_proc
@ MkCallS_static
#define SELF2VAL(slf)
struct AtlClassDefS AtlClassDefS
#define OT_EVAL_ARGS
#define OT_OBJ_COPY(o)
#define OT_REF_DECR_AND_NULL(_obj)
#define MK_ATL_EXTERN
static library
#define ATL_ARGS
#define MkRuntimeC_ObjNew(nat)
#define OT_REF_DECR(_obj)
#define OT_MK_RT_SIG
#define str(s)
#define MkObjectC_rt
#define AtlArrayExists(l)
#define MkBufferListC_ARGS
#define MkErrorC_Check(mng, PROC)
#define MkBufferStreamC_rt
#define Atl_EvalObjv(...)
#define AtlClassName_buf_size
#define OT_Prefix_ARGS
OT_MK_RT_S * OT_MK_RT_T
#define STRN2VAL(nat)
#define OT_VARFRAME_ARGS
MOX_OBJ_T OT_OBJ_T
tag: nhi1-release-250425
OT_ProcRet NS MkBufferC_ToObject(MkBufferC_ARGS)
OT_ProcRet MK MkBufferListC_ToList(MkBufferListC_ARGS)
#define MkBufferC_type
#define MkBufferC_X2obj(x)
#define MkBufferListC_type
#define MkBufferListC_X2obj(x)
#define MkBufferStreamC_type
#define MkBufferStreamC_X2obj(x)
#define MkErrorC_X2obj(x)
#define MkErrorC_type
#define MK_ERROR_PANIC
#define MK_NULL_STR
#define MK_CDECL
#define MK_DECL
#define mk_inline
#define MK_EXTERN_DATA
#define MK_EXTERN
#define MK_ARTIFICIAL
#define MK_NULL
MK_STRN MkTimeoutE_ToString(enum MkTimeoutE value)
MkTimeoutE
MK_STRN MkIdSE_ToString(enum MkIdSE value)
MK_STRN MkTypeE_ToString(enum MkTypeE value)
MkErrorE
MkTypeE
MK_STRN MkErrorE_ToString(enum MkErrorE value)
static MkStringR MkStringCreate(MK_NUM len, MK_STRN str)
const MK_PTRB * MK_MNGN
int32_t MK_NUM
MK_PTRB * MK_PTR
const MK_STRB * MK_STRN
MK_PTRB * MK_MNG
MK_PTRB const * MK_EXP
unsigned int MK_SIG
MK_PTRB * MK_CBP
MK_STRB * MK_STR
signed int MK_I32
#define MkLogFileC_X2obj(x)
#define MkLogFileC_type
struct MkObjectS * MK_OBJ
#define MkObjectC_X2obj(x)
#define MkObjectC_type
static MK_OBJ MkObj(MK_MNG mng)
#define MkSelfNew(...)
#define MkRefDecrWithUnlinkSelf(...)
MkIdSE
MK_PTR MkSysCalloc(MK_OBJN fmtobj, size_t const nmemb, size_t const size)
#define MkSysFree(pointer)
MK_PTR MkSysMemDup(MK_OBJN fmtobj, MK_PTRN const blck, size_t const size)
MK_PTR MkSysReCalloc(MK_OBJN fmtobj, MK_PTR const buf, MK_NUM const oldnum, MK_NUM const addnum, size_t const size)
#define MkObjectDeleteCallF_ARGS
#define MkObjectDeleteFreeF_ARGS
#define MkRuntimeC_type
#define MkRuntimeC_X2obj(x)
#define MkThreadLocal
#define MK_RT_ARGS
struct MkTypeS * MK_TYP
tag: nhi1-release-250425
tag: nhi1-release-250425
bool MK TestObject(OT_Prefix_ARGS OT_OBJ_T lngO, OT_CLS_T typeO, MK_OBJ *objP, MkTestClassE *flagP)
tag: nhi1-release-250425
struct AtlClassDefS * next
struct AtlClassDefS * prev
LookupClassF keyF
const char * key
const char * key
OT_OBJ_T mth
OT_OBJ_T args
OT_CLS_T nsO
MkCallTypeE type
MK_SIG signature
OT_MK_RT_T amkrt
OT_OBJ_T my
OT_OBJ_T prealloc[50]
OT_OBJ_T * data
MK_TYP AtlMkBufferStreamCTT
OT_CLS_T AtlMkRuntimeC
OT_CLS_T AtlMkErrorC
const Tcl_ObjType * BOOLEAN
OT_OBJ_T AtlMkBufferC_MK_NULL
OT_OBJ_T AtlMkErrorC_MK_NULL
OT_OBJ_T AtlMkBufferStreamC_MK_NULL
struct AtlClassDefS * atlClassDefL
OT_OBJ_T AtlMkObjectC_MK_NULL
MK_TYP AtlMkObjectCTT
OT_CLS_T AtlMkLogFileC
OT_NS_T AtlMkBufferListC_NS
const Tcl_ObjType * WIDE
OT_NS_T AtlMkLogFileC_NS
OT_CLS_T AtlMkBufferListC
OT_NS_T AtlMkObjectC_NS
const Tcl_ObjType * DOUBLE
OT_CLS_T AtlMkBufferStreamC
MK_TYP AtlMkLogFileCTT
MK_TYP AtlMkBufferCTT
OT_NS_T AtlMkBufferStreamC_NS
MK_TYP AtlMkBufferListCTT
const Tcl_ObjType * NS
OT_NS_T AtlMkRuntimeC_NS
OT_ENV_T interp
OT_OBJ_T AtlMkLogFileC_MK_NULL
MK_TYP AtlMkRuntimeCTT
OT_CLS_T AtlMkObjectC
const Tcl_ObjType * INDEX
MK_TYP AtlMkErrorCTT
OT_NS_T AtlMkBufferC_NS
OT_OBJ_T AtlMkRuntimeC_MK_NULL
OT_NS_T AtlMkErrorC_NS
OT_CLS_T AtlMkBufferC
const Tcl_ObjType * LONG
OT_OBJ_T AtlMkBufferListC_MK_NULL
Tcl_ObjCmdProc * callProc
const char * name