static HRESULT get_length(script_ctx_t *ctx, vdisp_t *vdisp, jsexcept_t *ei, jsdisp_t **jsthis, DWORD *ret) { ArrayInstance *array; VARIANT var; HRESULT hres; array = array_this(vdisp); if(array) { *jsthis = &array->dispex; *ret = array->length; return S_OK; } if(!is_jsdisp(vdisp)) return throw_type_error(ctx, ei, JS_E_JSCRIPT_EXPECTED, NULL); hres = jsdisp_propget_name(vdisp->u.jsdisp, lengthW, &var, ei); if(FAILED(hres)) return hres; hres = to_uint32(ctx, &var, ei, ret); VariantClear(&var); if(FAILED(hres)) return hres; *jsthis = vdisp->u.jsdisp; return S_OK; }
static HRESULT get_length(script_ctx_t *ctx, vdisp_t *vdisp, jsdisp_t **jsthis, DWORD *ret) { ArrayInstance *array; jsval_t val; HRESULT hres; array = array_this(vdisp); if(array) { *jsthis = &array->dispex; *ret = array->length; return S_OK; } if(!is_jsdisp(vdisp)) return throw_type_error(ctx, JS_E_JSCRIPT_EXPECTED, NULL); hres = jsdisp_propget_name(vdisp->u.jsdisp, lengthW, &val); if(FAILED(hres)) return hres; hres = to_uint32(ctx, val, ret); jsval_release(val); if(FAILED(hres)) return hres; *jsthis = vdisp->u.jsdisp; return S_OK; }