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; 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, HRESULT jsdisp_get_own_property(jsdisp_t *obj, const WCHAR *name, BOOL flags_only,
property_desc_t *desc) 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 disp_delete_name(script_ctx_t*,IDispatch*,jsstr_t*,BOOL*) DECLSPEC_HIDDEN;
HRESULT jsdisp_delete_idx(jsdisp_t*,DWORD) 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_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, HRESULT create_builtin_function(script_ctx_t*,builtin_invoke_t,const WCHAR*,const builtin_info_t*,DWORD,
jsdisp_t*,jsdisp_t**) DECLSPEC_HIDDEN; 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, static HRESULT Object_propertyIsEnumerable(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
jsval_t *r) jsval_t *r)
{ {
property_desc_t prop_desc;
const WCHAR *name; const WCHAR *name;
jsstr_t *name_str; jsstr_t *name_str;
BOOL ret;
HRESULT hres; HRESULT hres;
TRACE("\n"); TRACE("\n");
@ -199,13 +199,13 @@ static HRESULT Object_propertyIsEnumerable(script_ctx_t *ctx, vdisp_t *jsthis, W
if(FAILED(hres)) if(FAILED(hres))
return 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); jsstr_release(name_str);
if(FAILED(hres)) if(FAILED(hres) && hres != DISP_E_UNKNOWNNAME)
return hres; return hres;
if(r) if(r)
*r = jsval_bool(ret); *r = jsval_bool(hres == S_OK && (prop_desc.flags & PROPF_ENUMERABLE) != 0);
return S_OK; return S_OK;
} }