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;
}
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) {
}
}
- 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)
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;
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;
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;
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;
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;
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;