From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/jscript/dispex.c | 84 +++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 44 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index ad31f37c9fb..b14b58ad6ae 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -479,49 +479,6 @@ static HRESULT convert_params(script_ctx_t *ctx, const DISPPARAMS *dp, jsval_t * return S_OK; }
-static HRESULT prop_get(jsdisp_t *This, IDispatch *jsthis, dispex_prop_t *prop, jsval_t *r) -{ - jsdisp_t *prop_obj = This; - HRESULT hres; - - while(prop->type == PROP_PROTREF) { - prop_obj = prop_obj->prototype; - prop = prop_obj->props + prop->u.ref; - } - - switch(prop->type) { - case PROP_BUILTIN: - hres = prop->u.p->getter(This->ctx, prop_obj, r); - break; - case PROP_JSVAL: - hres = jsval_copy(prop->u.val, r); - break; - case PROP_ACCESSOR: - if(prop->u.accessor.getter) { - hres = jsdisp_call_value(prop->u.accessor.getter, jsval_disp(jsthis), - DISPATCH_METHOD, 0, NULL, r); - }else { - *r = jsval_undefined(); - hres = S_OK; - } - break; - case PROP_IDX: - hres = prop_obj->builtin_info->idx_get(prop_obj, prop->u.idx, r); - break; - default: - ERR("type %d\n", prop->type); - return E_FAIL; - } - - if(FAILED(hres)) { - TRACE("fail %08lx\n", hres); - return hres; - } - - TRACE("%p.%s ret %s\n", This, debugstr_w(prop->name), debugstr_jsval(*r)); - return hres; -} - static HRESULT prop_put(jsdisp_t *This, dispex_prop_t *prop, jsval_t val) { HRESULT hres; @@ -591,7 +548,46 @@ static HRESULT prop_put(jsdisp_t *This, dispex_prop_t *prop, jsval_t val)
static HRESULT dispex_prop_get(struct prop_desc *prop, IDispatch *jsthis, jsval_t *r) { - return prop_get(prop->jsdisp, jsthis, &prop->jsdisp->props[prop_id_to_idx(prop->id)], r); + dispex_prop_t *p = &prop->jsdisp->props[prop_id_to_idx(prop->id)]; + jsdisp_t *prop_obj = prop->jsdisp; + HRESULT hres; + + while(p->type == PROP_PROTREF) { + prop_obj = prop_obj->prototype; + p = prop_obj->props + p->u.ref; + } + + switch(p->type) { + case PROP_BUILTIN: + hres = p->u.p->getter(prop->jsdisp->ctx, prop_obj, r); + break; + case PROP_JSVAL: + hres = jsval_copy(p->u.val, r); + break; + case PROP_ACCESSOR: + if(p->u.accessor.getter) { + hres = jsdisp_call_value(p->u.accessor.getter, jsval_disp(jsthis), + DISPATCH_METHOD, 0, NULL, r); + }else { + *r = jsval_undefined(); + hres = S_OK; + } + break; + case PROP_IDX: + hres = prop_obj->builtin_info->idx_get(prop_obj, p->u.idx, r); + break; + default: + ERR("type %d\n", p->type); + return E_FAIL; + } + + if(FAILED(hres)) { + TRACE("fail %08lx\n", hres); + return hres; + } + + TRACE("%p.%s ret %s\n", prop->jsdisp, debugstr_w(p->name), debugstr_jsval(*r)); + return hres; }
static HRESULT dispex_prop_put(struct prop_desc *prop, jsval_t val)