124
124
}
125
125
126
126
inline void objcNativeCall (napi_env env, napi_value jsThis, MethodCif *cif,
127
- id self, void **avalues, void *rvalue,
128
- bool classMethod) {
127
+ id self, void **avalues, void *rvalue) {
128
+ bool classMethod = class_isMetaClass (object_getClass (self));
129
+
129
130
bool supercall =
130
131
classMethod
131
132
? class_conformsToProtocol (self,
@@ -148,12 +149,12 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
148
149
if (!supercall) {
149
150
#if defined(__x86_64__)
150
151
if (isStret) {
151
- cif->call (( void *) objc_msgSend_stret, rvalue, avalues);
152
+ ffi_call (& cif->cif , FFI_FN ( objc_msgSend_stret) , rvalue, avalues);
152
153
} else {
153
- cif->call (( void *) objc_msgSend, rvalue, avalues);
154
+ ffi_call (& cif->cif , FFI_FN ( objc_msgSend) , rvalue, avalues);
154
155
}
155
156
#else
156
- cif->call (( void *) objc_msgSend, rvalue, avalues);
157
+ ffi_call (& cif->cif , FFI_FN ( objc_msgSend) , rvalue, avalues);
157
158
#endif
158
159
} else {
159
160
struct objc_super superobj = {self,
@@ -162,12 +163,12 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
162
163
avalues[0 ] = (void *)&superobjPtr;
163
164
#if defined(__x86_64__)
164
165
if (isStret) {
165
- cif->call (( void *) objc_msgSendSuper_stret, rvalue, avalues);
166
+ ffi_call (& cif->cif , FFI_FN ( objc_msgSendSuper_stret) , rvalue, avalues);
166
167
} else {
167
- cif->call (( void *) objc_msgSendSuper, rvalue, avalues);
168
+ ffi_call (& cif->cif , FFI_FN ( objc_msgSendSuper) , rvalue, avalues);
168
169
}
169
170
#else
170
- cif->call (( void *) objc_msgSendSuper, rvalue, avalues);
171
+ ffi_call (& cif->cif , FFI_FN ( objc_msgSendSuper) , rvalue, avalues);
171
172
#endif
172
173
}
173
174
}
@@ -212,7 +213,7 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
212
213
}
213
214
}
214
215
215
- objcNativeCall (env, jsThis, cif, self, avalues, rvalue, method-> classMethod );
216
+ objcNativeCall (env, jsThis, cif, self, avalues, rvalue);
216
217
217
218
for (unsigned int i = 0 ; i < cif->argc ; i++) {
218
219
if (shouldFree[i]) {
@@ -252,7 +253,7 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
252
253
void *avalues[2 ] = {&self, &method->methodOrGetter .selector };
253
254
void *rvalue = cif->rvalue ;
254
255
255
- objcNativeCall (env, jsThis, cif, self, avalues, rvalue, method-> classMethod );
256
+ objcNativeCall (env, jsThis, cif, self, avalues, rvalue);
256
257
257
258
if (cif->returnType ->kind == mdTypeInstanceObject) {
258
259
napi_value constructor = jsThis;
@@ -290,7 +291,7 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
290
291
bool shouldFree = false ;
291
292
cif->argTypes [0 ]->toNative (env, argv, avalues[2 ], &shouldFree, &shouldFree);
292
293
293
- objcNativeCall (env, jsThis, cif, self, avalues, rvalue, method-> classMethod );
294
+ objcNativeCall (env, jsThis, cif, self, avalues, rvalue);
294
295
295
296
if (shouldFree) {
296
297
cif->argTypes [0 ]->free (env, *((void **)avalues[2 ]));
0 commit comments