diff dyncallback/dyncall_callback_x86.c @ 466:ddfb9577a00e

introduced platform-native thiscall mode (DC_CALL_C_DEFAULT_THIS), as needed for upcoming aggregate support (until now only x86 platforms allowed for specifically selecting thiscall mode, given the different conventions on the same platform); also added respective DC_SIGCHAR_CC_THISCALL ('*')
author Tassilo Philipp
date Wed, 02 Feb 2022 18:30:44 +0100
parents 3bdd326dc269
children 71c884e610f0
line wrap: on
line diff
--- a/dyncallback/dyncall_callback_x86.c	Wed Feb 02 12:55:23 2022 +0100
+++ b/dyncallback/dyncall_callback_x86.c	Wed Feb 02 18:30:44 2022 +0100
@@ -186,31 +186,20 @@
 void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
 {
   const char* ptr;
-  char  ch;
   int mode;
   pcb->handler = handler;
   pcb->userdata = userdata;
 
   ptr = signature;
-  ch = *ptr;
 
   /* x86 hints: */
 
   mode = DC_CALL_C_X86_CDECL;
 
-  if(ch == DC_SIGCHAR_CC_PREFIX)
+  if(*ptr == DC_SIGCHAR_CC_PREFIX)
   {
-    ptr++;
-    ch = *ptr++;
-    switch(ch) {
-      case DC_SIGCHAR_CC_DEFAULT:      mode = DC_CALL_C_DEFAULT;            break;
-      case DC_SIGCHAR_CC_THISCALL_GNU: // == cdecl
-      case DC_SIGCHAR_CC_CDECL:        mode = DC_CALL_C_X86_CDECL;          break;
-      case DC_SIGCHAR_CC_STDCALL:      mode = DC_CALL_C_X86_WIN32_STD;      break;
-      case DC_SIGCHAR_CC_FASTCALL_MS:  mode = DC_CALL_C_X86_WIN32_FAST_MS;  break;
-      case DC_SIGCHAR_CC_FASTCALL_GNU: mode = DC_CALL_C_X86_WIN32_FAST_GNU; break;
-      case DC_SIGCHAR_CC_THISCALL_MS:  mode = DC_CALL_C_X86_WIN32_THIS_MS;  break;
-    }
+    mode = dcGetModeFromCCSigChar(ptr[1]);
+    ptr += 2;
   }
 
   /* x86 configuration: */
@@ -262,7 +251,6 @@
 /*
  * callback constructor
  */
-
 DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
 {
   int err;