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
 			}