124124}
125125
126126inline 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+
129130 bool supercall =
130131 classMethod
131132 ? class_conformsToProtocol (self,
@@ -148,12 +149,12 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
148149 if (!supercall) {
149150#if defined(__x86_64__)
150151 if (isStret) {
151- cif->call (( void *) objc_msgSend_stret, rvalue, avalues);
152+ ffi_call (& cif->cif , FFI_FN ( objc_msgSend_stret) , rvalue, avalues);
152153 } else {
153- cif->call (( void *) objc_msgSend, rvalue, avalues);
154+ ffi_call (& cif->cif , FFI_FN ( objc_msgSend) , rvalue, avalues);
154155 }
155156#else
156- cif->call (( void *) objc_msgSend, rvalue, avalues);
157+ ffi_call (& cif->cif , FFI_FN ( objc_msgSend) , rvalue, avalues);
157158#endif
158159 } else {
159160 struct objc_super superobj = {self,
@@ -162,12 +163,12 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
162163 avalues[0 ] = (void *)&superobjPtr;
163164#if defined(__x86_64__)
164165 if (isStret) {
165- cif->call (( void *) objc_msgSendSuper_stret, rvalue, avalues);
166+ ffi_call (& cif->cif , FFI_FN ( objc_msgSendSuper_stret) , rvalue, avalues);
166167 } else {
167- cif->call (( void *) objc_msgSendSuper, rvalue, avalues);
168+ ffi_call (& cif->cif , FFI_FN ( objc_msgSendSuper) , rvalue, avalues);
168169 }
169170#else
170- cif->call (( void *) objc_msgSendSuper, rvalue, avalues);
171+ ffi_call (& cif->cif , FFI_FN ( objc_msgSendSuper) , rvalue, avalues);
171172#endif
172173 }
173174}
@@ -212,7 +213,7 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
212213 }
213214 }
214215
215- objcNativeCall (env, jsThis, cif, self, avalues, rvalue, method-> classMethod );
216+ objcNativeCall (env, jsThis, cif, self, avalues, rvalue);
216217
217218 for (unsigned int i = 0 ; i < cif->argc ; i++) {
218219 if (shouldFree[i]) {
@@ -252,7 +253,7 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
252253 void *avalues[2 ] = {&self, &method->methodOrGetter .selector };
253254 void *rvalue = cif->rvalue ;
254255
255- objcNativeCall (env, jsThis, cif, self, avalues, rvalue, method-> classMethod );
256+ objcNativeCall (env, jsThis, cif, self, avalues, rvalue);
256257
257258 if (cif->returnType ->kind == mdTypeInstanceObject) {
258259 napi_value constructor = jsThis;
@@ -290,7 +291,7 @@ inline void objcNativeCall(napi_env env, napi_value jsThis, MethodCif *cif,
290291 bool shouldFree = false ;
291292 cif->argTypes [0 ]->toNative (env, argv, avalues[2 ], &shouldFree, &shouldFree);
292293
293- objcNativeCall (env, jsThis, cif, self, avalues, rvalue, method-> classMethod );
294+ objcNativeCall (env, jsThis, cif, self, avalues, rvalue);
294295
295296 if (shouldFree) {
296297 cif->argTypes [0 ]->free (env, *((void **)avalues[2 ]));
0 commit comments