Mercurial > pub > dyncall > bindings
diff python/pydc/pydcext.c @ 40:1d50532dce12
- added syscall support to shdc
- general cleanup and refactoring
author | Tassilo Philipp |
---|---|
date | Tue, 14 Apr 2020 17:44:04 +0200 |
parents | 8c8f848131c6 |
children | 1086ca649715 |
line wrap: on
line diff
--- a/python/pydc/pydcext.c Mon Apr 13 21:58:48 2020 +0200 +++ b/python/pydc/pydcext.c Tue Apr 14 17:44:04 2020 +0200 @@ -195,7 +195,7 @@ dcReset(gpCall); dcMode(gpCall, DC_CALL_C_DEFAULT); - for (ch = *ptr; ch != '\0' && ch != ')'; ch = *++ptr) + for (ch = *ptr; ch != '\0' && ch != DC_SIGCHAR_ENDARG; ch = *++ptr) { PyObject* po; @@ -213,20 +213,9 @@ if(*(ptr+1) != '\0') { // @@@ this is easily going out of sync with dyncall, abstract this sigchar->mode lookup somewhere inside dyncall - switch(*++ptr) { - case DC_SIGCHAR_CC_DEFAULT: dcMode(gpCall, DC_CALL_C_DEFAULT ); break; - case DC_SIGCHAR_CC_ELLIPSIS: dcMode(gpCall, DC_CALL_C_ELLIPSIS ); break; - case DC_SIGCHAR_CC_ELLIPSIS_VARARGS: dcMode(gpCall, DC_CALL_C_ELLIPSIS_VARARGS ); break; - case DC_SIGCHAR_CC_CDECL: dcMode(gpCall, DC_CALL_C_X86_CDECL ); break; - case DC_SIGCHAR_CC_STDCALL: dcMode(gpCall, DC_CALL_C_X86_WIN32_STD ); break; - case DC_SIGCHAR_CC_FASTCALL_MS: dcMode(gpCall, DC_CALL_C_X86_WIN32_FAST_MS ); break; - case DC_SIGCHAR_CC_FASTCALL_GNU: dcMode(gpCall, DC_CALL_C_X86_WIN32_FAST_GNU); break; - case DC_SIGCHAR_CC_THISCALL_MS: dcMode(gpCall, DC_CALL_C_X86_WIN32_THIS_MS ); break; - case DC_SIGCHAR_CC_THISCALL_GNU: dcMode(gpCall, DC_CALL_C_X86_WIN32_THIS_GNU); break; - case DC_SIGCHAR_CC_ARM_ARM: dcMode(gpCall, DC_CALL_C_ARM_ARM ); break; - case DC_SIGCHAR_CC_ARM_THUMB: dcMode(gpCall, DC_CALL_C_ARM_THUMB ); break; - case DC_SIGCHAR_CC_SYSCALL: dcMode(gpCall, DC_CALL_SYS_DEFAULT ); break; - } + DCint mode = dcGetModeFromCCSigChar(*++ptr); + if(mode != DC_ERROR_UNSUPPORTED_MODE) + dcMode(gpCall, mode); } --pos; // didn't count as arg }