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_ObjAs_lng.h
Go to the documentation of this file.
1
13/* LABEL-NO */
14
15#ifdef HEADER
16
17#define OT_CHECK_BIN(val,len) OT_CHECK_BNP(val,len)
18#define OT_CHECK_BOL(val) OT_CHECK_NB1(val)
19#define OT_CHECK_I8(val) OT_CHECK_NI1(val)
20#define OT_CHECK_I16(val) OT_CHECK_NI2(val)
21#define OT_CHECK_I32(val) OT_CHECK_NI4(val)
22#define OT_CHECK_I64(val) OT_CHECK_NI8(val)
23#define OT_CHECK_FLT(val) OT_CHECK_NF4(val)
24#define OT_CHECK_DBL(val) OT_CHECK_NF8(val)
25//#define OT_CHECK_BUF(val) OT_CHECK_BUF(val)
26#define OT_CHECK_L(val) OT_CHECK_BFL(val)
27#define OT_CHECK_STR(val) OT_CHECK_STRN(val)
28#define OT_CHECK_HDL(val) MK_HDL_REF_S3(OT_CHECK_) (val)
29#define OT_CHECK_NIH(val) MK_HDL_REF_S3(OT_CHECK_) (val)
30
31// --------------------------------------------------------------------------
32
34
35#define WrongNumArgs(...) MK(WrongNumArgs)(MK_RT_CALL __VA_ARGS__)
36
37#define OT_ERROR_STACK MkErrorStack_4M(hdl,__func__,__FILE__,__LINE__)
38
40#define LngObj_AsF MK(LngObj_AsFLT)
42#define LngObj_AsD MK(LngObj_AsDBL)
44#define LngObj_AsO MK(LngObj_AsBOL)
47#define LngObj_AsY MK(LngObj_AsI8)
49#define LngObj_AsS MK(LngObj_AsI16)
50//MK_EXTERN enum MkErrorE MK_DECL MK(LngObj_AsU16) (OT_Prefix_ARGS MK_MNG,OT_OBJ_T,MK_U16*);
52#define LngObj_AsI MK(LngObj_AsI32)
53//MK_EXTERN enum MkErrorE MK_DECL MK(LngObj_AsU32) (OT_Prefix_ARGS MK_MNG,OT_OBJ_T,MK_U32*);
55#define LngObj_AsW MK(LngObj_AsI64)
56/*
57MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK(LngObj_AsLLG) (OT_Prefix_ARGS MK_MNG,OT_OBJ_T,MK_LLG*);
58#define LngObj_AsX MK(LngObj_AsLLG)
59*/
61//MK_EXTERN enum MkErrorE MK_DECL MK(LngObj_AsCSTNull) (OT_Prefix_ARGS MK_MNG,OT_OBJ_T,MK_STRN*);
63
64#ifndef SKIP_TYPE_S
71//MK_EXTERN enum MkErrorE MK_DECL MK(Obj_AsU16) (OT_Check_ARGS,MK_U16*);
73//MK_EXTERN enum MkErrorE MK_DECL MK(Obj_AsU32) (OT_Check_ARGS,MK_U32*);
75//MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK(Obj_AsLLG) (OT_Check_ARGS,MK_LLG*);
77//MK_EXTERN enum MkErrorE MK_DECL MK(Obj_AsCSTNull) (OT_Check_ARGS,MK_STRN*);
79#endif
80
81#else // !HEADER
82
83/*****************************************************************************/
84
85#ifndef SKIP_TYPE_S
86
89 MK_MNG hdl,
90 MK_SIZE skip,
91 MK_SIZE objc,
92 MK_SIZE min,
93 MK_SIZE max,
94 MK_STRN arg
95) {
96 MkBufferCreateTLS_T(MkBuffer1024C,buf,100);
97
98//printV("skip=%zi, objc=%zi, min=%zi, max=%zi, arg=%s\n", skip,objc,min,max,arg);
99
100 if (arg && *arg != '\0') {
101 MkBufferSetV(buf, "missing '%s'", arg);
102 } else if ((objc-skip) < min) {
103 MkBufferSetV(buf, "expect min '%li' argument(s)", min);
104 } else if ((objc-skip) > max) {
105 MkBufferSetV(buf, "expect max '%li' argument(s)", max);
106 } else if (skip > objc) {
107 MkBufferSetV(buf, "got '%li' additional argument(s)", skip-objc);
108 } else if (skip <= objc) {
109 MkBufferSetV(buf, "internal error → "
110 "skip=%li, objc=%li, min=%li, max=%li, arg=%s", skip, objc, min, max, arg);
111 }
112 return MkErrorVD("WrongNumerOfArgsError", "%s", buf->storage.first.C);
113}
114
115#endif
116
117/*****************************************************************************/
118
119/* example from TCL
120
121WHAT = BOOL,LONG,DOUBLE,WIDE
122TYP = BOL,I8,I16,I32,I64,FLT,DBL extra BOOL,LONG
123
124#define LNG_BOOL int
125#define LNG_LONG long
126#define LNG_DOUBLE double
127#define LNG_WIDE Tcl_WideInt
128
129#define FUNC_LONG(o) Tcl_GetLongFromObj(interp,o, &tmp)
130#define FUNC_DOUBLE(o) Tcl_GetDoubleFromObj(interp,o, &tmp)
131#define FUNC_BOOL(o) Tcl_GetBooleanFromObj(interp,o, &tmp)
132#define FUNC_WIDE(o) Tcl_GetWideIntFromObj(interp,o, &tmp)
133
134#define CHECK_LONG(o) (o->typePtr && o->typePtr==tcl_LONG)
135#define CHECK_DOUBLE(o) (o->typePtr && o->typePtr==tcl_DOUBLE)
136#define CHECK_BOOL(o) (o->typePtr && o->typePtr==tcl_BOOLEAN)
137#define CHECK_WIDE(o) (o->typePtr && o->typePtr==tcl_WIDE)
138#define CHECK_STRING(o) (o->bytes)
139
140#define OVERFLOW_I8 Overflow_Error(MkType_I8,MkMin_I8,MkMax_I8)
141#define OVERFLOW_I16 Overflow_Error(MkType_I16,MkMin_I16,MkMax_I16)
142#define OVERFLOW_I32 Overflow_Error(MkType_I32,MkMin_I32,MkMax_I32)
143#define OVERFLOW_I64
144#define OVERFLOW_FLT
145#define OVERFLOW_DBL
146#define OVERFLOW_BOL
147#define OVERFLOW_BOOL
148#define OVERFLOW_LONG
149
150#include "tmpl/misc_ObjAs_lng.h"
151
152*/
153
154#ifndef OT_LNG_STRING_INIT
155 #define OT_LNG_STRING_INIT(o)
156#endif
157
158#define Overflow_Error(type,min,max) Overflow_Error_Full(hdl,tmp,OT_LNG_STRING(obj),type,min,max)
159
160#define Type_Error(type) \
161 MkErrorVD("TypeError", \
162 "expect '%s' argument but got '%s' of type '%s'", \
163 type, OT_LNG_STRING(obj), OT_OBJ_TYPE_STRING(obj) \
164 ); \
165 goto error;
166
167#define ARG3(WHAT,TYP) \
168 if (CHECK_##WHAT(obj)) { \
169 LNG_##WHAT tmp; \
170 check_LNG(FUNC_##WHAT(obj)) return MK_ERROR; \
171 OVERFLOW_##TYP; \
172 *retP = (MK_##TYP) tmp; \
173 } else if (CHECK_STRING(obj)) { \
174 OT_LNG_STRING_INIT(obj); \
175 MkErrorCheck(MkString2##TYP##_RT(MK_RT_CALL OT_LNG_STRING_BYTES(obj),OT_LNG_STRING_LENGTH(obj),retP)); \
176 } else { \
177 Type_Error(MkType_##TYP); \
178 } \
179 return MK_OK; \
180error: \
181 return OT_ERROR_STACK;
182
183enum MkErrorE MK(LngObj_AsI8) (OT_Prefix_ARGS MK_MNG hdl, OT_OBJ_T obj, MK_I8 *retP) {
184 ARG3(LONG,I8)
185}
186
188 ARG3(LONG,I16)
189}
190
191/*
192enum MkErrorE MK(LngObj_AsU16) (OT_Prefix_ARGS MK_MNG hdl, OT_OBJ_T obj, MK_U16 *retP) {
193 ARG3(LONG,U16)
194}
195#define LngObj_AsUS MK(LngObj_AsU16)
196*/
197
199 ARG3(LONG,I32)
200}
201
202/*
203enum MkErrorE MK(LngObj_AsU32) (OT_Prefix_ARGS MK_MNG hdl, OT_OBJ_T obj, MK_U32 *retP) {
204 ARG3(LONG,U32)
205}
206#define LngObj_AsUI MK(LngObj_AsU32)
207*/
209 ARG3(LONG,LONG)
210}
211
213 ARG3(WIDE,I64)
214}
215
216/*
217enum MkErrorE MK(LngObj_AsLLG) (OT_Prefix_ARGS MK_MNG hdl, OT_OBJ_T obj, MK_LLG *retP) {
218 ARG3(WIDE,LLG)
219}
220*/
221
223 ARG3(DOUBLE,FLT)
224}
225
227 ARG3(DOUBLE,DBL)
228}
229
231 ARG3(BOOL,BOL)
232}
233
235 ARG3(BOOL,BOOL)
236}
237
238/*****************************************************************************/
239
240#ifndef SKIP_TYPE_S
241
242#define ARG2(WHAT,TYP) \
243 if ((*skipP) >= objc) { \
244 return WrongNumArgs(hdl, (*skipP), objc, -999, +999, arg); \
245 } \
246 OT_OBJ_T obj = OT_LNG_OBJV((*skipP)++); \
247 return MK(LngObj_As##TYP)(OT_Prefix_CALL hdl,obj,retP); \
248
249enum MkErrorE MK(Obj_AsI8) (OT_Check_ARGS, MK_I8 *retP) {
250 ARG2(LONG,I8)
251}
253 ARG2(LONG,I16)
254}
255/*
256enum MkErrorE MK(Obj_AsU16) (OT_Check_ARGS, MK_U16 *retP) {
257 ARG2(LONG,U16)
258}
259*/
261 ARG2(LONG,I32)
262}
263/*
264enum MkErrorE MK(Obj_AsU32) (OT_Check_ARGS, MK_U32 *retP) {
265 ARG2(LONG,U32)
266}
267*/
269 ARG2(LONG,LONG)
270}
272 ARG2(WIDE,I64)
273}
274/*
275enum MkErrorE MK(Obj_AsLLG) (OT_Check_ARGS, MK_LLG *retP) {
276 ARG2(WIDE,LLG)
277}
278*/
280 ARG2(DOUBLE,FLT)
281}
283 ARG2(DOUBLE,DBL)
284}
286 ARG2(BOOL,BOL)
287}
289 ARG2(BOOL,BOOL)
290}
291
292#endif
293
294/*****************************************************************************/
295
296#endif // HEADER
#define MK(n)
#define OT_Check_ARGS
#define OT_OBJ_T
#define OT_Prefix_ARGS
#define MkBufferSetV(...)
#define MkBufferCreateTLS_T(cls, name, size)
#define MK_DECL
#define MK_EXTERN
#define MK_ATTR_HOT
MkErrorE
float MK_FLT
const MK_STRB * MK_STRN
MK_PTRB * MK_MNG
signed char MK_I8
signed long long MK_I64
bool MK_BOOL
unsigned char MK_BOL
long MK_SIZE
long MK_LONG
signed short int MK_I16
double MK_DBL
signed int MK_I32
#define MK_RT_ARGS
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsI32(OT_Check_ARGS, MK_I32 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsI8(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_I8 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsBOL(OT_Check_ARGS, MK_BOL *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsFLT(OT_Check_ARGS, MK_FLT *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsFLT(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_FLT *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsI64(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_I64 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsBOOL(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, bool *)
#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 Obj_AsI16(OT_Check_ARGS, MK_I16 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsDBL(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_DBL *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsSTRN(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_STRN *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsI64(OT_Check_ARGS, MK_I64 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsBOL(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_BOL *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsDBL(OT_Check_ARGS, MK_DBL *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsBOOL(OT_Check_ARGS, bool *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsI16(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_I16 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsI8(OT_Check_ARGS, MK_I8 *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsLONG(OT_Check_ARGS, long *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsSTRN(OT_Check_ARGS, MK_STRN *)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK LngObj_AsI32(OT_Prefix_ARGS MK_MNG, OT_OBJ_T, MK_I32 *)
#define MkErrorVD(errcls, format,...)