Mercurial > pub > dyncall > bindings
diff python/pydc/pydcext.c @ 35:75fe1dec0eb4
- added support for signature-based calling convention switch
author | Tassilo Philipp |
---|---|
date | Mon, 13 Apr 2020 16:07:56 +0200 |
parents | 2682a627168c |
children | b84064293541 |
line wrap: on
line diff
--- a/python/pydc/pydcext.c Sun Apr 12 19:37:37 2020 +0200 +++ b/python/pydc/pydcext.c Mon Apr 13 16:07:56 2020 +0200 @@ -207,6 +207,29 @@ switch(ch) { + case DC_SIGCHAR_CC_PREFIX: + { + 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; + } + } + } + break; + case DC_SIGCHAR_BOOL: if ( !PyBool_Check(po) ) return PyErr_Format( PyExc_RuntimeError, "arg %d - expecting a bool", pos );