theSq3Lite 10.0
Loading...
Searching...
No Matches
mk_misc_check_lng.h
Go to the documentation of this file.
1
9/* LABEL-NO */
10
11/* variables defined - example from PYTHON
12
13#define OT_LNG_NULL_IS(obj) (obj == Py_None)
14
15#define OT_LNG_OBJ_CLASS_IS(obj,cls) PyObject_TypeCheck(obj,cls)
16#define OT_OBJ_TO_CLASS(str) NS(str)
17
18#define OT_LNG_OBJ_ENUM_IS(obj,enm) PyObject_TypeCheck(obj,enm)
19#define OT_LNG_ENUM_NAME(enm) OT_LNG_NAME_FROM_CLASS(enm)
20#define OT_ENUM_TO_I32(io,o,e) io=o
21
22#define OT_LNG_ARRAY_IS(obj) PyObject_TypeCheck(obj,&PyList_Type)
23
24#define OT_LNG_STRN_PRE(str,obj) PyObject *__##str=NULL; \
25 MkErrorCheck(PyObj_AsUTF8(obj,&__##str)); \
26 MK_STRN str=PyBytes_AsString(__##str)
27
28#define OT_LNG_STRN_POST(str,obj) Py_CLEAR(__##str)
29
30#define OT_LNG_LONG_IS(obj) (CHECK_LONG(obj) || CHECK_STRING(obj)) // from "high"
31#define OT_LNG_I32_IS(obj) (CHECK_LONG(obj) || CHECK_STRING(obj)) // from "high"
32
33#include "tmpl/misc_check_lng.h"
34
35*/
36
37#if defined HEADER
38
39// OLD: OT_CHECK_OBJ
40#define OT_CHECK_LNG_T(val) \
41 if (__skip >= objc) { \
42 MkErrorC_CheckD(WrongNumArgs(hdl,__skip, objc, -999, +999, #val)); \
43 } else { \
44 val = (typeof(val)) OT_LNG_OBJV(__skip++); \
45 }
46
47#define OT_CHECK_EXP(val) OT_CHECK_LNG_T(val)
48#define OT_CHECK_MXC(val) OT_CHECK_LNG_T(val)
49
50// OLD: OtCheckObject
52#define OT_CHECK_MK_OBJECT_C(val,nullB) \
53 MkErrorC_CheckD(MK(Check_MkObjectC) (OT_Check_CALL(#val), (MK_PTR*)&val, nullB));
54
55#define OT_CHECK_OBJ(val,nullB) OT_CHECK_MK_OBJECT_C(val,nullB)
56#define OT_CHECK_OBJN(val,nullB) OT_CHECK_MK_OBJECT_C(val,nullB)
57#define OT_CHECK_MNG(val) OT_CHECK_MK_OBJECT_C(val,0)
58#define OT_CHECK_ERC(val,nullB) OT_CHECK_MK_OBJECT_C(val,nullB)
59
61#define OT_CHECK_CLASS(val,classType,type,nullB) \
62 MkErrorC_CheckD(MK(CheckClass) (classType, type, OT_Check_CALL(#val), (MK_PTR*)&val, nullB));
63
64#define OT_CHECK_BUF(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkBufferC_lngO), MkBufferC_TT, nullB)
65#define OT_CHECK_BUS(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkBufferStreamC_lngO), MkBufferStreamC_TT, nullB)
66#define OT_CHECK_ERR(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkErrorC_lngO), MkErrorC_TT, nullB)
67#define OT_CHECK_LFL(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkLogFileC_lngO), MkLogFileC_TT, nullB)
68#define OT_CHECK_RT(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkRuntimeC_lngO), MkRuntimeC_TT, nullB)
69
70#define OT_CHECK_BUFN(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkBufferC_lngO), MkBufferC_TT, nullB)
71#define OT_CHECK_BUSN(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkBufferStreamC_lngO), MkBufferStreamC_TT, nullB)
72#define OT_CHECK_ERRN(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkErrorC_lngO), MkErrorC_TT, nullB)
73#define OT_CHECK_LFLN(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkLogFileC_lngO), MkLogFileC_TT, nullB)
74#define OT_CHECK_RTN(val,nullB) OT_CHECK_CLASS(val, OT_OBJ_TO_CLASS(MkRuntimeC_lngO), MkRuntimeC_TT, nullB)
75
77#define OT_CHECK_BAC(val) \
78 MkErrorC_CheckD(MK(CheckBAC(OT_Check_CALL(#val),&val,true)));
79
81#define OT_CHECK_BFL(val,nullB) \
82 MkErrorC_CheckD(MK(CheckBLC) (OT_Check_CALL(#val), &val, nullB));
83#define OT_CHECK_BFLN(val,nullB) \
84 MkErrorC_CheckD(MK(CheckBLC) (OT_Check_CALL(#val), &val, nullB));
85
86#if !defined(NO_OtCheckEnum)
88 #define OT_CHECK_ENUM(ename,val) { \
89 MK_I32 i; \
90 MkErrorC_CheckD(MK(CheckEnum)(OT_OBJ_TO_ENUM(ename),OT_Check_CALL(#val),&i)); \
91 MkErrorC_CheckD(ename##_FromInt(i,&val)); \
92 };
93#endif
94
95#if !defined(NO_OtCheckEnumFlag)
97 #define OT_CHECK_ENUM_FLAG(ename,val) { \
98 MK_I32 i; \
99 MkErrorC_CheckD(MK(CheckEnumFlag)(OT_OBJ_TO_ENUM(ename),OT_Check_CALL(#val),&i)); \
100 val = (enum ename) i; \
101 };
102#endif
103
104#if !defined(NO_OtCheckTimeT)
106 #define OT_CHECK_TIME_T(val) \
107 MkErrorC_CheckD(MK(CheckTimeT)(OT_Check_CALL(#val),&val));
108#endif
109
110#if !defined(NO_OtCheckCallable)
112 #define OT_SETUP_CALLABLE(val) MK_CBP val = 0;
113 #define OT_SETUP_CALLABLE_ONCE(val) struct MkCallS val ## _ref = {0}; MK_CBP val = &val ## _ref;
114 #define OT_CLEANUP_CALLABLE(val)
115 // why? #define OT_CLEANUP_CALLABLE_ONCE(val) do {MK_CBP val##_tmp=&val##_ref;MkCallFreeOnce(val##_tmp);} while (0);
116 #define OT_CLEANUP_CALLABLE_ONCE(val) MkCallFreeOnce(val);
117 #define OT_CHECK_CALLABLE(val) MkErrorC_CheckD(MK(CheckCallable)(OT_Check_CALL(#val), &val));
118 #define MkCallFree(cb) if (cb) MK(CallFree)(&(cb))
119 #define MkCallFreeOnce(cb) if (cb) MK(CallFreeOnce)(&(cb))
120#endif
121
122#define NullNotAllowd(_cls) do { \
123 MkErrorVD("NullNotAllowedError", "'%s' hdl is NULL", OT_LNG_NAME_FROM_CLASS(_cls) ); \
124 goto error; \
125 } while (0)
126
127#define WrongTypeOfArgError(exp,got) do { \
128 MkErrorVD("WrongTypeOfArgError", "for argument '%s'...expect type '%s'...but got '%s'", arg, exp, got ); \
129 goto error; \
130 } while (0)
131
132#define WrongCallableError(got) do { \
133 MkErrorVD("WrongTypeOfArgError", "for argument '%s'...expect type 'Callable'...but got '%s'", arg, got ); \
134 goto error; \
135 } while (0)
136
137#define SignaturError(str) do { \
138 MkErrorVD("SignaturError", "%s", str); \
139 goto error; \
140 } while (0)
141
142#define InternalError(str) do { \
143 MkErrorVD("InternalError", "%s", str); \
144 goto error; \
145 } while (0)
146
155
156#if !defined(NO_TestObject)
157bool MK(TestObject) ( OT_Prefix_ARGS OT_OBJ_T lngO, OT_CLS_T typeO, MK_OBJ* objP, MkTestClassE* flagP );
158#define OT_LNG_OBJ_CLASS_IS_4(val,cls,objP,flagP) MK(TestObject)( OT_Prefix_CALL val,cls,objP,flagP)
159#define OT_LNG_OBJECT_IS_3(objV,obj,flag) MK(TestObject)( OT_Prefix_CALL objV,MkObjectC_lngO,obj,flag)
160#endif
161
167
168#else // !HEADER
169
172 MK_PTR *retP,
173 bool nullB
174) {
175 if ((*skipP) >= objc) {
176 WrongNumArgs(hdl,(*skipP), objc, -999, +999, arg);
177 goto error;
178 }
179 OT_OBJ_T objV = OT_LNG_OBJV((*skipP)++);
180 MK_OBJ obj = NULL;
181 MkTestClassE flag;
182
183 if (OT_LNG_OBJECT_IS_3(objV,&obj,&flag)) {
184 switch (flag) {
185 case MkTestClassE_OK : *retP = (MK_PTR) obj; break;
186 case MkTestClassE_NULL :
187 if (nullB) {
188 *retP = NULL;
189 } else {
191 }
192 break;
194 SignaturError("MkObjectC") ;
199 InternalError("OT_LNG_OBJECT_IS_3") ;
200 }
201 } else {
203 }
204 return MK_OK;
205error:
206 return OT_ERROR_STACK;
207}
208
209enum MkErrorE MK(CheckClass) (
210 OT_CLS_T classType,
211 MK_TYP type,
213 MK_PTR *retP,
214 bool nullB
215) {
216 if ((*skipP) >= objc) {
217 WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg);
218 goto error;
219 }
220 OT_OBJ_T objV = OT_LNG_OBJV((*skipP)++);
221 MK_OBJ obj = NULL;
222 MkTestClassE flag;
223
224 if (OT_LNG_OBJ_CLASS_IS_4(objV,classType,&obj,&flag)) {
225 switch (flag) {
226 case MkTestClassE_OK : *retP = (MK_PTR) obj; break;
227 case MkTestClassE_NULL :
228 if (nullB) {
229 *retP = NULL;
230 } else {
231 NullNotAllowd(classType);
232 }
233 break;
240 InternalError("OT_LNG_OBJECT_IS_3") ;
241 }
242 } else {
243 WrongTypeOfArgError(OT_LNG_NAME_FROM_CLASS(classType), OT_OBJ_TYPE_STRING(objV));
244 }
245 return MK_OK;
246error:
247 return OT_ERROR_STACK;
248}
249
250enum MkErrorE MK(CheckBAC) (
252 MK_BFL *retP,
253 bool nullB
254) {
255 OT_LNG_SKIP_TYPE skip = *skipP;
256
257//printV("skip=%d, objc=%d\n", skip, objc)
258 MK_BFL orig = *retP;
259 MK_BFL retVal = *retP;
260 *retP = NULL;
261 MkTestClassE flag;
262 MK_OBJ obj;
263
264 if (skip > objc) {
265 WrongNumArgs(hdl, skip, objc, -999, +999, arg);
266 goto error;
267 }
268
269 if ((objc-skip) == 0) {
270 if (retVal == NULL) retVal = MkBufferListCreate(1);
271 } else if ((objc-skip) == 1) {
272 OT_OBJ_T argsO = OT_LNG_OBJV((*skipP)++);
273 if (OT_LNG_OBJ_CLASS_IS_4(argsO, OT_OBJ_TO_CLASS(MkBufferListC_lngO), &obj, &flag)) {
274 switch (flag) {
275 case MkTestClassE_OK :
276 retVal = MkBfl(obj);
277 if (retVal == NULL) SignaturError("MkBufferListC") ;
278 break;
280 if (OT_LNG_ARRAY_IS(argsO)) {
281 MkErrorCheck(MK(LngListToMkBufferListS) (OT_Prefix_CALL argsO, &retVal));
282 } else {
283 WrongTypeOfArgError("[array] or args... or MkBufferListC", OT_LNG_OBJ_CLASSNAME(argsO));
284 }
285 break;
286 case MkTestClassE_NULL :
287 if (nullB) {
288 retVal = NULL;
289 } else {
291 }
292 break;
294 SignaturError("MkBufferListC") ;
297 InternalError("OT_LNG_OBJECT_IS_3") ;
298 }
299 } else if (OT_LNG_ARRAY_IS(argsO)) {
300 MkErrorCheck(MK(LngListToMkBufferListS) (OT_Prefix_CALL argsO, &retVal));
301 } else {
302 if (retVal == NULL) retVal = MkBufferListCreate(1);
303 OT_LNG_STRN_PRE(cst,argsO);
304 MkBufferListAppendSTR(retVal,cst);
305 OT_LNG_STRN_POST(cst,argsO);
306 }
307 } else {
308 MK(LngTupleToMkBufferListS) (SETUP_ARGS_CALL, skipP, &retVal);
309 }
310 *retP = retVal;
311 return MK_OK; /* ignore PRE existing ERROR */
312error:
313 if (retVal && retVal != orig) MkBufferListDelete (retVal);
314 *retP = orig;
315 return OT_ERROR_STACK;
316}
317
318enum MkErrorE MK(CheckBLC) (
320 MK_BFL *retP,
321 bool nullB
322) {
323 if ((*skipP) >= objc) {
324 WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg);
325 goto error;
326 }
327 MkTestClassE flag;
328 MK_OBJ obj;
329 OT_OBJ_T objV = OT_LNG_OBJV((*skipP)++);
331 switch (flag) {
332 case MkTestClassE_OK :
333 MK_BFL bfl = MkBfl(obj);
334 if (bfl == NULL) SignaturError("MkBufferListC");
335 *retP = bfl;
336 break;
337 case MkTestClassE_NULL :
338 if (nullB) {
339 *retP = NULL;
340 } else {
342 }
343 break;
345 SignaturError("MkBufferListC") ;
347 WrongTypeOfArgError("[array] or MkBufferListC", OT_LNG_OBJ_CLASSNAME(objV));
350 InternalError("OT_LNG_OBJECT_IS_3") ;
351 }
352 } else if (OT_LNG_ARRAY_IS(objV)) {
353 MkErrorCheck(MK(LngListToMkBufferListS)(OT_Prefix_CALL objV,retP));
354 } else {
355 WrongTypeOfArgError("[array] or MkBufferListC", OT_OBJ_TYPE_STRING(objV));
356 }
357 return MK_OK; /* ignore PRE existing ERROR */
358error:
359 return OT_ERROR_STACK;
360}
361
362#if !defined(NO_OtCheckEnum)
363enum MkErrorE MK(CheckEnum) (
364 OT_ENUM_T enumType,
366 int *retP
367)
368{
369 if ((*skipP) >= objc) {
370 WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg);
371 goto error;
372 }
373 OT_OBJ_T objV = OT_LNG_OBJV((*skipP)++);
374 if (OT_LNG_I32_IS(objV)) {
375 MkErrorCheck(MK(LngObj_AsI32)(OT_Prefix_CALL hdl,objV,retP));
376 } else if (OT_LNG_OBJ_ENUM_IS(objV,enumType)) {
377 OT_ENUM_TO_I32(objV,enumType); /* keep error for append */
378 MkErrorCheck(MK(LngObj_AsI32)(OT_Prefix_CALL hdl,objV,retP));
379 } else {
380 WrongTypeOfArgError(OT_LNG_ENUM_NAME(enumType), OT_OBJ_TYPE_STRING(objV));
381 }
382 return MK_OK; /* ignore PRE existing ERROR */
383error:
384 return OT_ERROR_STACK;
385}
386#endif // NO_OtCheckEnum
387
388#if !defined(NO_OtCheckEnumFlag)
390 OT_ENUM_T enumType,
392 int *retP
393)
394{
395 if ((*skipP) >= objc) {
396 WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg);
397 goto error;
398 }
399 OT_OBJ_T objV = OT_LNG_OBJV((*skipP)++);
400
401 if (OT_LNG_OBJ_ENUM_IS(objV,enumType)) {
402 OT_ENUM_TO_I32(objV,enumType); /* keep error for append */
403 MkErrorCheck(MK(LngObj_AsI32)(OT_Prefix_CALL hdl,objV,retP));
404 } else {
405 WrongTypeOfArgError(OT_LNG_ENUM_NAME(enumType), OT_OBJ_TYPE_STRING(objV));
406 }
407 return MK_OK; /* ignore PRE existing ERROR */
408error:
409 return OT_ERROR_STACK;
410}
411#endif // NO_OtCheckEnumFlag
412
413#if !defined(NO_OtCheckTimeT)
414enum MkErrorE MK(CheckTimeT) (
416 MK_TIME_T *retP
417) {
418 if ((*skipP) >= objc) {
419 WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg);
420 goto error;
421 }
422 OT_OBJ_T objV = OT_LNG_OBJV((*skipP)++);
423
425 OT_ENUM_TO_I32_2(objV,MkTimeoutE); /* keep error for append */
426 MkErrorCheck(NS(LngObj_AsLONG)(OT_Prefix_CALL hdl,objV,retP));
427 } else if (OT_LNG_LONG_IS(objV)) {
428 MkErrorCheck(NS(LngObj_AsLONG)(OT_Prefix_CALL hdl,objV,retP));
429 } else if (OT_LNG_OBJECT_IS(objV)) {
430 WrongTypeOfArgError("MkTimeoutE", OT_LNG_OBJ_CLASSNAME(objV));
431 } else {
432 WrongTypeOfArgError("MkTimeoutE", OT_OBJ_TYPE_STRING(objV));
433 }
434 return MK_OK; /* ignore PRE existing ERROR */
435error:
436 return OT_ERROR_STACK;
437}
438#endif //NO_OtCheckTimeT
439
440#if !defined(NO_TestObject)
441bool MK(TestObject) (
443 OT_OBJ_T lngO,
444 OT_CLS_T typeO,
445 MK_OBJ * objP,
446 MkTestClassE * flagP
447) {
448 assert(lngO != NULL);
449 assert(typeO != NULL);
451 MK_OBJ obj = NULL;
452 if (OT_LNG_IS_NULL(lngO)) {
453 flag=MkTestClassE_NULL; goto end;
454 }
455 if (!OT_LNG_OBJ_CLASS_IS(lngO,typeO)) {
456 flag=MkTestClassE_WRONG_CLASS; goto end;
457 }
458 MK_MNG objM = VAL2MNG(lngO);
459 if (objM == NULL) { flag=MkTestClassE_NULL ; goto end; };
460 obj = MkObj(objM);
461 if (obj == NULL) { flag=MkTestClassE_INVALID_SIGNATURE ; goto end; };
462 flag = MkTestClassE_OK;
463 if (objP) *objP = obj;
464end:
465 if (flagP) *flagP = flag;
466 switch(flag) {
467 case MkTestClassE_NONE_OBJECT : return false;
468 default : return true;
469 }
470}
471#endif //NO_TestObject
472
473/*****************************************************************************/
474
475#endif
#define MK(n)
#define OT_LNG_SKIP_TYPE
#define OT_ENUM_TO_I32_2(o, str)
#define OT_LNG_LONG_IS(obj)
#define OT_LNG_OBJECT_IS(objV)
PyTypeObject * OT_ENUM_T
#define MkObjectC_lngO
#define OT_LNG_OBJ_CLASSNAME(obj)
#define OT_LNG_STRN_PRE(str, obj)
#define OT_OBJ_TO_ENUM(str)
#define OT_LNG_STRN_POST(str, obj)
#define OT_LNG_I32_IS(obj)
#define OT_OBJ_TO_CLASS(ptr)
#define MkBufferListC_lngO
#define OT_Prefix_CALL
#define OT_LNG_NAME_FROM_CLASS(cls)
PyTypeObject * OT_CLS_T
#define OT_Check_ARGS
#define VAL2MNG(val)
#define OT_ENUM_TO_I32(o, e)
#define OT_LNG_OBJ_CLASS_IS(val, cls)
PyObject * OT_OBJ_T
#define SETUP_ARGS_CALL
#define OT_LNG_IS_NULL(val)
#define OT_LNG_ENUM_NAME(enm)
#define OT_LNG_OBJV(skip)
#define OT_LNG_ARRAY_IS(obj)
#define OT_Prefix_ARGS
#define OT_LNG_OBJ_ENUM_IS(obj, enm)
#define NS(n)
#define MkBufferListAppendSTR(...)
static MK_BFL MkBfl(MK_MNG mng)
#define MkBufferListCreate(...)
#define MkBufferListDelete(x)
#define MK_DECL
#define MK_EXTERN
MkTimeoutE
MkErrorE
MK_OK
MK_PTRB * MK_PTR
MK_PTRB * MK_MNG
MK_PTRB * MK_CBP
time_t MK_TIME_T
static MK_OBJ MkObj(MK_MNG mng)
struct MkTypeS * MK_TYP
#define OT_ERROR_STACK
#define WrongNumArgs(...)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsLONG(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, long *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsI32(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_I32 *)
MK_EXTERN enum MkErrorE MK_DECL MK Check_MkObjectC(OT_Check_ARGS, MK_MNG *, bool)
MK_EXTERN enum MkErrorE MK_DECL MK CheckEnumFlag(OT_ENUM_T classType, OT_Check_ARGS, int *)
MK_EXTERN enum MkErrorE MK_DECL MK CheckClass(OT_CLS_T, MK_TYP, OT_Check_ARGS, MK_MNG *, bool)
#define NullNotAllowd(_cls)
bool MK TestObject(OT_Prefix_ARGS OT_OBJ_T lngO, OT_CLS_T typeO, MK_OBJ *objP, MkTestClassE *flagP)
#define OT_LNG_OBJ_CLASS_IS_4(val, cls, objP, flagP)
#define OT_LNG_OBJECT_IS_3(objV, obj, flag)
MK_EXTERN enum MkErrorE MK_DECL MK CheckCallable(OT_Check_ARGS, MK_CBP *)
MK_EXTERN enum MkErrorE MK_DECL MK CheckTimeT(OT_Check_ARGS, MK_TIME_T *)
#define InternalError(str)
MK_EXTERN enum MkErrorE MK_DECL MK CheckBLC(OT_Check_ARGS, MK_BFL *, bool)
#define WrongTypeOfArgError(exp, got)
#define SignaturError(str)
MK_EXTERN enum MkErrorE MK_DECL MK CheckBAC(OT_Check_ARGS, MK_BFL *, bool)
@ MkTestClassE_NONE_OBJECT
@ MkTestClassE_INTERNAL
@ MkTestClassE_OK
@ MkTestClassE_INVALID_SIGNATURE
@ MkTestClassE_NULL
@ MkTestClassE_WRONG_CLASS
MK_EXTERN enum MkErrorE MK_DECL MK CheckEnum(OT_ENUM_T classType, OT_Check_ARGS, int *)