13#include "nhi1_config.h"
16#include "LibMkKernel_mk.h"
20#if !defined(META_FILE_NAME)
21 #define META_FILE_NAME (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
40#if defined(META_IGNORE_EXTERN)
44# if defined(DLL_EXPORT)
46# if defined(MK_PY_BUILD_DLL)
47# define MK_PY_EXTERN __declspec(dllexport)
49# define MK_PY_EXTERN __declspec(dllimport)
53# define MK_PY_EXTERN __attribute__ ((visibility("default")))
61#undef MK_PY_EXTERN_DATA
62#if defined(META_PRIVATE)
63# define MK_PY_EXTERN_DATA extern
64#elif defined(META_IGNORE_EXTERN)
65# define MK_PY_EXTERN_DATA extern
68# if defined(DLL_EXPORT)
70# if defined(MK_PY_BUILD_DLL)
71# define MK_PY_EXTERN_DATA __declspec(dllexport)
73# define MK_PY_EXTERN_DATA __declspec(dllimport)
77# define MK_PY_EXTERN_DATA __attribute__ ((visibility("default"))) extern
80# define MK_PY_EXTERN_DATA extern
84#define MK(n) pymkkernel_ ## n
86#define NS(n) pymkkernel_ ## n
90#define OT_ProcRet PyObject*
92#define CONSTR_ARGS PyTypeObject *class, PyObject *objv, PyObject *kwd
93#define CONSTR_ARGS_CALL class, objv
95#define OtClass_ARGS PyObject *class, PyObject *objv
96#define OtClass_ARGS_CALL class, objv
113#define OT_LNG_NULL Py_None
114#define OT_LNG_UNDEF Py_None
115#define OT_LNG_IS_NULL(val) Py_IsNone(val)
116#define OT_LNG_RETURN(ret,cmd) ret=cmd
118#define OT_LNG_NAME_FROM_CLASS(cls) (cls)->tp_name
120#define OT_LNG_OBJ_CLASSNAME(obj) Py_TYPE(obj)->tp_name
122#define OT_LNG_OBJV(skip) OT_TUPLE_GET_ITEM(objv,skip)
124#define OT_LNG_OBJ_CLASS_IS(val,cls) PyObject_TypeCheck(val,cls)
125#define OT_OBJ_TO_CLASS(ptr) ptr
126#define OT_OBJ_TO_ENUM(str) str ## _lngO
128#define OT_LNG_OBJECT_IS(objV) PyObject_TypeCheck(objV,MkObjectC_lngO)
197#define OT_CLASS_TYPE_REF OT_CLS_TR
207#define OT_REF_INCR(_obj) Py_INCREF(_obj)
208#define OT_REF_INCR_AND_RETURN(_obj) ({ OT_REF_INCR(_obj); _obj;})
209#define OT_REF_DECR_AND_NULL(_obj) Py_CLEAR(_obj)
223 #define MkBufferListC_lngO (&MK(MkBufferListCR))
224 #define MkBufferListC_base (&MK(MkObjectCR))
227 #define MkBufferListC_MK_NULL MK(MkKernelThreadState).MkBufferListC_MK_NULL
230 #define MkBufferListC_ARGS MkBufferListC_Obj *self, PyObject *objv
231 #define MkBufferListC_ARGS_CALL self, objv
234 #define OT_retObj_SET_BFL(nat) retObj = MK(MkBufferListC_ObjNew) (MK_RT_CALL &MK(MkBufferListCR),nat)
237 #define OT_TMP_BFL_OBJ(val) MK(MkBufferListC_ObjNew)(MK_RT_CALL &MK(MkBufferListCR),val)
244 #define VAL2BFL(val) ((MkBufferListC_Obj*) (val))->hdl
256 #define MkBufferC_lngO (&MK(MkBufferCR))
257 #define MkBufferC_base (&MK(MkObjectCR))
260 #define MkBufferC_MK_NULL MK(MkKernelThreadState).MkBufferC_MK_NULL
263 #define MkBufferC_ARGS MkBufferC_Obj *self, PyObject *objv
264 #define MkBufferC_ARGS_CALL self, objv
267 #define OT_retObj_SET_BUF(nat) retObj = MK(MkBufferC_ObjNew) (MK_RT_CALL &MK(MkBufferCR),nat)
270 #define OT_TMP_BUF_OBJ(val) MK(MkBufferC_ObjNew)(MK_RT_CALL &MK(MkBufferCR),val)
277 #define VAL2BUF(val) ((MkBufferC_Obj*) (val))->hdl
289 #define MkBufferStreamC_lngO (&MK(MkBufferStreamCR))
290 #define MkBufferStreamC_base (&MK(MkObjectCR))
293 #define MkBufferStreamC_MK_NULL MK(MkKernelThreadState).MkBufferStreamC_MK_NULL
296 #define MkBufferStreamC_ARGS MkBufferStreamC_Obj *self, PyObject *objv
297 #define MkBufferStreamC_ARGS_CALL self, objv
300 #define OT_retObj_SET_BUS(nat) retObj = MK(MkBufferStreamC_ObjNew) (MK_RT_CALL &MK(MkBufferStreamCR),nat)
303 #define OT_TMP_BUS_OBJ(val) MK(MkBufferStreamC_ObjNew)(MK_RT_CALL &MK(MkBufferStreamCR),val)
310 #define VAL2BUS(val) ((MkBufferStreamC_Obj*) (val))->hdl
322 #define MkErrorC_lngO (&MK(MkErrorCR))
323 #define MkErrorC_base (&MK(MkObjectCR))
326 #define MkErrorC_MK_NULL MK(MkKernelThreadState).MkErrorC_MK_NULL
329 #define MkErrorC_ARGS MkErrorC_Obj *self, PyObject *objv
330 #define MkErrorC_ARGS_CALL self, objv
333 #define OT_retObj_SET_ERR(nat) retObj = MK(MkErrorC_ObjNew) (MK_RT_CALL &MK(MkErrorCR),nat)
336 #define OT_TMP_ERR_OBJ(val) MK(MkErrorC_ObjNew)(MK_RT_CALL &MK(MkErrorCR),val)
343 #define VAL2ERR(val) ((MkErrorC_Obj*) (val))->hdl
355 #define MkLogFileC_lngO (&MK(MkLogFileCR))
356 #define MkLogFileC_base (&MK(MkObjectCR))
359 #define MkLogFileC_MK_NULL MK(MkKernelThreadState).MkLogFileC_MK_NULL
362 #define MkLogFileC_ARGS MkLogFileC_Obj *self, PyObject *objv
363 #define MkLogFileC_ARGS_CALL self, objv
366 #define OT_retObj_SET_LFL(nat) retObj = MK(MkLogFileC_ObjNew) (MK_RT_CALL &MK(MkLogFileCR),nat)
369 #define OT_TMP_LFL_OBJ(val) MK(MkLogFileC_ObjNew)(MK_RT_CALL &MK(MkLogFileCR),val)
376 #define VAL2LFL(val) ((MkLogFileC_Obj*) (val))->hdl
388 #define MkObjectC_lngO (&MK(MkObjectCR))
389 #define MkObjectC_base NULL
392 #define MkObjectC_MK_NULL MK(MkKernelThreadState).MkObjectC_MK_NULL
395 #define MkObjectC_ARGS MkObjectC_Obj *self, PyObject *objv
396 #define MkObjectC_ARGS_CALL self, objv
399 #define OT_retObj_SET_OBJ(nat) retObj = MK(MkObjectC_ObjNew) (MK_RT_CALL &MK(MkObjectCR),nat)
402 #define OT_TMP_OBJ_OBJ(val) MK(MkObjectC_ObjNew)(MK_RT_CALL &MK(MkObjectCR),val)
409 #define VAL2OBJ(val) ((MkObjectC_Obj*) (val))->hdl
421 #define MkRuntimeC_lngO (&MK(MkRuntimeCR))
422 #define MkRuntimeC_base (&MK(MkObjectCR))
425 #define MkRuntimeC_MK_NULL MK(MkKernelThreadState).MkRuntimeC_MK_NULL
428 #define MkRuntimeC_ARGS MkRuntimeC_Obj *self, PyObject *objv
429 #define MkRuntimeC_ARGS_CALL self, objv
432 #define OT_retObj_SET_RT(nat) retObj = MK(MkRuntimeC_ObjNew) (MK_RT_CALL &MK(MkRuntimeCR),nat)
435 #define OT_TMP_RT_OBJ(val) MK(MkRuntimeC_ObjNew)(MK_RT_CALL &MK(MkRuntimeCR),val)
442 #define VAL2RT(val) ((MkRuntimeC_Obj*) (val))->hdl
450#define OT_SETUP_ARGS_ALL(d) \
451 PyObject *retObj=NULL; \
452 Py_ssize_t __skip=0; \
453 MK_UNUSED static const MK_STRN __doc=d; \
454 MK_UNUSED PyObject* frame=NULL; \
456#define OT_FRAME_CLEANUP if (frame != NULL) Py_CLEAR(frame)
458#define OT_SETUP_VARARGS(min,max,d) \
459 OT_SETUP_ARGS_ALL(d) \
460 Py_ssize_t objc=PyTuple_GET_SIZE(objv); \
461 OT_CHECK_NUM_ARGS(min,max); \
463#define OT_SETUP_CONSTRUCTOR_ARGS(...) OT_SETUP_VARARGS(__VA_ARGS__)
465#define OT_SETUP_ONEARG(d) \
466 OT_SETUP_ARGS_ALL(d) \
468 OT_CHECK_NUM_ARGS(1,1); \
470#define OT_SETUP_NOARG(d) \
471 OT_SETUP_ARGS_ALL(d) \
473 OT_CHECK_NUM_ARGS(0,0); \
475#define OT_SETUP_OBJ(o,v) PyObject* o=(PyObject*)v;
477#define OT_SELF ((PyObject*)self)
478#define OT_SELF_X(x) ((PyObject*)(MkOBJ_R(x).self))
479#define OT_SELF_O(o) ((PyObject*)((*o).self))
485#define OT_SETUP_hdl_tmpl(cls) \
486 typeof(self->hdl) hdl = self->hdl; \
488 OT_ERROR_VAR_DEFAULT("'%s' hdl is NULL",OT_LNG_OBJ_CLASSNAME(self)); \
491 SetupRtFromObj_XN(hdl); \
493#define OT_SETUP_hdl_tmpl__null_allow(cls) \
494 typeof(self->hdl) hdl = self->hdl; \
495 SetupRtFromObj_X(hdl); \
497#define OT_RET_SELF (Py_NewRef(OT_SELF))
499#define OT_retObj_SET(val) retObj = (val);
500#define OT_retObj_SET_None retObj = Py_NewRef(Py_None);
502#define OT_retObj_SET_Error retObj = NULL;
503#define OT_retObj_SET_List retObj = PyList_New(0);
504#define OT_retObj_APPEND(var) PyList_Append(retObj,var);
505#define OT_retObj_RETURN return ((PyObject*)retObj);
507#define OT_retObj_SET_BOL(nat) retObj = BOL2VAL(nat);
508#define OT_retObj_SET_I8(nat) retObj = I82VAL(nat);
509#define OT_retObj_SET_I16(nat) retObj = I162VAL(nat);
510#define OT_retObj_SET_I32(nat) retObj = INT2VAL(nat);
511#define OT_retObj_SET_I64(nat) retObj = I642VAL(nat);
512#define OT_retObj_SET_FLT(nat) retObj = FLT2VAL(nat);
513#define OT_retObj_SET_DBL(nat) retObj = DBL2VAL(nat);
514#define OT_retObj_SET_BIN(nat,len) retObj = BIN2VAL(nat,len);
515#define OT_retObj_SET_STR(nat) retObj = STRN2VAL(nat);
516#define OT_retObj_SET_STRN(nat) retObj = STRN2VAL(nat);
517#define OT_retObj_SET_LONG(nat) retObj = LONG2VAL(nat);
518#define OT_retObj_SET_HDL(nat) retObj = HDL2VAL(nat);
520#define OT_CONSTRUCTOR_POST(x)
524#define OT_MK_CALL_0(obj,cls,meth,ret) ret=MK(cls##_##meth)((cls##_Obj*)cls##_constr(obj),MK(MkKernelThreadState).emptyTuple);
529#define OT_ERROR_LNG_RETURN return NULL
531#define OT_ERROR_BASE(err,str) { \
532 if (MkErrorCheckE_0E()) { \
533 PyErr_Format(err,"%s\nMqError: %s",str,MkErrorGetText_0E()); \
536 PyErr_SetString(err,str); \
540#define OT_ERROR_SOFT_CONSTRUCTOR(class) { \
541 OT_ERROR_BASE(MK(MkKernelThreadState).InitSoftError, "'" #class "' soft constructor return 'NULL' pointer"); \
544#define OT_ERROR_CONSTRUCTOR(class) \
545 OT_ERROR_BASE(MK(MkKernelThreadState).InitError, "'" #class "' constructor return 'NULL' pointer")
547#define OT_ERROR_TYPE(str) \
548 PyErr_SetString(PyExc_TypeError, str);
550#define MkErrorC_Check(mng,PROC) \
551 if (unlikely(MkErrorCheckI(PROC))) { \
552 OT_ERROR_META_2_LNG(mng); goto error; \
555#define MkErrorC_Check_1(PROC) \
556 if (unlikely(MkErrorCheckI(PROC))) { \
557 OT_ERROR_META_2_LNG(MK_ERROR_FORMAT); goto error; \
560#define MkErrorC_CheckD(PROC) \
561 if (unlikely(MkErrorCheckI(PROC))) { \
562 OT_ERROR_META_2_LNG(hdl); goto error; \
565#define OT_ERROR_META_2_LNG(m) MK(MkExceptionC_Raise) (OT_Prefix_CALL m,__doc,__FILE__,__LINE__)
566#define OT_ERROR_LNG_2_META(m) MK(MkExceptionC_Catch) (OT_Prefix_CALL m, NULL, __func__)
568#define check_LNG(PROC) if ((PROC) < 0)
569#define OtErrorCheckLng(PROC) if ((PROC) < 0) goto error;
570#define LngErrorCheckT(TAG,PROC) if ((PROC) < 0) goto TAG;
571#define LngErrorCheckN(PROC) if ((PROC) == NULL) goto error;
572#define LngErrorCheckNT(TAG,PROC) if ((PROC) == NULL) goto TAG;
575#define OT_ERROR_NUMARGS(...) MkErrorC_CheckD(WrongNumArgs(__VA_ARGS__))
578# define OT_ERROR_VAR_DEFAULT(...) PyErr_Format(PyExc_SystemError,__VA_ARGS__)
580# define OT_ERROR_VAR_DEFAULT(...) do { \
582 PyOS_snprintf(buf,512,__VA_ARGS__); \
583 PyErr_SetString(PyExc_SystemError,buf); \
589#define OT_TMP_BOL_OBJ(val) BOL2VAL(val)
590#define OT_TMP_I8_OBJ(val) I82VAL(val)
591#define OT_TMP_I16_OBJ(val) I162VAL(val)
592#define OT_TMP_I32_OBJ(val) INT2VAL(val)
593#define OT_TMP_I64_OBJ(val) I642VAL(val)
594#define OT_TMP_FLT_OBJ(val) FLT2VAL(val)
595#define OT_TMP_DBL_OBJ(val) DBL2VAL(val)
596#define OT_TMP_BIN_OBJ(val,len) BIN2VAL(val,len)
597#define OT_TMP_STR_OBJ(val) STRN2VAL(val)
601#define OT_Prefix_ARGS MK_RT_ARGS
602#define OT_Prefix_CALL MK_RT_CALL
604#define SETUP_ARGS MK_RT_ARGS Py_ssize_t objc, PyObject *objv
605#define SETUP_ARGS_CALL MK_RT_CALL objc, objv
607#define OT_Check_ARGS SETUP_ARGS, MK_MNG hdl, MK_STRN const arg, Py_ssize_t *skipP
608#define OT_Check_CALL(arg) SETUP_ARGS_CALL, hdl, arg, &__skip
610#define OT_LNG_NULL_IS(obj) (obj == Py_None)
611#define OT_LNG_ARRAY_IS(obj) PyObject_TypeCheck(obj,&PyList_Type)
612#define OT_LNG_LONG_IS(obj) (CHECK_LONG(obj) || CHECK_STRING(obj))
613#define OT_LNG_I32_IS(obj) (CHECK_LONG(obj) || CHECK_STRING(obj))
615#define OT_LNG_SKIP_TYPE Py_ssize_t
617#define OT_LNG_OBJ_ENUM_IS(obj,enm) PyObject_TypeCheck((obj),(enm))
618#define OT_LNG_ENUM_NAME(enm) OT_LNG_NAME_FROM_CLASS(enm)
619#define OT_ENUM_TO_I32(o,e)
620#define OT_ENUM_TO_I32_2(o,str)
622#define OT_LNG_STRN_PRE(str,obj) PyObject *__##str=PyObject_Str(obj); \
623 LngErrorCheckN(__##str); \
624 MK_STRN str=PyUnicode_AsUTF8(__##str)
626#define OT_LNG_STRN_PRE_AND_LEN(str,_len,obj) \
627 PyObject *__##str=PyObject_Str(obj); \
628 LngErrorCheckN(__##str); \
629 MK_STRN str=PyUnicode_AsUTF8AndSize(__##str,&_len)
631#define OT_LNG_STRN_POST(str,obj) Py_CLEAR(__##str)
635#define OT_TUPLE_GET_ITEM(_obj,_skip) ({typeof(_skip) _idx=(_skip);(PyTuple_Check(_obj)?PyTuple_GET_ITEM((_obj),(_idx)):(_obj));})
637#define OT_CHECK_OPTIONAL(val) if (__skip < objc) {val}
638#define OT_CHECK_REQUIRED(val) val
640#define OT_CHECK_NUM_ARGS(min,max) \
641 if (objc < min || objc > max) {\
642 OT_ERROR_NUMARGS(hdl,__skip, objc, min, max, "");\
645#define OT_CHECK_NOARGS \
646 if (__skip != objc) {\
647 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, "");\
650#define OT_CHECK_BNP(val,len) \
651 if (__skip >= objc) { \
652 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
654 PyObject *t1 = OT_TUPLE_GET_ITEM(objv,__skip++);\
655 if (PyByteArray_Check(t1)) { \
656 val = (MK_BIN)PyByteArray_AS_STRING(t1); \
657 len = (MK_SIZE)PyByteArray_GET_SIZE(t1); \
659 PyErr_SetString(PyExc_TypeError, "parameter '" #val "' must be a 'byte-array'.");\
664#define OT_CHECK_BCP(val) \
665 if (__skip >= objc) { \
666 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
668 PyObject *t1 = OT_TUPLE_GET_ITEM(objv,__skip++);\
669 if (PyByteArray_Check(t1)) { \
670 val = (MK_BINN)PyByteArray_AS_STRING(t1); \
672 PyErr_SetString(PyExc_TypeError, "parameter '" #val "' must be a 'byte-array'.");\
677#define OT_GET_CONSTR_NAME(ctor) ((PyTypeObject*)ctor)->tp_name
679#define check_NULL(E) if (unlikely((E) == NULL))
687#define MkErrorE_lngO (MK(MkKernelThreadState).MkErrorE)
688#define MkIdSE_lngO (MK(MkKernelThreadState).MkIdSE)
689#define MkTimeoutE_lngO (MK(MkKernelThreadState).MkTimeoutE)
690#define MkTypeE_lngO (MK(MkKernelThreadState).MkTypeE)
694#define OT_NEW_Mk_enum_OBJ(typ,val) PyObject_CallFunction((PyObject*)(Mk ## typ ##_lngO),"i",val)
700#define OT_CHECK_STRN(val) \
701 if (__skip >= objc) { \
702 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
705 PyObject *obj=OT_TUPLE_GET_ITEM(objv,__skip++); \
706 if (obj == Py_None) { \
709 if (PyUnicode_Check(obj)) { \
710 val=PyUnicode_AsUTF8AndSize(obj,&len); \
712 OT_LNG_STRN_PRE_AND_LEN(strC,len,obj); \
715 OT_LNG_STRN_POST(strC,obj); \
717 if (MK_NULL_STR_CHECK(val,len)) { \
723#define OT_CHECK_C_COPY(val,size) \
724 if (__skip >= objc) { \
725 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
727 PyObject *obj=OT_TUPLE_GET_ITEM(objv,__skip++); \
728 if (obj == Py_None) { \
731 if (PyUnicode_Check(obj)) { \
732 strncpy(val,PyUnicode_AsUTF8(obj),size); \
734 OT_LNG_STRN_PRE(strC,obj); \
735 strncpy(val,strC,size); \
736 OT_LNG_STRN_POST(strC,obj); \
745#define OT_CHECK_LNGTMPL(val,func) MkErrorC_CheckD(func(OT_Check_CALL(#val),&val));
747#define OT_CHECK_bool(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsBOOL))
748#define OT_CHECK_NB1(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsBOL))
749#define OT_CHECK_NI1(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsI8))
750#define OT_CHECK_NI2(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsI16))
751#define OT_CHECK_NI4(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsI32))
752#define OT_CHECK_NI8(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsI64))
753#define OT_CHECK_NF4(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsFLT))
754#define OT_CHECK_NF8(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsDBL))
755#define OT_CHECK_NIL(val) OT_CHECK_LNGTMPL(val,MK(Obj_AsLONG))
759#define OT_GET_CALL_PROC MK(Get_Call_Proc)(0,&frame)
760#define OT_GET_CALL_FILE MK(Get_Call_Script)(0,&frame)
761#define OT_GET_CALL_LINE MK(Get_Call_Line)(0,&frame)
781 if ( callP == NULL || *callP == NULL || _Py_IsFinalizing())
return;
793 if ( callP == NULL || *callP == NULL || _Py_IsFinalizing())
return;
808#define OT_OBJECT_DISPOSE(self) MK(AtomDispose)(MK_RT_CALL hdl);
809#define OT_OBJECT_DELETE(self) MK(AtomDelete)(MK_RT_CALL hdl);
810#define OT_OBJECT_DELETE_HARD(self) MK(AtomDeleteHard)(MK_RT_CALL self);
811#define OT_MODULE_STATE(Ns) ((NS(ModuleStateS)*)MK_RT_REF.mkThreadData)
836 return (v?PyUnicode_FromString(v):Py_NewRef(Py_None));
846#define OBJ2VAL(nat) ((OT_OBJ_T)((MK_OBJ)nat)->self)
847#define I82VAL(nat) PyLong_FromLong(nat)
848#define BOL2VAL(nat) PyBool_FromLong(nat)
849#define I162VAL(nat) PyLong_FromLong(nat)
850#define INT2VAL(nat) PyLong_FromLong(nat)
851#define I642VAL(nat) PyLong_FromLongLong(nat)
852#define FLT2VAL(nat) PyFloat_FromDouble(nat)
853#define DBL2VAL(nat) PyFloat_FromDouble(nat)
854#define STRN2VAL(nat) MK(STRN2VAL)(nat)
855#define STR2VAL(ptr,len) MK(STR2VAL)(ptr,len)
856#define BIN2VAL(ptr,len) PyByteArray_FromStringAndSize((const char*)ptr,(Py_ssize_t)len)
857#define LONG2VAL(nat) PyLong_FromLong(nat)
858#define HDL2VAL(nat) PyLong_FromLong(nat)
860#define VAL2MNG(val) (MK_MNG)((MkObjectC_Obj*) val)->hdl
868 }
else if ((uc = PyUnicode_FromString(str)) == NULL) {
870 return PyUnicode_FromString(
"ERROR in STRN2VAL");
880 }
else if ((uc = PyUnicode_FromStringAndSize(str,len)) == NULL) {
882 return PyUnicode_FromString(
"ERROR in STR2VAL");
894#define ME_REF_MkBinaryR MkBinaryR
895#define OT_GET__ME_REF_MkBinaryR(b) BIN2VAL(b.data,b.size)
896#define VAL2MkBinaryR(_obj) ({ \
897 PyObject *obj=_obj; \
900 if (obj != Py_None) { \
901 if (PyByteArray_Check(obj)) { \
902 bin = (MK_BIN)PyByteArray_AS_STRING(obj); \
903 len = (MK_SIZE)PyByteArray_GET_SIZE(obj); \
905 PyErr_SetString(PyExc_TypeError, "parameter '" #_obj "' must be a 'byte-array'."); \
909 MkBinaryCreate(len,bin); \
911#define OT_CHECK__ME_REF_MkBinaryR(val) \
912 if (__skip >= objc) { \
913 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
915 val=VAL2MkBinaryR(OT_TUPLE_GET_ITEM(objv,__skip++)); \
918#define ME_REF_MkStringR MkStringR
919#define OT_GET__ME_REF_MkStringR(b) STR2VAL(b.ptr,b.len)
920#define VAL2MkStringR(_obj) ({ \
921 PyObject *obj=_obj; \
922 const char *str=NULL; \
924 if (obj != Py_None) { \
925 if (PyUnicode_Check(obj)) { \
926 str=PyUnicode_AsUTF8AndSize(obj,&len); \
928 OT_LNG_STRN_PRE_AND_LEN(strC,len,obj); \
931 OT_LNG_STRN_POST(strC,obj); \
934 MkStringCreate((MK_NUM)len,str); \
936#define OT_CHECK__ME_REF_MkStringR(val) \
937 if (__skip >= objc) { \
938 OT_ERROR_NUMARGS(hdl,__skip, objc, -999, +999, #val); \
940 val=VAL2MkStringR(OT_TUPLE_GET_ITEM(objv,__skip++)); \
950 if (obj == NULL) obj = Py_None;
951 fprintf(stderr,
"%-30s:%-25s[refCnt=%-3zi, type=%-10s, self=%-20p] -> ",
952 caller,str,Py_REFCNT(obj),Py_TYPE(obj)->tp_name,obj);
953 PyObject_Print(obj,stderr,Py_PRINT_RAW);
954 fprintf(stderr,
"\n");
958 #define formatObj_fmt "%-10s [ptr=%-16p, refCnt=%-3zi, type=%-16s, self=%-16p, mq=%p] -> %s"
959 #define formatObj_args(s,o) s, o, Py_REFCNT(o),Py_TYPE(o)->tp_name, o, MK(LngObjToMqPtr)(o), MK(LngObjToString)(o)
961 #define formatObj(s,o) formatObj_fmt,formatObj_args(s,o)
963 #define printXSObj(ctx,s,o) printXV(ctx, formatObj_fmt, formatObj_args(s,o));
964 #define printXLngObj(x,o) printXSObj(x,#o,(o!=NULL?(PyObject*)o:(PyObject*)Py_None))
965 #define printLngObj(o) printXLngObj(NULL,(o))
967 #define formatObj2_fmt "%-10s [ptr=%-16p, refCnt=%-3zi, type=%-16s, self=%-16p, mq=%p]"
968 #define formatObj2_args(s,o) s, o, Py_REFCNT(o),Py_TYPE(o)->tp_name, o, MK(LngObjToMqPtr)(o)
970 #define printXSObj2(ctx,s,o) printXV(ctx, formatObj2_fmt, formatObj2_args(s,o));
971 #define printXLngObj2(x,o) printXSObj2(x,#o,(o!=NULL?(PyObject*)o:(PyObject*)Py_None))
972 #define printLngObj2(o) printXLngObj2(NULL,o)
974 #define printObj1(x,o) printXLngObj(x,o)
975 #define printRef(s,o) printV(s ": " #o "<%p>, refCount<%li>\n", o, Py_REFCNT(o));
976 #define printXRef(x,s,o) {\
978 printXLV(x,s ": " #o "<%p>, refCount<%li>\n", NULL, 0L);\
980 printXLV(x,s ": " #o "<%p>, refCount<%li>\n", o, Py_REFCNT(o));\
985 #define printError(ctx,str) if (PyErr_Occurred()) {\
986 MLTxt2(ctx,str,MK(LngErrorToString)())\
988 MLTxt2(ctx,str,"None")\
992char*
MK(LngErrorToString)(void);
1027 if (selfO==NULL || _Py_IsFinalizing())
return;
1067 return (PyObject*)retObj;
1076 if (PyErr_Occurred()) {
1084 #define __doc "AtomObjNew"
1087 return Py_NewRef((
OT_OBJ_T) selfO);
struct MkErrorC_Obj MkErrorC_Obj
#define MkObjectC_MK_NULL
#define MK_PY_EXTERN_DATA
struct MkBufferListC_Obj MkBufferListC_Obj
struct MkLogFileC_Obj MkLogFileC_Obj
struct MkBufferStreamC_Obj MkBufferStreamC_Obj
#define MkLogFileC_MK_NULL
MkObjectC_Obj * OT_LNG_OBJ_T
#define STR2VAL(ptr, len)
struct MkRuntimeC_Obj MkRuntimeC_Obj
#define MkBufferListC_MK_NULL
#define MkRuntimeC_MK_NULL
static PyObject * PyC2O(MK_STRN v)
#define MK_PY_EXTERN
static library
struct MkBufferC_Obj MkBufferC_Obj
#define OT_CLASS_TYPE_REF
#define MkBufferC_MK_NULL
#define MkBufferStreamC_MK_NULL
static PyObject * OT_PyObjectOrNone(MK_MNG mng)
#define OT_REF_DECR_AND_NULL(_obj)
#define MkBufferListC_ARGS
#define MkErrorC_Check(mng, PROC)
struct MkObjectC_Obj MkObjectC_Obj
OT_ProcRet NS MkBufferC_ToObject(MkBufferC_ARGS)
OT_ProcRet MK MkBufferListC_ToList(MkBufferListC_ARGS)
#define MkBufferC_X2obj(x)
#define MkBufferListC_X2obj(x)
#define MkBufferStreamC_X2obj(x)
#define MkErrorC_X2obj(x)
#define MkLogFileC_X2obj(x)
struct MkObjectS * MK_OBJ
#define MkObjectC_X2obj(x)
static bool MkObjCheck(MK_MNGN mng)
static MK_OBJ MkObj(MK_MNG mng)
#define MkRefDecrWithUnlinkSelf(...)
#define MkRefDecrWithoutSelf(...)
static void MkSelfSet(MK_OBJ const obj, MK_PTR const self, MK_PTR const env)
static void MkRefIncr(MK_OBJ obj)
#define MkSysFree(pointer)
#define MkRuntimeC_X2obj(x)
PyObject * MkBufferC_MK_NULL
PyObject * MkBufferStreamC_MK_NULL
PyObject * MkLogFileC_MK_NULL
PyTypeObject * MkTimeoutE
PyObject * MkObjectC_MK_NULL
PyObject * MkBufferListC_MK_NULL
PyObject * MkErrorC_MK_NULL
PyObject * MkRuntimeC_MK_NULL