Jacek Caban : jscript: Moved property creation out of find_prop_name_prot.
Alexandre Julliard
julliard at winehq.org
Mon Feb 8 11:06:05 CST 2010
Module: wine
Branch: master
Commit: 10c99b5735e4a868f076036b2cf08e704741a5ee
URL: http://source.winehq.org/git/wine.git/?a=commit;h=10c99b5735e4a868f076036b2cf08e704741a5ee
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Feb 5 23:15:07 2010 +0100
jscript: Moved property creation out of find_prop_name_prot.
---
dlls/jscript/dispex.c | 35 ++++++++++++++++++++++++-----------
1 files changed, 24 insertions(+), 11 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 19fdd56..f2c22a9 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -160,7 +160,7 @@ static HRESULT find_prop_name(DispatchEx *This, const WCHAR *name, dispex_prop_t
return S_OK;
}
-static HRESULT find_prop_name_prot(DispatchEx *This, const WCHAR *name, BOOL alloc, dispex_prop_t **ret)
+static HRESULT find_prop_name_prot(DispatchEx *This, const WCHAR *name, dispex_prop_t **ret)
{
dispex_prop_t *prop;
HRESULT hres;
@@ -174,7 +174,7 @@ static HRESULT find_prop_name_prot(DispatchEx *This, const WCHAR *name, BOOL all
}
if(This->prototype) {
- hres = find_prop_name_prot(This->prototype, name, FALSE, &prop);
+ hres = find_prop_name_prot(This->prototype, name, &prop);
if(FAILED(hres))
return hres;
if(prop) {
@@ -186,17 +186,27 @@ static HRESULT find_prop_name_prot(DispatchEx *This, const WCHAR *name, BOOL all
}
}
- if(alloc) {
+ *ret = prop;
+ return S_OK;
+}
+
+static HRESULT ensure_prop_name(DispatchEx *This, const WCHAR *name, DWORD create_flags, dispex_prop_t **ret)
+{
+ dispex_prop_t *prop;
+ HRESULT hres;
+
+ hres = find_prop_name_prot(This, name, &prop);
+ if(SUCCEEDED(hres) && !prop) {
TRACE("creating prop %s\n", debugstr_w(name));
- prop = alloc_prop(This, name, PROP_VARIANT, PROPF_ENUM);
+ prop = alloc_prop(This, name, PROP_VARIANT, create_flags);
if(!prop)
return E_OUTOFMEMORY;
VariantInit(&prop->u.var);
}
*ret = prop;
- return S_OK;
+ return hres;
}
static HRESULT set_this(DISPPARAMS *dp, DISPPARAMS *olddp, IDispatch *jsthis)
@@ -789,7 +799,7 @@ HRESULT init_dispex_from_constr(DispatchEx *dispex, script_ctx_t *ctx, const bui
static const WCHAR prototypeW[] = {'p','r','o','t','o','t','y','p','e',0};
- hres = find_prop_name_prot(constr, prototypeW, FALSE, &prop);
+ hres = find_prop_name_prot(constr, prototypeW, &prop);
if(SUCCEEDED(hres) && prop) {
jsexcept_t jsexcept;
VARIANT var;
@@ -831,7 +841,10 @@ HRESULT jsdisp_get_id(DispatchEx *jsdisp, const WCHAR *name, DWORD flags, DISPID
dispex_prop_t *prop;
HRESULT hres;
- hres = find_prop_name_prot(jsdisp, name, (flags&fdexNameEnsure) != 0, &prop);
+ if(flags & fdexNameEnsure)
+ hres = ensure_prop_name(jsdisp, name, PROPF_ENUM, &prop);
+ else
+ hres = find_prop_name_prot(jsdisp, name, &prop);
if(FAILED(hres))
return hres;
@@ -878,7 +891,7 @@ HRESULT jsdisp_call_name(DispatchEx *disp, const WCHAR *name, WORD flags, DISPPA
dispex_prop_t *prop;
HRESULT hres;
- hres = find_prop_name_prot(disp, name, FALSE, &prop);
+ hres = find_prop_name_prot(disp, name, &prop);
if(FAILED(hres))
return hres;
@@ -933,7 +946,7 @@ HRESULT jsdisp_propput_name(DispatchEx *obj, const WCHAR *name, VARIANT *val, js
dispex_prop_t *prop;
HRESULT hres;
- hres = find_prop_name_prot(obj, name, TRUE, &prop);
+ hres = ensure_prop_name(obj, name, PROPF_ENUM, &prop);
if(FAILED(hres))
return hres;
@@ -992,7 +1005,7 @@ HRESULT jsdisp_propget_name(DispatchEx *obj, const WCHAR *name, VARIANT *var, js
dispex_prop_t *prop;
HRESULT hres;
- hres = find_prop_name_prot(obj, name, FALSE, &prop);
+ hres = find_prop_name_prot(obj, name, &prop);
if(FAILED(hres))
return hres;
@@ -1014,7 +1027,7 @@ HRESULT jsdisp_get_idx(DispatchEx *obj, DWORD idx, VARIANT *var, jsexcept_t *ei,
sprintfW(name, formatW, idx);
- hres = find_prop_name_prot(obj, name, FALSE, &prop);
+ hres = find_prop_name_prot(obj, name, &prop);
if(FAILED(hres))
return hres;
More information about the wine-cvs
mailing list