Mercurial > pub > dyncall > dyncall
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;