theSq3Lite 10.0
Loading...
Searching...
No Matches
Sq3Call_rb.c File Reference

tag: nhi1-release-250425 More...

+ Include dependency graph for Sq3Call_rb.c:

Go to the source code of this file.

Macros

#define META_FILE_NAME   "Sq3Call_rb.c"
 

Functions

static VALUE rbsq3lite_sRescue (MK_RT mkrt, MK_MNG const mng, VALUE(*proc)(ANYARGS), VALUE data)
 
static MK_UNUSED VALUE rbsq3lite_sCallMethod (VALUE array)
 
Sq3Fupu_Sq3LiteExec_callback_call_ret rbsq3lite_LiteExecCall (Sq3Fupu_Sq3LiteExec_callback_call_args)
 
Sq3LiteExecV2CB_ret rbsq3lite_LiteExecV2Call (Sq3LiteExecV2CB_args)
 

Detailed Description

tag: nhi1-release-250425

Definition in file Sq3Call_rb.c.

Macro Definition Documentation

◆ META_FILE_NAME

#define META_FILE_NAME   "Sq3Call_rb.c"

Definition at line 11 of file Sq3Call_rb.c.

Function Documentation

◆ rbsq3lite_LiteExecCall()

Definition at line 58 of file Sq3Call_rb.c.

59{
61
62 // ?? if (_Py_IsFinalizing()) return 1;
63
64 struct MkCallS *call = callV1;
65 MkRtSetup_RT(call->mkrt);
66
67 int argNum = 2;
68
69 // 1. check environment
70 if (OT_LNG_NULL_IS(call->procCallback)) return 1;
71
72//printLngObj(call->procCallback)
73
74MkDbgDeepX_3(call->hdl, "AAA", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
75
76 // 2. if not already done initialize
77 if (call->procCall == NULL) {
78 switch (call->procType) {
79 case MkCallS_own_method: {
80 if (call->procArity != argNum) goto methode_arg_error;
81 call->procCall = NS(sCallMethod);
82 }
83 break;
84 default:
85 MkErrorSetV_3M(call->hdl, "WrongInitError", "found invalid procType for callback '%s'", VAL2STRN(call->procCallback));
86 goto error;
87 break;
88 }
89 }
90
91 OT_OBJ_T valsO = rb_ary_new2(num);
92 OT_OBJ_T colsO = rb_ary_new2(num);
93 for (long i=0; i<num; i++) {
94 rb_ary_store(valsO,i,STRN2VAL(vals[i]));
95 }
96 for (long i=0; i<num; i++) {
97 rb_ary_store(colsO,i,STRN2VAL(cols[i]));
98 }
99
100 VALUE ary = rb_ary_resize(call->procArgs,3);
101 rb_ary_store(ary,0,call->procCallback);
102 rb_ary_store(ary,1,valsO);
103 rb_ary_store(ary,2,colsO);
104 NS(sRescue)(MK_RT_CALL call->hdl,call->procCall,ary);
105
106 MkErrorCheck_0E();
107
108MkDbgDeepX_3(mqctx, "BBB", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
109 return 0;
110
111methode_arg_error:
112 MkErrorSetV_3M(call->hdl, "WrongNumberOfArgError", "for callback '%s' exactly '%d' argument is required, but '%d' was received",
113 VAL2STRN(call->procCallback), argNum, call->procArity);
114 goto error;
115
116error:
117MkDbgDeepX_3(call->hdl, "EEE", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
119//printSTACK_1(mqctx)
120 return 1;
121}
#define OT_OBJ_T
#define OT_LNG_NULL_IS(obj)
#define VAL2STRN(val)
#define STRN2VAL(nat)
#define NS(n)
#define MkErrorStack_0E()
#define MkErrorSetV_3M(err, callfunc, printfmt,...)
#define MkDbgDeepX_3(m, ident, fmt,...)
#define MK_RT_CALL
#define MkRtSetup_RT(r)
#define Sq3Fupu_Sq3LiteExec_callback_call_check
VALUE procCallback
VALUE procArgs
MK_I32 procArity
enum MkCallS::@0 procType
rbmkkernel_procCallF procCall

◆ rbsq3lite_LiteExecV2Call()

Sq3LiteExecV2CB_ret rbsq3lite_LiteExecV2Call ( Sq3LiteExecV2CB_args )

Definition at line 140 of file Sq3Call_rb.c.

141{
143
144 struct MkCallS *call = callV2;
145
146 int argNum = 2;
147
148 // 1. check environment
149 if (OT_LNG_NULL_IS(call->procCallback)) return MK_ERROR;
150
151//printLngObj(call->procCallback)
152
153MkDbgDeepX_3(call->hdl, "AAA", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
154
155 // 2. if not already done initialize
156 if (call->procCall == NULL) {
157 switch (call->procType) {
158 case MkCallS_own_method: {
159 if (call->procArity != argNum) goto methode_arg_error;
160 call->procCall = NS(sCallMethod);
161 }
162 break;
163 default:
164 MkErrorSetV_3M(call->hdl, "WrongInitError", "found invalid procType for callback '%s'", VAL2STRN(call->procCallback));
165 goto error;
166 break;
167 }
168 }
169
170 OT_OBJ_T valsO = OT_TMP_BFL_OBJ(vals);
171 OT_OBJ_T colsO = OT_TMP_BFL_OBJ(cols);
172
173 VALUE ary = rb_ary_resize(call->procArgs,3);
174 rb_ary_store(ary,0,call->procCallback);
175 rb_ary_store(ary,1,valsO);
176 rb_ary_store(ary,2,colsO);
177 NS(sRescue)(MK_RT_CALL call->hdl,call->procCall,ary);
178
179 MkErrorCheck_0E();
180
181MkDbgDeepX_3(mqctx, "BBB", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
182 return MkErrorGetCode_0E();
183
184methode_arg_error:
185 MkErrorSetV_3M(call->hdl, "WrongNumberOfArgError", "for callback '%s' exactly '%d' argument is required, but '%d' was received",
186 VAL2STRN(call->procCallback), argNum, call->procArity);
187 goto error;
188
189error:
190MkDbgDeepX_3(call->hdl, "EEE", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
191 return MkErrorStack_0E();
192}
#define OT_TMP_BFL_OBJ(val)
#define MkErrorGetCode_0E()
MK_ERROR
#define Sq3Fupu_Sq3LiteExecV2CB_callback_call_check

◆ rbsq3lite_sCallMethod()

static MK_UNUSED VALUE rbsq3lite_sCallMethod ( VALUE array)
static

Definition at line 37 of file Sq3Call_rb.c.

37 {
38 const VALUE *valP = rb_array_const_ptr(array);
39 return rb_method_call((int)RARRAY_LEN(array)-1, &valP[1], valP[0]);
40}

◆ rbsq3lite_sRescue()

static VALUE rbsq3lite_sRescue ( MK_RT mkrt,
MK_MNG const mng,
VALUE(* proc )(ANYARGS),
VALUE data )
inlinestatic

Definition at line 19 of file Sq3Call_rb.c.

24 {
25 VALUE ret;
26 int state;
27 ret = rb_protect(proc, data, &state);
28 if (state) {
30 }
31 return ret;
32}
#define OT_ERROR_LNG_2_META(m)