theSq3Lite 10.0
Loading...
Searching...
No Matches
Sq3Call_tcl.c
Go to the documentation of this file.
1
9/* LABEL-NO */
10
11#include "LibSq3Lite_tcl.h"
12
13// CheckCallable
14// CallFree
15
16/*
17[LiteExecCall signature]
18 callback-args := vals:List[in] cols:List[in]
19 [static] proc callback { callback-args ?additional-args...? } ...
20 [instance] ::oo::class create YYY {
21 method callback { callback-args ?additional-args...? } ...
22 [class] ::oo::class create ZZZ {
23 self method callback { callback-args ?additional-args...? } ...
24[LiteExecCall signature]
25*/
26
27// #define Sq3Fupu_Sq3LiteExec_callback_call_args MK_CBP callback, MK_I32 num, MK_STR *vals, MK_STR *cols
29{
31
32 // 1. setup environment
33 struct MkCallS * call = callV1 ;
34 SQ3_LITE lite = Sq3Lite(call->hdl);
35 OT_OBJ_T valsO=NULL;
36 OT_OBJ_T colsO=NULL;
37 OT_ENV_T interp = call->interp;
38 if (call->interp==NULL || Tcl_InterpDeleted(interp) || lite == NULL || OT_SELF_X(lite)==NULL) return 1;
39 MkRtSetup_RT(call->mkrt);
40
41 // 2. setup arguments
42 Tcl_Obj *objv[5+MkProcResolve_maxArgsLen] = {0};
43 int objc = 0;
44#if 0
45 MkBufferListCreateTLS_T(valsL,num);
46 MkBufferListAppendVC(valsL,num,(MK_STRN*)vals);
47 Tcl_Obj* valsO = MK(MkBufferListC_ObjNew)(MK_RT_CALL interp, valsL);
48 MkBufferListCreateTLS_T(colsL,num);
49 MkBufferListAppendVC(colsL,num,(MK_STRN*)cols);
50 Tcl_Obj* colsO = MK(MkBufferListC_ObjNew)(MK_RT_CALL interp, colsL);
51
52#else
53 valsO = Tcl_NewObj();
54 for (int i=0; i<num; i++) {
55 check_LNG(Tcl_ListObjAppendElement(interp,valsO,Tcl_NewStringObj(vals[i],-1))) goto error_lng;
56 }
57 colsO = Tcl_NewObj();
58 for (int i=0; i<num; i++) {
59 check_LNG(Tcl_ListObjAppendElement(interp,colsO,Tcl_NewStringObj(cols[i],-1))) goto error_lng;
60 }
61#endif
62
63 // 3. setup my
64rescan:
65 switch (call->type) {
66 case MkCallS_own_method: {
67 // this is a instance->method
68 objv[objc++] = OT_SELF_NAME_O(MkOBJ(lite));
69 break;
70 }
72 case MkCallS_static:
73 objv[objc++] = call->my;
74 break;
75 case MkCallS_proc:
76 break;
77 case MkCallS_init: {
78 check_META(MK(ProcResolve)(MK_RT_CALL call->interp, MkOBJ(lite), call)) goto error_mq;
79 goto rescan;
80 }
81 case MkCallS_error:
82 goto error_lng;
83 case MkCallS_null:
84 goto end;
85 }
86
87 // 4. setup methode
88 if (call->mth) objv[objc++] = call->mth;
89
90 if (call->args) MK(ProcResolveAppendArgs)(call,&objc,objv);
91
92 objv[objc++] = valsO;
93 objv[objc++] = colsO;
94
95//M1; printAryDetail(objc,objv);
96 // 3. call the callback
97 check_LNG (MK(EvalObjv) (interp, objc, objv, TCL_EVAL_GLOBAL)) goto error_lng;
98 //check_LNG (Tcl_EvalObjv (interp, objc, objv, TCL_EVAL_GLOBAL)) goto error_lng;
99//M2; printAryDetail(objc,objv);
100
101end:
102 Tcl_ResetResult(interp);
103 return 0;
104error_lng:
106error_mq:
108 return 1;
109}
110
111// *********************************************************************************
112
113/*
114[LiteExecV2Call signature]
115 callback-args := vals:MkBufferList[in] cols:MkBufferList[in]
116 [static] proc callback { callback-args ?additional-args...? } ...
117 [instance] ::oo::class create YYY {
118 method callback { callback-args ?additional-args...? } ...
119 [class] ::oo::class create ZZZ {
120 self method callback { callback-args ?additional-args...? } ...
121[LiteExecV2Call signature]
122*/
123
124// #define Sq3LiteExecV2CB_ret enum MkErrorE
125// #define Sq3LiteExecV2CB_args MK_RT_ARGS MK_CBP callback, MK_BFL vals, MK_BFL cols
127{
129
130 // 1. setup environment
131 struct MkCallS *call = callV2 ;
132 SQ3_LITE lite = Sq3Lite(call->hdl);
133 OT_OBJ_T valsO = NULL;
134 OT_OBJ_T colsO = NULL;
135 OT_ENV_T interp = call->interp;
136 if (call->interp==NULL || Tcl_InterpDeleted(interp) || lite == NULL || OT_SELF_X(lite)==NULL) return MK_ERROR;
137
138 // 2. setup arguments
139 Tcl_Obj *objv[5+MkProcResolve_maxArgsLen] = {0};
140 int objc = 0;
141 valsO = OT_TMP_BFL_OBJ(vals);
142 colsO = OT_TMP_BFL_OBJ(cols);
143
144 // 3. setup my
145rescan:
146 switch (call->type) {
147 case MkCallS_own_method: {
148 // this is a instance->method
149 objv[objc++] = OT_SELF_NAME_O(MkOBJ(lite));
150 break;
151 }
153 case MkCallS_static:
154 objv[objc++] = call->my;
155 break;
156 case MkCallS_proc:
157 break;
158 case MkCallS_init: {
159 check_META(MK(ProcResolve)(MK_RT_CALL call->interp, MkOBJ(lite), call)) goto error_mq;
160 goto rescan;
161 }
162 case MkCallS_error:
163 goto error_lng;
164 case MkCallS_null:
165 goto end;
166 }
167
168 // 4. setup methode
169 if (call->mth) objv[objc++] = call->mth;
170
171 MK(ProcResolveAppendArgs)(call,&objc,objv);
172
173 objv[objc++] = valsO;
174 objv[objc++] = colsO;
175
176 // 3. call the callback
177 check_LNG (MK(EvalObjv) (interp, objc, objv, TCL_EVAL_GLOBAL)) goto error_lng;
178 //check_LNG (Tcl_EvalObjv (interp, objc, objv, TCL_EVAL_GLOBAL)) goto error_lng;
179
180 Tcl_ResetResult(interp);
181end:
182 return MkErrorGetCode_0E();
183error_lng:
185error_mq:
187 return MK_ERROR;
188}
#define MK(n)
#define OT_SELF_X(x)
#define check_META(code)
#define check_LNG(code)
#define OT_ERROR_LNG_2_META(m)
#define OT_TMP_BFL_OBJ(val)
#define OT_SELF_NAME_O(o)
#define MkProcResolve_maxArgsLen
Tcl_Interp * OT_ENV_T
Tcl_Obj * OT_OBJ_T
tag: nhi1-release-250425
#define NS(n)
#define MkBufferListAppendVC(...)
#define MkBufferListCreateTLS_T(name, num)
#define MkErrorGetCode_0E()
#define MkErrorStack_0E()
MK_ERROR
const MK_STRB * MK_STRN
#define MkOBJ(x)
#define MK_RT_CALL
#define MkRtSetup_RT(r)
static SQ3_LITE Sq3Lite(MK_MNG mng)
cast a unknown-object into an Sq3LiteS pointer or NULL if not possible
#define Sq3Fupu_Sq3LiteExecV2CB_callback_call_check
#define Sq3LiteExecV2CB_ret
#define Sq3Fupu_Sq3LiteExec_callback_call_check
#define Sq3Fupu_Sq3LiteExec_callback_call_args
#define Sq3Fupu_Sq3LiteExec_callback_call_ret
#define Sq3LiteExecV2CB_args
OT_OBJ_T mth
OT_ENV_T interp
OT_OBJ_T args
enum MkCallS::@5 type
OT_OBJ_T my
Struct to represent the data of the Sq3LiteC …