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
Sq3Call_rb.c File Reference

Sq3Call_rb.c - 17 Apr 2025 - aotto1968. 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

Sq3Call_rb.c - 17 Apr 2025 - aotto1968.

Version
94486eaaa48431d85fd346f26b604ead9fc893a5
Date
Thu Apr 17 12:31:54 2025 +0200
Author
aotto1968 aotto.nosp@m.1968.nosp@m.@t-on.nosp@m.line.nosp@m..de

Definition in file Sq3Call_rb.c.

Macro Definition Documentation

◆ META_FILE_NAME

#define META_FILE_NAME   "Sq3Call_rb.c"

Definition at line 14 of file Sq3Call_rb.c.

Function Documentation

◆ rbsq3lite_LiteExecCall()

Definition at line 61 of file Sq3Call_rb.c.

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

◆ rbsq3lite_LiteExecV2Call()

Sq3LiteExecV2CB_ret rbsq3lite_LiteExecV2Call ( Sq3LiteExecV2CB_args )

Definition at line 143 of file Sq3Call_rb.c.

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

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

◆ rbsq3lite_sRescue()

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

Definition at line 22 of file Sq3Call_rb.c.

27 {
28 VALUE ret;
29 int state;
30 ret = rb_protect(proc, data, &state);
31 if (state) {
33 }
34 return ret;
35}
#define OT_ERROR_LNG_2_META(m)