Module: wine Branch: master Commit: db137cc975cd05451f5235ebe948fc640204be84 URL: http://source.winehq.org/git/wine.git/?a=commit;h=db137cc975cd05451f5235ebe9...
Author: Piotr Caban piotr@codeweavers.com Date: Fri Jan 15 08:17:50 2010 +0100
jscript: Make Array.join generic.
---
dlls/jscript/array.c | 16 +++++++--------- dlls/jscript/tests/api.js | 11 +++++++++++ 2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index bb54493..5acfa01 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -342,20 +342,18 @@ static HRESULT array_join(script_ctx_t *ctx, DispatchEx *array, DWORD length, co }
/* ECMA-262 3rd Edition 15.4.4.5 */ -static HRESULT Array_join(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISPPARAMS *dp, +static HRESULT Array_join(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller) { + DispatchEx *jsthis; DWORD length; HRESULT hres;
TRACE("\n");
- if(is_vclass(jsthis, JSCLASS_ARRAY)) { - length = array_from_vdisp(jsthis)->length; - }else { - FIXME("dispid is not Array\n"); - return E_NOTIMPL; - } + hres = get_length(ctx, vthis, ei, &jsthis, &length); + if(FAILED(hres)) + return hres;
if(arg_cnt(dp)) { BSTR sep; @@ -364,11 +362,11 @@ static HRESULT Array_join(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISPPA if(FAILED(hres)) return hres;
- hres = array_join(ctx, jsthis->u.jsdisp, length, sep, retv, ei, caller); + hres = array_join(ctx, jsthis, length, sep, retv, ei, caller);
SysFreeString(sep); }else { - hres = array_join(ctx, jsthis->u.jsdisp, length, default_separatorW, retv, ei, caller); + hres = array_join(ctx, jsthis, length, default_separatorW, retv, ei, caller); }
return hres; diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 69deab2..40193a7 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -654,6 +654,16 @@ ok(tmp === "1,2,,false,,,a", "arr.toString() = " + tmp); tmp = arr.toString("test"); ok(tmp === "1,2,,false,,,a", "arr.toString() = " + tmp);
+arr = new Object(); +arr.length = 3; +arr[0] = "aa"; +arr[2] = 2; +arr[7] = 3; +arr.join = Array.prototype.join; +tmp = arr.join(","); +ok(arr.length === 3, "arr.length = " + arr.length); +ok(tmp === "aa,,2", "tmp = " + tmp); + arr = [5,true,2,-1,3,false,"2.5"]; tmp = arr.sort(function(x,y) { return y-x; }); ok(tmp === arr, "tmp !== arr"); @@ -1880,6 +1890,7 @@ testArrayHostThis("slice"); testArrayHostThis("splice"); testArrayHostThis("unshift"); testArrayHostThis("reverse"); +testArrayHostThis("join");
function testObjectInherit(obj, constr, ts, tls, vo) { ok(obj instanceof Object, "obj is not instance of Object");