Jacek Caban : mshtml: Clean up InvokeEx implementation by using get_dispid_type.

Alexandre Julliard julliard at winehq.org
Tue Jul 24 14:39:43 CDT 2012


Module: wine
Branch: master
Commit: 1f6febea085115b039d198b158d8143a88c6c714
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1f6febea085115b039d198b158d8143a88c6c714

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jul 24 15:56:05 2012 +0200

mshtml: Clean up InvokeEx implementation by using get_dispid_type.

---

 dlls/mshtml/dispex.c |   37 ++++++++++++++++++++++---------------
 1 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index 614c9d5..b2f5b81 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -1147,22 +1147,13 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc
 
     TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
 
-    if(is_custom_dispid(id) && This->data->vtbl && This->data->vtbl->invoke)
+    switch(get_dispid_type(id)) {
+    case DISPEXPROP_CUSTOM:
+        if(!This->data->vtbl || !This->data->vtbl->invoke)
+            return DISP_E_UNKNOWNNAME;
         return This->data->vtbl->invoke(This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
 
-    if(wFlags == DISPATCH_CONSTRUCT) {
-        if(id == DISPID_VALUE) {
-            if(This->data->vtbl && This->data->vtbl->value) {
-                return This->data->vtbl->value(This, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
-            }
-            FIXME("DISPATCH_CONSTRUCT flag but missing value function\n");
-            return E_FAIL;
-        }
-        FIXME("DISPATCH_CONSTRUCT flag without DISPID_VALUE\n");
-        return E_FAIL;
-    }
-
-    if(is_dynamic_dispid(id)) {
+    case DISPEXPROP_DYNAMIC: {
         DWORD idx = id - DISPID_DYNPROP_0;
         dynamic_prop_t *prop;
 
@@ -1209,8 +1200,24 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc
             return E_NOTIMPL;
         }
     }
+    case DISPEXPROP_BUILTIN:
+        if(wFlags == DISPATCH_CONSTRUCT) {
+            if(id == DISPID_VALUE) {
+                if(This->data->vtbl && This->data->vtbl->value) {
+                    return This->data->vtbl->value(This, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
+                }
+                FIXME("DISPATCH_CONSTRUCT flag but missing value function\n");
+                return E_FAIL;
+            }
+            FIXME("DISPATCH_CONSTRUCT flag without DISPID_VALUE\n");
+            return E_FAIL;
+        }
 
-    return invoke_builtin_prop(This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
+        return invoke_builtin_prop(This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
+    default:
+        assert(0);
+        return E_FAIL;
+    }
 }
 
 static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)




More information about the wine-cvs mailing list