jscript: Use jsdisp_get_own_property in Object.propertyIsEnumerable implementation.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2018-05-10 19:20:16 +02:00 committed by Alexandre Julliard
parent f82bc09f28
commit fc639fa271
3 changed files with 4 additions and 18 deletions

View File

@ -1589,19 +1589,6 @@ HRESULT disp_delete_name(script_ctx_t *ctx, IDispatch *disp, jsstr_t *name, BOOL
return hres;
}
HRESULT jsdisp_is_enumerable(jsdisp_t *obj, const WCHAR *name, BOOL *ret)
{
dispex_prop_t *prop;
HRESULT hres;
hres = find_prop_name(obj, string_hash(name), name, &prop);
if(FAILED(hres))
return hres;
*ret = prop && (prop->flags & PROPF_ENUMERABLE) && prop->type != PROP_PROTREF;
return S_OK;
}
HRESULT jsdisp_get_own_property(jsdisp_t *obj, const WCHAR *name, BOOL flags_only,
property_desc_t *desc)
{

View File

@ -294,7 +294,6 @@ HRESULT disp_delete(IDispatch*,DISPID,BOOL*) DECLSPEC_HIDDEN;
HRESULT disp_delete_name(script_ctx_t*,IDispatch*,jsstr_t*,BOOL*) DECLSPEC_HIDDEN;
HRESULT jsdisp_delete_idx(jsdisp_t*,DWORD) DECLSPEC_HIDDEN;
HRESULT jsdisp_get_own_property(jsdisp_t*,const WCHAR*,BOOL,property_desc_t*) DECLSPEC_HIDDEN;
HRESULT jsdisp_is_enumerable(jsdisp_t*,const WCHAR*,BOOL*) DECLSPEC_HIDDEN;
HRESULT create_builtin_function(script_ctx_t*,builtin_invoke_t,const WCHAR*,const builtin_info_t*,DWORD,
jsdisp_t*,jsdisp_t**) DECLSPEC_HIDDEN;

View File

@ -178,9 +178,9 @@ static HRESULT Object_hasOwnProperty(script_ctx_t *ctx, vdisp_t *jsthis, WORD fl
static HRESULT Object_propertyIsEnumerable(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
jsval_t *r)
{
property_desc_t prop_desc;
const WCHAR *name;
jsstr_t *name_str;
BOOL ret;
HRESULT hres;
TRACE("\n");
@ -199,13 +199,13 @@ static HRESULT Object_propertyIsEnumerable(script_ctx_t *ctx, vdisp_t *jsthis, W
if(FAILED(hres))
return hres;
hres = jsdisp_is_enumerable(jsthis->u.jsdisp, name, &ret);
hres = jsdisp_get_own_property(jsthis->u.jsdisp, name, TRUE, &prop_desc);
jsstr_release(name_str);
if(FAILED(hres))
if(FAILED(hres) && hres != DISP_E_UNKNOWNNAME)
return hres;
if(r)
*r = jsval_bool(ret);
*r = jsval_bool(hres == S_OK && (prop_desc.flags & PROPF_ENUMERABLE) != 0);
return S_OK;
}