From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/jscript/arraybuf.c | 35 ++++++++++++++++++++++++------- dlls/mshtml/tests/documentmode.js | 2 +- 2 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/dlls/jscript/arraybuf.c b/dlls/jscript/arraybuf.c index 73c556c3ed7..bbafe027e19 100644 --- a/dlls/jscript/arraybuf.c +++ b/dlls/jscript/arraybuf.c @@ -1242,9 +1242,9 @@ static const builtin_info_t TypedArrayConstr_info = { .call = Function_value, };
-static HRESULT init_typed_array_constructor(script_ctx_t *ctx, builtin_invoke_t func, const WCHAR *name, - const builtin_info_t *info, unsigned int type_idx) +static HRESULT init_typed_array_constructor(script_ctx_t *ctx, builtin_invoke_t func, const WCHAR *name, const builtin_info_t *info) { + const unsigned type_idx = info->class - FIRST_TYPEDARRAY_JSCLASS; TypedArrayInstance *prototype; HRESULT hres;
@@ -1280,6 +1280,20 @@ static HRESULT init_typed_array_constructor(script_ctx_t *ctx, builtin_invoke_t
HRESULT init_arraybuf_constructors(script_ctx_t *ctx) { + static const struct { + const WCHAR *name; + builtin_invoke_t constr_func; + const builtin_info_t *prototype_info; + } typed_arrays[] = { + { L"Int8Array", Int8ArrayConstr_value, &Int8Array_info }, + { L"Int16Array", Int16ArrayConstr_value, &Int16Array_info }, + { L"Int32Array", Int32ArrayConstr_value, &Int32Array_info }, + { L"Uint8Array", Uint8ArrayConstr_value, &Uint8Array_info }, + { L"Uint16Array", Uint16ArrayConstr_value, &Uint16Array_info }, + { L"Uint32Array", Uint32ArrayConstr_value, &Uint32Array_info }, + { L"Float32Array", Float32ArrayConstr_value, &Float32Array_info }, + { L"Float64Array", Float64ArrayConstr_value, &Float64Array_info }, + }; static const struct { const WCHAR *name; builtin_invoke_t get; @@ -1363,12 +1377,17 @@ HRESULT init_arraybuf_constructors(script_ctx_t *ctx) if(FAILED(hres)) return hres;
-#define X(name) \ - hres = init_typed_array_constructor(ctx, name##Constr_value, L"" #name, &name##_info, name##_desc_idx); \ - if(FAILED(hres)) \ - return hres; - ALL_TYPED_ARRAYS -#undef X + for(i = 0; i < ARRAY_SIZE(typed_arrays); i++) { + hres = init_typed_array_constructor(ctx, typed_arrays[i].constr_func, typed_arrays[i].name, typed_arrays[i].prototype_info); + if(FAILED(hres)) + return hres; + } + + if(ctx->version >= SCRIPTLANGUAGEVERSION_ES6) { + hres = init_typed_array_constructor(ctx, Uint8ClampedArrayConstr_value, L"Uint8ClampedArray", &Uint8ClampedArray_info); + if(FAILED(hres)) + return hres; + }
return hres; } diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index e683dcf5f7b..faabc7a3475 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -4689,7 +4689,7 @@ async_test("window own props", function() { "SVGScriptElement", "SVGStopElement", "SVGStringList", "SVGStyleElement", "SVGSwitchElement", "SVGSymbolElement", "SVGTextElement", "SVGTextPathElement", "SVGTitleElement", "SVGTransform", "SVGTransformList", "SVGUnitTypes", "SVGUseElement", "SVGViewElement", "SVGZoomAndPan", "SVGZoomEvent", "TextEvent", "TextMetrics", "TextRangeCollection", ["TextTrack",10], ["TextTrackCue",10], ["TextTrackCueList",10], ["TextTrackList",10], "TimeRanges", ["TrackEvent",10], ["TransitionEvent",10], "TreeWalker", - ["Uint8ClampedArray",10,10], ["URL",10], ["ValidityState",10], ["VideoPlaybackQuality",11], ["WebGLActiveInfo",11], ["WebGLBuffer",11], ["WebGLContextEvent",11], + ["URL",10], ["ValidityState",10], ["VideoPlaybackQuality",11], ["WebGLActiveInfo",11], ["WebGLBuffer",11], ["WebGLContextEvent",11], ["WebGLFramebuffer",11], ["WebGLObject",11], ["WebGLProgram",11], ["WebGLRenderbuffer",11], ["WebGLRenderingContext",11], ["WebGLShader",11], ["WebGLShaderPrecisionFormat",11], ["WebGLTexture",11], ["WebGLUniformLocation",11], ["WEBGL_compressed_texture_s3tc",11], ["WEBGL_debug_renderer_info",11], ["WebSocket",10], "WheelEvent", ["Worker",10], ["XMLHttpRequestEventTarget",10], "XMLSerializer"