12#include "mk_check_tcl.h"
24 if ((*skipP) >= objc) {
28 Tcl_ResetResult(interp);
33 check_LNG (Tcl_ListObjGetElements(interp, argO, &myobjc, &myobjv))
goto tcl_error;
38 if (myobjc == 0)
goto null;
39 if (Tcl_GetObjectFromObj (interp, myobjv[0])) {
40 if (myobjc > 1 && OT_LNG_NULL_IS(myobjv[1]))
goto null;
42 Tcl_ResetResult(interp);
43 if (OT_LNG_NULL_IS(myobjv[0]))
goto null;
75#define mycheck_LNG(val) \
77 OT_ERROR_LNG_2_META(hdl); \
81#define mycheck_NULL(var) \
83 OT_ERROR_LNG_2_META(hdl); \
87#define mycheck_NULL_2(var,str) \
89 MkErrorSetC_2M(hdl,str); \
93#define myListObjIndex(itp,lst,idx) ({ \
95 mycheck_LNG(Tcl_ListObjIndex(itp,lst,idx,&_ret)); \
96 mycheck_NULL_2(_ret,"LIST-IDX-LOOKUP-ERROR at " #lst "' index '" #idx "'"); \
100#define myListObjPop(itp,lst) ({ \
101 OT_OBJ_T _ret = myListObjIndex(itp,lst,0); \
102 Tcl_IncrRefCount(_ret); \
103 mycheck_LNG(Tcl_ListObjReplace(itp,lst,0,1,0,NULL)); \
107#define myListObjLength(itp,lst) ({ \
109 mycheck_LNG(Tcl_ListObjLength(itp, lst, &_len)); \
113#define myGetBooleanFromObj(itp,lngO) ({ \
115 mycheck_LNG(Tcl_GetBooleanFromObj(itp,lngO,&_retB)); \
119#define myEvalObjvAR(frm,itp,opt,objc,objv) ({ \
120 OT_OBJ_T _ret = MK(EvalObjvAR)(MK_RT_CALL frm, itp, opt, objc, objv); \
121 mycheck_NULL(_ret); \
125#define myGetObjectFromObj(itp,_mng,slf) ({ \
126 OT_SELF_T _ret = Tcl_GetObjectFromObj(itp,slf); \
128 MkErrorSetC_2M(_mng,Tcl_GetStringResult (itp)); \
134#define myWrongTypeOfStaticArgError(exp,cls,got) \
135 MkErrorVD("WrongTypeOfStaticArgError", "expect type '%s' for class '%s', but got '%s'", exp, cls, got ); \
187 for (
int i=0; i<objc; i++) {
211 Tcl_IncrRefCount(myCmdO);
213 Tcl_IncrRefCount(mthO);
234 #define dbgMsg(fmt,...) printV(fmt,__VA_ARGS__)
235 #define dbgObj(obj) printLngObj(obj)
237 #define dbgMsg(fmt,...)
254 if (call->
nsPtr == NULL) {
259 Namespace * savedNsPtr = NULL;
260 Tcl_Command procCmd = NULL;
261 Interp *iPtr = (Interp *)
interp;
268 savedNsPtr = iPtr->varFramePtr->nsPtr;
269 iPtr->varFramePtr->nsPtr = (Namespace *) call->
nsPtr;
274 procCmd = Tcl_GetCommandFromObj (
interp,arg0);
276dbgMsg(
"procCmd<%p>", procCmd)
278 if (procCmd != NULL) {
290 OT_CLS_T cls0 = Tcl_GetObjectAsClass(obj0);
293dbgMsg(
"%s",
"class method")
297dbgMsg(
"%s",
"instance method")
307 Tcl_IncrRefCount(myCmdO);
309 Tcl_IncrRefCount(arg1);
318 Tcl_IncrRefCount(arg0);
323dbgMsg(
"%s",
"NON proc instance method")
328 Tcl_IncrRefCount(arg0);
335 MkErrorSetV_2M(
hdl,
"expect max '%d' additional arguments to callback but got '%d' "
338 }
else if (tstOLen > 0) {
340 Tcl_IncrRefCount(tstO);
351 if (savedNsPtr) iPtr->varFramePtr->nsPtr = savedNsPtr;
356 if (savedNsPtr) iPtr->varFramePtr->nsPtr = savedNsPtr;
390 struct MkCallS *call = __data__;
399 switch (call->
type) {
407 objv[objc++] = call->
my;
425 if (call->
mth) objv[objc++] = call->
mth;
428 switch (call->
type) {
432 objv[objc++] =
STR2VAL(typeName,-1);
433 objv[objc++] =
HDL2VAL(typeHdl);
434 objv[objc++] =
HDL2VAL(objHdl);
445 if (call->
args)
MK(ProcResolveAppendArgs)(call,&objc,objv);
449 int ret =
MK(EvalObjv) (
interp, objc, objv, TCL_EVAL_GLOBAL);
467 if (
MK_RT_REF.mkThreadData.ptr == NULL || Tcl_InterpDeleted(
MK_RT_REF.mkThreadData.ptr))
return;
#define OT_VARFRAME_DELETE
#define RL_NewS(num, str)
#define STR2VAL(ptr, len)
#define OT_ERROR_LNG_2_META(m)
#define MkProcResolve_maxArgsLen
#define OT_REF_DECR_AND_NULL(_obj)
#define OT_REF_INCR(_obj)
#define OT_VARFRAME_CREATE
#define myWrongTypeOfStaticArgError(exp, cls, got)
#define myEvalObjvAR(frm, itp, opt, objc, objv)
#define myGetObjectFromObj(itp, _mng, slf)
#define myListObjLength(itp, lst)
#define myListObjPop(itp, lst)
#define MkErrorGetCode_0E()
#define MkErrorStack_1M(err)
#define MkErrorStack_0E()
#define MkErrorSetC_1E(message)
#define MkErrorSetV_2M(err, printfmt,...)
MkErrorE
collection for the different error-codes …
@ MK_ERROR
(persistent) raise an error-event, the calling-fucntion is interrupted.
@ MK_OK
(persistent) everything is OK.
MK_PTRB * MK_MNG
managed object pointer, datatype will be checked at runtime
MK_PTRB * MK_CBP
generic pointer to call-back data
static bool MkSelfExists(MK_OBJN obj)
Check if the MkObjectS::self exists …
MK_PTR MkSysCalloc(MK_OBJN fmtobj, size_t const nmemb, size_t const size)
calloc syscall with tclmkkernel error plugin
#define MkObjectDeleteCallF_CHECK
validate call to MkObjectDeleteCallF
#define MkObjectDeleteCallF_ARGS
the MkObjectDeleteCallF arguments with default names
#define MkObjectDeleteFreeF_ARGS
the MkObjectDeleteFreeF arguments with default names
#define WrongNumArgs(...)
MK_EXTERN enum MkErrorE MK_DECL MK CheckCallable(OT_Check_ARGS, MK_CBP *)