11#define META_FILE_NAME "MkKernel_atl.c"
12#define VER TCL_OO_METHOD_VERSION_CURRENT
19#define OtClass_ARGS OBJCMD_ARGS
25#define OT_SETUP_hdl_static \
26 MK_UNUSED int __skip=1; \
27 MK_UNUSED OT_MK_RT_T amkrt = clientData; \
28 MK_UNUSED MK_RT mkrt = amkrt->mkrt; \
29 MK_UNUSED MK_ERR hdl = &MkERROR; \
41#include "mk_check_atl.h"
45#define MkCleanupTmpl()
157#define ErrorE_FromInt_doc "MkErrorE [MkKernel::ErrorE_FromInt value:int32]"
158#define IdSE_FromInt_doc "MkIdSE [MkKernel::IdSE_FromInt value:int32]"
159#define TimeoutE_FromInt_doc "MkTimeoutE [MkKernel::TimeoutE_FromInt value:int32]"
160#define TypeE_FromInt_doc "MkTypeE [MkKernel::TypeE_FromInt value:int32]"
163#define ErrorE_ToInt_doc "int32 [MkKernel::ErrorE_ToInt value:MkErrorE]"
164#define ErrorE_ToString_doc "string [MkKernel::ErrorE_ToString value:MkErrorE]"
165#define IdSE_ToInt_doc "int32 [MkKernel::IdSE_ToInt value:MkIdSE]"
166#define IdSE_ToString_doc "string [MkKernel::IdSE_ToString value:MkIdSE]"
167#define TimeoutE_ToInt_doc "int32 [MkKernel::TimeoutE_ToInt value:MkTimeoutE]"
168#define TimeoutE_ToString_doc "string [MkKernel::TimeoutE_ToString value:MkTimeoutE]"
169#define TypeE_ToInt_doc "int32 [MkKernel::TypeE_ToInt value:MkTypeE]"
170#define TypeE_ToString_doc "string [MkKernel::TypeE_ToString value:MkTypeE]"
173#define Cleanup_doc "MkKernel::Cleanup"
174#define Setup_doc "MkKernel::Setup"
180#define AtlClassDefS_SIG 0x88342873
182void MK(ClassDef_ns_delete) (ClientData clientData) {
186 if (classO == NULL)
return;
198 OT_NS_T ns = Tcl_FindNamespace(interp,
VAL2STR(selfO),NULL,TCL_GLOBAL_ONLY);
200 Tcl_DeleteNamespace(ns);
204 classDef->
next = NULL;
211#define ClassDefCreateNN(...) NS(ClassDefCreateNN)(OT_MK_CALL __VA_ARGS__)
217 Tcl_IncrRefCount(classO);
218 clsNS->clientData = classDef;
219 clsNS->deleteProc =
MK(ClassDef_ns_delete);
221 DL_APPEND(amkrt->atlClassDefL,classDef);
226#define AtlClassDefGetTypN(...) NS(AtlClassDefGetTypN)(OT_MK_CALL __VA_ARGS__)
229#define AtlClassDefGetTypNN(...) NS(AtlClassDefGetTypNN)(OT_MK_CALL __VA_ARGS__)
232#define AtlClassDefGetTypNNN(...) NS(AtlClassDefGetTypNNN)(OT_MK_CALL __VA_ARGS__)
238 assert(classP != NULL);
239 if (classP->clientData) {
245 classO =
STR2VAL(classP->fullName);
247 OT_NS_T classNsP = MoxResolveN(classO);
248 assert(classNsP == classP);
250 if (classTT == NULL) {
255 OT_OBJ_T superO = MoxCls__SUPER__NN(classP,flags);
256 if (superO == NULL) {
257 if (flags & TCL_LEAVE_ERR_MSG) {
259 classP->fullName, Tcl_GetStringResult(interp));
260 Tcl_SetErrorCode(interp,
"ATLMK",
"CLASS",
"TYP",
"INVALID",NULL);
266 retI = Tcl_ListObjGetElements(interp,superO,&objc,&objv);
267 if (retI == TCL_OK) {
268 for (
int i=0; i<objc; i++) {
274 if (classTT == NULL) {
275 if (flags & TCL_LEAVE_ERR_MSG) {
277 Tcl_SetErrorCode(interp,
"ATLMK",
"CLASS",
"TYP",
"INVALID",NULL);
288 if (clsDef == NULL)
return NULL;
302 OT_NS_T ns = MoxResolveN(clsO);
303 if (ns == NULL)
return NULL;
314 Tcl_ResetResult(interp);
315 assert(typeTT != NULL);
320 if (classNs == NULL)
return NULL;
331 snprintf(buf,256,
"\nCLASS-SETUP-ERROR: the '%s-env=%p' and the 'class-def-interp=%p' are not equal",
334 Tcl_AppendResult(interp, buf,NULL);
335 Tcl_SetErrorCode(interp,
"ATLMK",
"CLASS",
"ENV",NULL);
338 Tcl_AppendResult(interp,
340 "' with EMPTY SELF pointer", NULL);
341 Tcl_SetErrorCode(interp,
"ATLMK",
"CLASS",
"SELF",NULL);
348 retI = MOX(ClassN_direct)(amkrt->moxrt,interp,classNs,codeO);
349 if (retI != TCL_OK)
goto error;
352 classO = Tcl_GetObjResult(interp);
355 OT_OBJ_T superO = Tcl_ObjPrintf(
"SuperI %s", Tcl_GetString(classO));
357 Tcl_IncrRefCount(superO);
360 OT_NS_T classNS = (*clsNsP) = MoxResolveN(classO);
361 if (classNS == NULL)
goto error;
367 retI = Tcl_Export(interp, classNS,
"[A-Za-z]*", 0);
368 if (retI != TCL_OK)
goto error;
372 Tcl_SetObjResult(interp,classO);
385#define FRAME_UPDATE \
386 if (*frameP == NULL) { \
387 RL_init( 2, info_frame_2, RL_NewS(0,"::tcl::info::frame") ) ; RL_T(1,null0) ; \
388 OT_OBJ_T ret = RL_EvalRtEx(TCL_EVAL_GLOBAL); \
389 if (ret==NULL) OT_ERROR_ABNORMAL(MK_ERROR_PANIC); \
390 Tcl_IncrRefCount(ret); \
394#define FRAME_GET(key) \
395 OT_OBJ_T key = NULL; \
396 Tcl_DictObjGet(interp,*frameP,amkrt->key,&key);
402 if (method != NULL) {retObj = method;
goto end;}
404 if (proc != NULL) {retObj = proc;
goto end;}
407 return Tcl_GetStringFromObj(retObj,NULL);;
411#define Get_Call_Cmd__SIZE 100
415 if (cmd == NULL)
goto error;
417 char*
str = Tcl_GetStringFromObj(cmd, &len);
420 char* nl=strchr(buffer,
'\n');
425 strcat(buffer,
" ...");
431 Tcl_ResetResult(interp);
433 return Tcl_GetStringFromObj(type,NULL);
434#undef Get_Call_Cmd__SIZE
440 if (file == NULL)
goto error;
441 return Tcl_GetStringFromObj(file,NULL);
448 Tcl_ResetResult(interp);
450 return Tcl_GetStringFromObj(type,NULL);
456 if (line == NULL)
goto error;
458 if (Tcl_GetIntFromObj(NULL,line,&lineI)==TCL_ERROR)
goto error;
461 Tcl_ResetResult(interp);
467 RL_init( 2, info_frame_2, RL_NewS(0,
"::tcl::info::frame") ) ; RL_NewI(1,level) ;
469 Tcl_IncrRefCount(frame);
476 Tcl_DecrRefCount(frame);
479 Tcl_ResetResult(interp);
489static char* printBits(
size_t const size,
void const *
const ptr)
491 static char buf[100];
492 char * bufP = &buf[0];
493 unsigned char *b = (
unsigned char*) ptr;
498 for (i = (
int)size-1; i >= 0; i--) {
499 for (j = 7; j >= 0; j--) {
500 byte = (b[i] >> j) & 1;
501 num = sprintf(bufP,
"%u",
byte);
509#define myprint(num) ({ \
510 unsigned int tmp=(unsigned int)num; \
511 printV("%-40s → %s\n", #num, printBits(4,&tmp)); \
522 check_LNG(Tcl_ListObjGetElements(interp,enumE,&objc,&objv))
return TCL_ERROR;
523 for (
int i=0; i<objc; i++) {
524 check_LNG (Tcl_GetIndexFromObjStruct (interp, objv[i], keys,
525 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index))
return TCL_ERROR;
526 valI |= keys[index].
val;
546 Tcl_ResetResult(interp);
548 MOX_RT_T moxrt = amkrt->moxrt;
551 OT_NS_T myNs = MoxResolveN(myO);
566 if (MoxMyIsNN(myNs)) {
587 if (objP) *objP = myOBJ;
590 if (flagP) *flagP = flag;
593 default :
return true;
605 const Tcl_ObjType *typePtr=myO->typePtr;
607 bool isObjectB=
false;
613 }
else if (MoxClsIsN(myO)) {
619 name = typePtr ? typePtr->name :
"unknown";
622 if (isObject) *isObject=isObjectB;
629 for (p = name; *p !=
'\0'; p++) {
633 if ((*p ==
':') && (*(p-1) ==
':')) {
651 const Tcl_ObjType *typePtr=myO->typePtr;
653 MOX_RT_T
const moxrt = amkrt->moxrt;
658 }
else if (MoxClsIsN(myO)) {
662 snprintf(amkrt->AtlClassName_buf,
AtlClassName_buf_size,
"Tcl_ObjType<%s>",typePtr ? typePtr->name :
"unknown");
663 name = amkrt->AtlClassName_buf;
666 if (doShort) name =
NS(NamespaceTailCmd)(name);
670static void MK(LngTupleToMkBufferListS) (
680 for (
int i=__skip; i<objc; i++) {
699 check_LNG (Tcl_ListObjGetElements(interp,argsO,&listObjc,&listObjv))
goto error;
700 MK(LngTupleToMkBufferListS)(
MK_RT_CALL interp,listObjc,listObjv,&__skip,retP);
709 MOX_RT_T
const moxrt = amkrt->moxrt;
710 OT_CLS_T objClsO = MoxMy__CLASS__N(objO);
712 if (objClsO == NULL) {
714 Tcl_SetErrorCode(interp,
"ATLMK",
"HDL",
"NULL",NULL);
723 Tcl_SetErrorCode(interp,
"ATLMK",
"HDL",
"NULL",NULL);
730 Tcl_SetErrorCode(interp,
"ATLMK",
"HDL",
"NULL",NULL);
735 if (objTT == NULL)
goto error_and_stack;
737 if (clsTT == NULL)
goto error_and_stack;
751 if (objTT == clsTT) {
753 Tcl_SetErrorCode(interp,
"ATLMK",
"HDL",
"INVALID",NULL);
755 OT_ERROR_VAR_DEFAULT(
"HdlClassInvalidError: Expecting 'hdl' class '%s', but getting class '%s'", clsC, objClsC);
756 Tcl_SetErrorCode(interp,
"ATLMK",
"HDL",
"WRONG",
"CLASS",NULL);
770int MK(UnknownSetup) (
773 const ClientData clientData
776 for (
int i=0; methodsDefs[i].name != 0; i++) {
777 check_NULL(Tcl_CreateObjCommand(interp, methodsDefs[i].name, methodsDefs[i].callProc, clientData, NULL))
793#define OT_LNG_STRING(o) Tcl_GetString(o)
795#define OT_LNG_STRING_BYTES(o) o->bytes
796#define OT_LNG_STRING_LENGTH(o) o->length
797#define OT_LNG_SKIP_TYPE int
805 if ((*skipP) >= objc) {
806 return WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg);
809 MK_STRN ret = Tcl_GetStringFromObj(objv[(*skipP)++], &len);
831 if ((*skipP) >= objc) {
832 return WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg);
834 strncpy(ret,Tcl_GetString(objv[(*skipP)++]),size);
860 for (objc=0; (objv[objc]=(
OT_OBJ_T )va_arg(ap,
OT_OBJ_T )) != NULL; objc++) {
862 if (objc >= (
SIZE-1)) {
863 Tcl_SetResult(interp,
"EVAL-ERROR: size in MkEvalObjvVA is limited to " xstr(
SIZE), TCL_STATIC);
871 ret = Tcl_EvalObjv (interp, objc, objv, flags);
877int MK(FillNamespace) (
883 for (
int i=0; type[i].name != NULL; i++) {
885 Tcl_CreateObjCommand(interp, type[i].name, type[i].callProc, env,NULL)
894 for(
int i=1;i<objc;i++) {
897 return MkBUF_R(&retR).storage.first.C;
900#define __printV(_color,_caller,_fmt,...) \
901 fprintf(MK_OUT, MK_DEBUG_FMT _color _fmt MK_COLOR_RESET "\n", MK_DEBUG_ARG_1(_caller), __VA_ARGS__)
902#define _printV(fmt,...) \
903 __printV(MK_COLOR_CYAN,caller,fmt, __VA_ARGS__)
914 const Tcl_ObjType *typePtr = obj->typePtr;
917 const char * typeName = typePtr->name;
918 _printV(
" | OBJECT # typePtr<%s>, refCount<%d>", typeName, obj->refCount);
919 if (strcmp(typeName,
"parsedVarName")==0) {
920 _printV(
" | %-10p # pointer to the array name Tcl_Obj, or NULL if it is ascalar variable",
921 obj->internalRep.twoPtrValue.ptr1);
922 _printV(
" | %-10p # pointer to the element name string (owned by this Tcl_Obj), or NULL if it is a scalar variable",
923 obj->internalRep.twoPtrValue.ptr2);
924 }
else if (strcmp(typeName,
"nsName")==0) {
934 typedef struct ResolvedNsName {
948 ResolvedNsName *resNamePtr = obj->internalRep.twoPtrValue.ptr1;
949 if (resNamePtr==NULL)
return;
950 Namespace* nsPtr = resNamePtr->nsPtr ;
951 char *nsPtrS = nsPtr ? nsPtr->fullName :
"null";
952 ClientData nsPtrCD = nsPtr ? nsPtr->clientData : NULL;
953 Namespace* refNsPtr = resNamePtr->refNsPtr;
954 char *refNsPtrS = refNsPtr ? refNsPtr->fullName :
"null";
955 _printV(
" | NAMESPACE # namespace<%s>, ClientData<%p>, refNsPtr<%s>", nsPtrS, nsPtrCD, refNsPtrS);
958 _printV(
" | OBJECT # refCount : %d", obj->refCount);
980 #define objF "[type<%s>, refCount<MQ=%i,TCL=%i,SHARED=%i>, ptr<MQ=%p,TCL=%p>]"
981 #define objA type, (retObj?retObj->refCount:-1),valO->refCount, Tcl_IsShared(valO), retObj, (retObj?retObj->self:NULL)
1007 RL_init( 2, info_exists, RL_NewS(0,
"::tcl::info::exists") ); RL_O(1,var) ;
1015 RL_init( 2, array_exists, RL_NewS(0,
"::tcl::array::exists") ); RL_O(1,var) ;
1025 RL_init( 2, info_script_2, RL_NewS(0,
"::tcl::info::script") ) ; RL_NewS(1,script) ;
1028 RL_init( 1, info_script_1, RL_NewS(0,
"::tcl::info::script") ) ;
1031 return Tcl_GetStringFromObj(ret,NULL);
1040 RL_init(3,MyIsClsN,RL_NewS(0,
"::myooX::ClassIsN")) ; RL_O(1,myNsO) ; RL_O(2,clsNsO) ;
1041 retI = RL_EvalEx(TCL_EVAL_GLOBAL);
1042 if (retI != TCL_OK)
goto error;
1043 OT_OBJ_T retO = Tcl_GetObjResult(interp);
1045 retI = Tcl_GetBooleanFromObj(interp,retO,&intB);
1046 if (retI != TCL_OK)
goto error;
1069 {
"MK_OK" ,
MK_OK },
1078 check_LNG(Tcl_GetIndexFromObjStruct (interp, enumE, &keys,
1079 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index))
return TCL_ERROR;
1080 *ret = keys[index].
val;
1099 check_LNG(Tcl_GetIndexFromObjStruct (interp, enumE, &keys,
1100 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index))
return TCL_ERROR;
1101 *ret = keys[index].
val;
1138 check_LNG(Tcl_GetIndexFromObjStruct (interp, enumE, &keys,
1139 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index))
return TCL_ERROR;
1140 *ret = keys[index].
val;
1170 check_LNG(Tcl_GetIndexFromObjStruct (interp, enumE, &keys,
1171 sizeof(
struct LookupClassS),
"enum", TCL_EXACT, &index))
return TCL_ERROR;
1172 *ret = keys[index].
val;
1189 assert(mng != NULL);
1193 #ifdef OT_DEBUG_NAMESPACE_DELETE
1224 OT_NS_T myNsP = MoxResolveN(selfO);
1225 if (myNsP == NULL)
goto error;
1227 myNsP->clientData = obj;
1228 myNsP->deleteProc =
MK(Atom_ns_delete);
1255 retI = MoxCreate3N(clsC, nameO, nsO, objc, objv);
1256 if (retI != TCL_OK)
goto error;
1258 selfO = Tcl_GetObjResult(interp);
1259 if (selfO == NULL)
goto error;
1262 if (selfO == NULL)
goto error;
1282 selfO = MoxMakeN(clsC, nameO, nsO);
1283 if (selfO == NULL)
goto error;
1286 if (selfO == NULL)
goto error;
1303 assert(nameO != NULL);
1309 if (strncmp(
"::",Tcl_GetString(nameO),2) != 0) {
1310 nsO =
STR2VAL(Tcl_GetCurrentNamespace(interp)->fullName);
1311 Tcl_IncrRefCount(nsO);
1313 selfO =
AtomCreate(obj, clsC, nameO, nsO, 0, NULL, env);
1314 if (selfO == NULL)
goto error;
1338 static const char *option[] = {
1339 "object",
"type",
"var", NULL
1342 OBJECT, TYPE, VARIABLE
1346 check_LNG (Tcl_GetIndexFromObj (interp, objv[__skip++], option,
"subcommand", 0, &index))
1350 switch ((
enum options) index) {
1353 Tcl_SetResult (interp,
MK(PrintObj) (
OT_Prefix_CALL "print", objv[__skip]), TCL_VOLATILE);
1357 Tcl_SetResult (interp, (
char*)
MK(GetTypeFromObj) (
OT_Prefix_CALL objv[__skip], NULL), TCL_VOLATILE);
1361 WNA(1,99,
"tclObj...");
1363 RL_init( 1, info_level_1, RL_NewS(0,
"::tcl::info::level") )
1366 check_LNG(Tcl_GetIntFromObj(interp,lvlObj,&lvl))
goto error;
1368 fputs(
"print var ",stderr);
1370 RL_init( 2, info_level_2, RL_NewS(0,
"::tcl::info::level") ; RL_NewI(1,0) ) ;
1373 check_LNG(Tcl_ListObjIndex(interp,lvlObj,0,&nameObj))
goto error;
1374 STR = Tcl_GetString(nameObj);
1380 for (
int i=2; i<objc; i++) {
1381 char * nameS = Tcl_GetString(objv[i]);
1382 OT_OBJ_T var = Tcl_ObjGetVar2(interp,objv[i],NULL,0);
1384 fprintf(stderr,
"%s<%s>, ", nameS, Tcl_GetString(var));
1386 fprintf(stderr,
"%s<not set>, ", nameS);
1411 static const char *constant[] = {
1412 "maxY",
"minY",
"maxS",
"minS",
"maxI",
"minI",
"maxF",
"minF",
"maxW",
"minW",
"maxD",
"minD", NULL
1415 MAXY, MINY, MAXS, MINS, MAXI, MINI, MAXF, MINF, MAXW, MINW, MAXD, MIND,
1418 WNA(1,1,
"(maxY|minY|maxS|minS|maxI|minI|maxF|minF|maxW|minW|maxD|minD)");
1421 check_LNG (Tcl_GetIndexFromObj (interp, objv[__skip], constant,
"constant", 0, &index))
1425 switch ((
enum constants) index) {
1426 case MAXY: Obj = Tcl_NewIntObj (SCHAR_MAX);
break;
1427 case MINY: Obj = Tcl_NewIntObj (SCHAR_MIN);
break;
1428 case MAXS: Obj = Tcl_NewIntObj (SHRT_MAX);
break;
1429 case MINS: Obj = Tcl_NewIntObj (SHRT_MIN);
break;
1430 case MAXI: Obj = Tcl_NewLongObj (INT_MAX);
break;
1431 case MINI: Obj = Tcl_NewLongObj (INT_MIN);
break;
1432 case MAXF: Obj = Tcl_NewDoubleObj (FLT_MAX);
break;
1433 case MINF: Obj = Tcl_NewDoubleObj (FLT_MIN);
break;
1434 case MAXW: Obj = Tcl_NewWideIntObj (LLONG_MAX);
break;
1435 case MINW: Obj = Tcl_NewWideIntObj (LLONG_MIN);
break;
1436 case MAXD: Obj = Tcl_NewDoubleObj (DBL_MAX);
break;
1437 case MIND: Obj = Tcl_NewDoubleObj (DBL_MIN);
break;
1440 Tcl_SetObjResult (interp, Obj);
1451 Tcl_Obj *Obj = NULL;
1453 static const char *constant[] = {
1454 "thread",
"fork", NULL
1460 WNA(1,1,
"(thread|fork)")
1463 check_LNG (Tcl_GetIndexFromObj (interp, objv[__skip], constant,
"configuration", 0, &index))
return TCL_ERROR;
1466 switch ((
enum constants) index) {
1469 Obj = Tcl_NewBooleanObj (1);
1471 Obj = Tcl_NewBooleanObj (0);
1475#if defined(HAVE_FORK)
1476 Obj = Tcl_NewBooleanObj (1);
1478 Obj = Tcl_NewBooleanObj (0);
1483 Tcl_SetObjResult (interp, Obj);
1873 {
"::MkKernel::print" ,
NS(Print_Class_Cmd) },
1874 {
"::MkKernel::const" ,
NS(Const_Class_Cmd) },
1875 {
"::MkKernel::support" ,
NS(Support_Class_Cmd) },
1879 {
"::MkKernel::ErrorE_FromInt" ,
NS(MkKernel_ErrorE_FromInt) },
1880 {
"::MkKernel::IdSE_FromInt" ,
NS(MkKernel_IdSE_FromInt) },
1881 {
"::MkKernel::TimeoutE_FromInt" ,
NS(MkKernel_TimeoutE_FromInt) },
1882 {
"::MkKernel::TypeE_FromInt" ,
NS(MkKernel_TypeE_FromInt) },
1885 {
"::MkKernel::ErrorE_ToInt" ,
NS(MkKernel_ErrorE_ToInt) },
1886 {
"::MkKernel::ErrorE_ToString" ,
NS(MkKernel_ErrorE_ToString) },
1887 {
"::MkKernel::IdSE_ToInt" ,
NS(MkKernel_IdSE_ToInt) },
1888 {
"::MkKernel::IdSE_ToString" ,
NS(MkKernel_IdSE_ToString) },
1889 {
"::MkKernel::TimeoutE_ToInt" ,
NS(MkKernel_TimeoutE_ToInt) },
1890 {
"::MkKernel::TimeoutE_ToString" ,
NS(MkKernel_TimeoutE_ToString) },
1891 {
"::MkKernel::TypeE_ToInt" ,
NS(MkKernel_TypeE_ToInt) },
1892 {
"::MkKernel::TypeE_ToString" ,
NS(MkKernel_TypeE_ToString) },
1895 {
"::MkKernel::Cleanup" ,
NS(MkKernel_Cleanup) },
1896 {
"::MkKernel::Setup" ,
NS(MkKernel_Setup) },
1905__attribute__((unused))
1921void NS(MkKernel_ns_delete)(ClientData clientData)
1924#ifdef OT_DEBUG_NAMESPACE_DELETE
1933 ns = Tcl_FindNamespace(interp,
"::MkBufferStreamC",NULL,TCL_GLOBAL_ONLY);
1934 if (ns) Tcl_DeleteNamespace(ns);
1935 ns = Tcl_FindNamespace(interp,
"::MkRuntimeC",NULL,TCL_GLOBAL_ONLY);
1936 if (ns) Tcl_DeleteNamespace(ns);
1937 ns = Tcl_FindNamespace(interp,
"::MkErrorC",NULL,TCL_GLOBAL_ONLY);
1938 if (ns) Tcl_DeleteNamespace(ns);
1939 ns = Tcl_FindNamespace(interp,
"::MkLogFileC",NULL,TCL_GLOBAL_ONLY);
1940 if (ns) Tcl_DeleteNamespace(ns);
1941 ns = Tcl_FindNamespace(interp,
"::MkBufferListC",NULL,TCL_GLOBAL_ONLY);
1942 if (ns) Tcl_DeleteNamespace(ns);
1943 ns = Tcl_FindNamespace(interp,
"::MkBufferC",NULL,TCL_GLOBAL_ONLY);
1944 if (ns) Tcl_DeleteNamespace(ns);
1945 ns = Tcl_FindNamespace(interp,
"::MkObjectC",NULL,TCL_GLOBAL_ONLY);
1946 if (ns) Tcl_DeleteNamespace(ns);
1954 Tcl_DeleteNamespace(item->
classNS);
1957 #define AtlRtFree(tok) if (amkrt->tok) OT_REF_DECR_AND_NULL(amkrt->tok);
1958 #define regTclObj2(t,v) AtlRtFree(t)
1959 #define regTclObj(t) AtlRtFree(t)
1960 #define regTclCmd(t) AtlRtFree(t)
1995 if (Tcl_InitStubs (interp,
"8.5",
false) == NULL) {
2004 check_LNG (Tcl_PkgProvideEx (interp,
"atlmkkernel", META_VERSION, &
amkrtR ))
return TCL_ERROR;
2007 if (Tcl_GetVar(interp,
"::tcl::newPkgs", TCL_GLOBAL_ONLY) != NULL)
return TCL_OK;
2010 MK_STRN ver = Tcl_PkgRequire(interp,
"libmyoox",
"1.0", 0);
2017 Tcl_SetErrorCode(interp,
"ATLMK",
"INIT",
"SIGNATURE",
"INVALID", NULL);
2018 Tcl_SetResult(interp,
"error: ATLMK setup failed with INVALID signature", TCL_STATIC);
2024 Tcl_SetErrorCode(interp,
"ATLMK",
"INIT",
"INTERPRETER",
"INVALID", NULL);
2025 Tcl_SetResult(interp,
"error: ATLMK setup failed with INVALID interpreter", TCL_STATIC);
2031 Tcl_SetErrorCode(interp,
"ATLMK",
"INIT",
"MK_RT",
"INVALID", NULL);
2032 Tcl_SetResult(interp,
"error: ATLMK setup failed with INVALID MkRuntimeS", TCL_STATIC);
2039 MOX_NS_T ns = Tcl_FindNamespace(interp,
"::myooX",NULL,TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG);
2040 if (ns == NULL)
return TCL_ERROR;
2041 amkrt->
moxrt = ns->clientData;
2042 if (amkrt->
moxrt == NULL) {
2043 Tcl_SetResult(interp,
"error: libmyoox is broken, 'clientData=moxrt' is missing", TCL_STATIC);
2044 Tcl_SetErrorCode(interp,
"ATLMK",
"INIT",
"LOOKUP", NULL);
2049 #define regTclObj2(t,v) if (amkrt->t) OT_REF_DECR(amkrt->t)
2050 #define regTclObj(t) regTclObj2(t,#t)
2051 #define regTclCmd(t) regTclObj2(t,#t)
2058 #define regTclObj2(t,v) amkrt->t = STR2VAL(v); Tcl_IncrRefCount(amkrt->t);
2059 #define regTclObj(t) regTclObj2(t,#t)
2060 #define regTclCmd(t) regTclObj2(t,#t)
2067 ns = Tcl_FindNamespace(interp,
"::MkKernel",NULL,TCL_GLOBAL_ONLY);
2069 ns = Tcl_CreateNamespace(interp,
"::MkKernel",amkrt,
NS(MkKernel_ns_delete));
2070 if (ns == NULL)
return TCL_ERROR;
2074 check_LNG(
MK(FillNamespace) (interp,
MK(sOtClassDef),amkrt) )
return TCL_ERROR;
2090 amkrt->
LONG = Tcl_GetObjType(
"int") ;
2091 amkrt->
WIDE = Tcl_GetObjType(
"wideInt") ;
2092 amkrt->
DOUBLE = Tcl_GetObjType(
"double") ;
2093 amkrt->
BOOLEAN = Tcl_GetObjType(
"booleanString") ;
2094 amkrt->
INDEX = Tcl_GetObjType(
"index") ;
2096 amkrt->
NS = Tcl_GetObjType(
"nsName") ;
2103 OT_NS_T ns = Tcl_FindNamespace(interp,
"::MkKernel",NULL,TCL_GLOBAL_ONLY);
2104 if (ns) Tcl_DeleteNamespace(ns);
__thread OT_MK_RT_S amkrtR
#define IdSE_ToString_doc
#define TimeoutE_FromInt_doc
#define Get_Call_Cmd__SIZE
OT_ATL_EXTERN int Atlmkkernel_Unload(OT_ENV_T interp, int flags)
#define AtlClassDefGetTypNN(...)
#define ErrorE_ToString_doc
#define AtlClassDefGetTypN(...)
#define OT_SETUP_hdl_static
#define ErrorE_FromInt_doc
#define ClassDefCreateNN(...)
#define AtlClassDefGetTypNNN(...)
#define TypeE_FromInt_doc
#define TimeoutE_ToString_doc
#define TimeoutE_ToInt_doc
#define TypeE_ToString_doc
#define OT_SETUP_NOARG(d)
#define OT_SETUP_ONEARG(d)
#define OT_DEBUG_NAMESPACE_DELETE(...)
#define OT_VARFRAME_DELETE
#define Ot_GetBooleanFromObj(val)
#define OT_CHECK_NI4(val)
#define OT_retObj_SET_Error
#define OT_LNG_NAME_FROM_CLASS(_cls)
#define AtomCreateCONSTR(...)
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
#define OT_retObj_SET_I32(nat)
#define OT_ERROR_VAR_DEFAULT(...)
static void Ot_DecrRefCount(OT_OBJ_T tclO)
#define WNA(min, max, txt)
#define OT_CHECK_ENUM(ename, val)
#define OT_ERROR_LNG_RETURN_HDL_IS_NULL()
#define AtlClassDefGetNN(...)
#define OT_ERROR_LNG_2_META(m)
#define OT_ERROR_APPEND_LNG_STACK()
#define OT_retObj_SET_STR(nat)
#define OT_NEW_Mk_enum_OBJ(typ, val)
struct AtlClassDefS AtlClassDefS
#define OT_REF_DECR_AND_NULL(_obj)
#define OT_REF_DECR(_obj)
#define OT_retObj_SET(val)
#define OT_REF_INCR(_obj)
#define AtlArrayExists(l)
#define OT_VARFRAME_CREATE
#define MkErrorC_Check(mng, PROC)
#define AtlClassName_buf_size
#define RL_EvalFr(frm, f)
#define MkBufferAppendV(...)
#define MkBUF(x)
cast a known-object into an MkBufferS pointer
#define MkBUF_R(x)
cast a known-object into an MkBufferS reference
#define MkBufferSetV(...)
#define MkBufferCreateTLS_T(cls, name, size)
create an new MkBufferC object as T)hread L)ocal S)torage…
#define MkBufferListIndexSetSTR(...)
#define MkBufferListReserve(...)
#define MkBufferListCreate(...)
#define MkErrorStackFormat(...)
#define MkErrorStackFormat_0E()
#define MK_UNUSED
mark unnused variables and functions
static bool MK_NULL_STR_CHECK(char const *const __str, const long int __len)
check if __str is MK_NULL_STR return true or false …
MK_STRN MkTimeoutE_ToString(enum MkTimeoutE value)
return the MkTimeoutE as string …
MkTimeoutE
Predefined Timeout values …
MkBoolE
the internal boolean …
enum MkErrorE MkIdSE_FromInt(MK_I32 const value, enum MkIdSE *value_out)
return the MkIdSE from integer …
static MK_I32 MkTypeE_ToInt(enum MkTypeE value)
return the MkTypeE as integer …
static MK_I32 MkErrorE_ToInt(enum MkErrorE value)
return the MkErrorE as integer …
MK_STRN MkNativeIsE_ToString(enum MkNativeIsE value)
return the MkNativeIsE as string …
static MK_I32 MkTimeoutE_ToInt(enum MkTimeoutE value)
return the MkTimeoutE as integer …
enum MkErrorE MkTypeE_FromInt(MK_I32 const value, enum MkTypeE *value_out)
return the MkTypeE from integer …
MK_STRN MkBoolE_ToString(enum MkBoolE value)
return the MkBoolE as string …
MK_STRN MkIdSE_ToString(enum MkIdSE value)
return the MkIdSE as string …
static MK_I32 MkIdSE_ToInt(enum MkIdSE value)
return the MkIdSE as integer …
enum MkErrorE MkErrorE_FromInt(MK_I32 const value, enum MkErrorE *value_out)
return the MkErrorE from integer …
enum MkErrorE MkTimeoutE_FromInt(MK_I32 const value, enum MkTimeoutE *value_out)
return the MkTimeoutE from integer …
MK_STRN MkTypeE_ToString(enum MkTypeE value)
return the MkTypeE as string …
MkErrorE
collection for the different error-codes …
MkNativeIsE
define if data is string or little or big endian …
MkTypeE
basic data-types supported by Programming-Language-Micro-Kernel (PLMK) …
MK_STRN MkErrorE_ToString(enum MkErrorE value)
return the MkErrorE as string …
@ MK_TIMEOUT_LONG
long timeout in sec (180 sec) …
@ MK_TIMEOUT_VERYSHORT
very short timeout in sec (5 sec) …
@ MK_TIMEOUT_INIT
maximum timeout in sec (900 sec) …
@ MK_TIMEOUT_MAX
request the maximum possible (infinite) timeout value …
@ MK_TIMEOUT_NORMAL
normal timeout in sec (90 sec) …
@ MK_TIMEOUT_USER
request the user defined timeout value from the –timeout configuration value …
@ MK_TIMEOUT_SOCKET
shorter timeout in sec (10 sec) … This TIMEOUT is used for socket connection with 'connect'
@ MK_TIMEOUT_SHORT
short timeout in sec (20 sec) …
@ MK_TIMEOUT_DEFAULT
request the default timeout value …
@ MK_ERROR
(persistent) raise an error-event, the calling-fucntion is interrupted.
@ MK_CONTINUE
(transient) raise an continue-event, the calling-function must handle this.
@ MK_OK
(persistent) everything is OK.
@ MK_NATIVE_IS_INITIAL
0 = initial value
@ MK_NATIVE_IS_STRING
S = using of the string protocol.
@ MK_NATIVE_IS_LITTLE
L = using if the binary protocoll, data in little-edian.
@ MK_NATIVE_IS_BIG
B = using if the binary protocoll, data in big-endian.
@ MK_I8T
Y: 1 byte 'byte' type.
@ MK_I64T
W: 8 byte 'long long int' type.
@ MK_FLTT
F: 4 byte 'float' type.
@ MK_BINT
B: X byte 'byte-array' type.
@ MK_I16T
S: 2 byte 'short' type.
@ MK_BOLT
O: 1 byte 'boolean' type.
@ MK_DBLT
D: 8 byte 'double' type.
@ MK_I32T
I: 4 byte 'int' type.
@ MK_STRT
C: X byte 'string' type (e.g. with a \0 at the end)
@ MK_LSTT
L: X byte 'list' type.
void MkSetup(void)
setup atlmkkernel internal memory …
void MkCleanup(void)
cleanup atlmkkernel internal memory …
static MkStringR MkStringCreate(MK_NUM len, MK_STRN str)
create a str from ptr and len ...
static bool MkStringIsNULL(MkStringR const strR)
check if strR is MK_NULL_STR return true or false …
MK_PTRB * MK_PTR
generic pointer data-type
const MK_STRB * MK_STRN
constant string pointer data-type
MK_PTRB * MK_MNG
managed object pointer, datatype will be checked at runtime
MK_STRB * MK_STR
string pointer data-type with UTF8 ecoding (string)
signed int MK_I32
4 byte integer data-type
#define __MkCheckTO(t, o)
static MK_OBJ MkObjectNext(MK_OBJ const obj)
get next instance from linked-list of MkObjectS type
#define MkObjectC_TT
class as MkTypeS-class-type, useable in a class-macro as: class##_TT …
#define MkOBJ_R(x)
cast a known-object into an MkObjectS reference
static bool MkObjCheck(MK_MNGN mng)
check MkObjectS -> MkObjectS::signature …
static MK_OBJ MkObj(MK_MNG mng)
cast a unknown-object into an MkObjectS pointer or NULL if not possible
#define MkObjectToName(...)
#define MkRefDecrWithoutSelf(...)
static void MkSelfSet(MK_OBJ const obj, MK_PTR const self, MK_PTR const env)
set the MkObjectS::self value
static void MkRefIncr(MK_OBJ obj)
increment the reference-count
#define MkSelfSet_3X(x, self, env)
MkIdSE
signal type of the MkIdS data val …
#define MkSysFree(pointer)
MK_PTR MkSysMalloc(MK_OBJN fmtobj, size_t const size)
malloc syscall with atlmkkernel error plugin
@ MK_ID_THREAD
val has a thread handle
@ MK_ID_PROCESS
val has a process handle
@ MK_ID_UNUSED
empty struct
#define MkTypeForeachInstancesSave(typ)
#define WrongNumArgs(...)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsSTRN(OT_Check_ARGS, MK_STRN *)
bool MK TestObject(OT_Prefix_ARGS OT_OBJ_T lngO, OT_CLS_T typeO, MK_OBJ *objP, MkTestClassE *flagP)
#define OT_LNG_OBJECT_IS_3(objV, obj, flag)
@ MkTestClassE_NONE_OBJECT
@ MkTestClassE_INVALID_SIGNATURE
@ MkTestClassE_WRONG_CLASS
struct AtlClassDefS * next
The CLASS used to store a list of MkBufferS items into a flat array…
The data-type to store and handle the error-condition …
MK_PTR self
link between the managed object and the object in the target-programming-language
MkTypeS - class known as typ or type is used as class-base for a Managed-Object-Technology (MOT) type...
MK_TYP type_class
point to the instancesR linked list of the class-type
MK_STRB type_name[MkTypeS_name_size]
public name of the type like TclMqContextC
MK_TYP type_base
base type
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
OT_CLS_T AtlMkBufferListC
const Tcl_ObjType * DOUBLE
OT_CLS_T AtlMkBufferStreamC
OT_OBJ_T AtlMkLogFileC_MK_NULL
const Tcl_ObjType * INDEX
OT_OBJ_T AtlMkRuntimeC_MK_NULL
OT_OBJ_T AtlMkBufferListC_MK_NULL