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