theConfig 10.0
Loading...
Searching...
No Matches
LcCall_rb.c
Go to the documentation of this file.
1
9/* LABEL-NO */
10
11#define META_FILE_NAME "LcCall_rb.c"
12
14//#include "tmpl/lc_type_S_lng.h"
15#include "misc_check_rb.h"
16
17/* LABEL-END */
18
19mk_inline VALUE NS(sRescue) (
21 LC_CFG const cfg,
22 VALUE(*proc)(ANYARGS),
23 VALUE data
24) {
25 VALUE ret;
26 int state;
27 ret = rb_protect(proc, data, &state);
28 if (state) {
30 }
31 return ret;
32}
33
34// ==========================================================================
35
36// method callback without self
37static VALUE NS(sCallMethod) (VALUE array) {
38 const VALUE *valP = rb_array_const_ptr(array);
39 return rb_method_call((int)RARRAY_LEN(array)-1, &valP[1], valP[0]);
40}
41
42// ==========================================================================
43
44/*
45[ConfigIncludeCall signature]
46 callback-args := inclDir:String[in] , path:String[in] , ret:MkBufferListC[inout]
47 [static] def callback ( callback-args )
48 [instance] class YYY
49 def callback ( callback-args )
50 [class] class ZZZ
51 def self.callback ( callback-args )
52[ConfigIncludeCall signature]
53*/
54
55enum MkErrorE NS(ConfigIncludeCall) ( LcConfigIncludeCallF_ARGS )
56{
58
59 struct MkCallS *call = cfg->fConfigIncludeData;
60 int argNum = 3;
61
62 // 1. check environment
63 if (OT_LNG_NULL_IS(call->procCallback)) return MK_OK;
64
65//printLngObj(call->procCallback)
66
67MkDbgDeepX_3(cfg, "AAA", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
68
69 // 2. if not already done initialize
70 if (call->procCall == NULL) {
71 switch (call->procType) {
72 case MkCallS_own_method: {
73 if (call->procArity != argNum) goto methode_arg_error;
74 call->procCall = NS(sCallMethod);
75 }
76 break;
77 default:
78 MkErrorSetV_3M(cfg, "WrongInitError", "found invalid procType for callback '%s'", VAL2STRN(call->procCallback));
79 goto error;
80 break;
81 }
82 }
83
84 VALUE ary = rb_ary_resize(call->procArgs,4);
85 rb_ary_store(ary,0,call->procCallback);
86 rb_ary_store(ary,1,STRN2VAL(incDir));
87 rb_ary_store(ary,2,STRN2VAL(path));
88 rb_ary_store(ary,3,OT_TMP_BFL_OBJ(ret_inout));
89 NS(sRescue)(MK_RT_CALL cfg,call->procCall,ary);
90
91 MkErrorCheck_0E();
92
93MkDbgDeepX_3(mqctx, "BBB", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
94 return MkErrorGetCode_0E();
95
96methode_arg_error:
97 MkErrorSetV_3M(cfg, "WrongNumberOfArgError", "for callback '%s' exactly '%d' argument is required, but '%d' was received",
98 VAL2STRN(call->procCallback), argNum, call->procArity);
99 goto error;
100
101error:
102MkDbgDeepX_3(cfg, "EEE", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
103//printSTACK_1(mqctx)
104 return MkErrorStack_0E();
105}
106
107void NS(ConfigIncludeFree) ( LcConfigIncludeFreeF_ARGS )
108{
109 MK(CallFree)(&cfg->fConfigIncludeData);
110}
111
112// ---------------------------------------------------------------------
113
114/*
115[SettingDeleteCall signature]
116 callback-args := hdl:EXPORT-HANDLE[in]
117 [static] def callback ( callback-args )
118 [instance] class YYY
119 def callback ( callback-args )
120 [class] class ZZZ
121 def self.callback ( callback-args )
122[SettingDeleteCall signature]
123*/
124
125enum MkErrorE NS(SettingDeleteCall) ( LcSettingDeleteCallF_ARGS )
126{
128
129 struct MkCallS *call = cfg->fSettingDeleteData;
130 int argNum = 1;
131
132 // 1. check environment
133 if (OT_LNG_NULL_IS(call->procCallback)) return MK_OK;
134
135//printLngObj(call->procCallback)
136
137MkDbgDeepX_3(cfg, "AAA", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
138
139 // 2. if not already done initialize
140 if (call->procCall == NULL) {
141 switch (call->procType) {
142 case MkCallS_own_method: {
143 if (call->procArity != argNum) goto methode_arg_error;
144 call->procCall = NS(sCallMethod);
145 }
146 break;
147 default:
148 MkErrorSetV_3M(cfg, "WrongInitError", "found invalid procType for callback '%s'", VAL2STRN(call->procCallback));
149 goto error;
150 break;
151 }
152 }
153
154 VALUE ary = rb_ary_resize(call->procArgs,2);
155 rb_ary_store(ary,0,call->procCallback);
156 rb_ary_store(ary,1,LONG2VAL(MkObjectHandleGet_1X(cfs)));
157 NS(sRescue)(MK_RT_CALL cfg,call->procCall,ary);
158
159 MkErrorCheck_0E();
160
161MkDbgDeepX_3(mqctx, "BBB", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
162 return MkErrorGetCode_0E();
163
164methode_arg_error:
165 MkErrorSetV_3M(cfg, "WrongNumberOfArgError", "for callback '%s' exactly '%d' argument is required, but '%d' was received",
166 VAL2STRN(call->procCallback), argNum, call->procArity);
167 goto error;
168
169error:
170MkDbgDeepX_3(cfg, "EEE", "cmd=%s", VAL2STRN(rb_inspect(call->procCallback)));
171//printSTACK_1(mqctx)
172 return MkErrorStack_0E();
173}
174
175void NS(SettingDeleteFree) ( LcSettingDeleteFreeF_ARGS )
176{
177 MK(CallFree)(&cfg->fSettingDeleteData);
178}
179
tag: nhi1-release-250425
#define NS(n)
#define MK(n)
#define LONG2VAL(nat)
#define OT_LNG_NULL_IS(obj)
#define VAL2STRN(val)
#define OT_ERROR_LNG_2_META(m)
#define OT_TMP_BFL_OBJ(val)
#define STRN2VAL(nat)
#define LcSettingDeleteFreeF_ARGS
#define LcSettingDeleteCallF_CHECK
#define LcConfigIncludeCallF_CHECK
#define LcConfigIncludeFreeF_ARGS
#define LcConfigIncludeCallF_ARGS
#define LcSettingDeleteCallF_ARGS
#define MkErrorGetCode_0E()
#define MkErrorStack_0E()
#define MkErrorSetV_3M(err, callfunc, printfmt,...)
#define mk_inline
MkErrorE
MK_OK
#define MkDbgDeepX_3(m, ident, fmt,...)
#define MkObjectHandleGet_1X(x)
#define MK_RT_CALL
#define MK_RT_ARGS
Struct to represent the data from the LcConfigC …
VALUE procCallback
VALUE procArgs
MK_I32 procArity
enum MkCallS::@0 procType
rbmkkernel_procCallF procCall