From 3c380daa59c9ffaac6e805cba79165add7a8add9 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 25 Aug 2010 14:04:31 +0200 Subject: [PATCH] oleaut32: Simplify the i386 implementation of DispCallFunc. --- dlls/oleaut32/typelib.c | 90 +++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 49 deletions(-) diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index da0d43d695a..2fc3f475eb1 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -5706,7 +5706,7 @@ static HRESULT WINAPI ITypeInfo_fnGetIDsOfNames( ITypeInfo2 *iface, #ifdef __i386__ -extern DWORD CDECL call_method( void *func, int nb_args, const DWORD *args ); +extern LONGLONG CDECL call_method( void *func, int nb_args, const DWORD *args ); __ASM_GLOBAL_FUNC( call_method, "pushl %ebp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") @@ -5768,33 +5768,6 @@ _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) { TRACE("returns %08x\n",res); return res; } - -/* The size of the argument on the stack in DWORD units (in all x86 call - * convetions the arguments on the stack are DWORD-aligned) - */ -static int _dispargsize(VARTYPE vt) -{ - switch (vt) { - case VT_I8: - case VT_UI8: - return 8/sizeof(DWORD); - case VT_R8: - return sizeof(double)/sizeof(DWORD); - case VT_DECIMAL: - return (sizeof(DECIMAL)+3)/sizeof(DWORD); - case VT_CY: - return sizeof(CY)/sizeof(DWORD); - case VT_DATE: - return sizeof(DATE)/sizeof(DWORD); - case VT_VARIANT: - return (sizeof(VARIANT)+3)/sizeof(DWORD); - case VT_RECORD: - FIXME("VT_RECORD not implemented\n"); - return 1; - default: - return 1; - } -} #endif /* __i386__ */ static HRESULT userdefined_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt) @@ -5976,26 +5949,23 @@ DispCallFunc( VARTYPE* prgvt, VARIANTARG** prgpvarg, VARIANT* pvargResult) { #ifdef __i386__ - int argsize, argspos; + int argspos; UINT i; DWORD *args; - HRESULT hres; + LONGLONG ret; TRACE("(%p, %ld, %d, %d, %d, %p, %p, %p (vt=%d))\n", pvInstance, oVft, cc, vtReturn, cActuals, prgvt, prgpvarg, pvargResult, V_VT(pvargResult)); - argsize = 0; - if (pvInstance) - argsize++; /* for This pointer */ - - for (i=0;i