From 2a4f4ef420dba8797a3de8ac86ea30ea80cd1404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Fri, 24 May 2024 17:25:05 +0200 Subject: [PATCH] * Add TypedArray constructor --- packages/wasm-job/src/job.js.pas | 93 ++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 4 deletions(-) diff --git a/packages/wasm-job/src/job.js.pas b/packages/wasm-job/src/job.js.pas index d7aed8e737..97167e50df 100644 --- a/packages/wasm-job/src/job.js.pas +++ b/packages/wasm-job/src/job.js.pas @@ -50,7 +50,8 @@ Type jjvkMethod, jjvkDictionary, jjvkArrayOfJSValue, - jjvkArrayOfDouble + jjvkArrayOfDouble, + jjvkArrayOfByte ); TJOB_JSValueKinds = set of TJOB_JSValueKind; @@ -64,7 +65,8 @@ const 'Method', 'Dictionary', 'ArrayOfJSValue', - 'ArrayOfDouble' + 'ArrayOfDouble', + 'ArrayOfByte' ); JOB_Undefined = Pointer(1); @@ -110,6 +112,7 @@ type function AsString: UTF8string; override; end; + IJSObject = interface; { TJOB_Object } @@ -217,6 +220,19 @@ type constructor Create(const TheValues: TDoubleDynArray); end; + { TJOB_ArrayOfDouble } + + { TJOB_ArrayOfByte } + + TJOB_ArrayOfByte = class(TJOB_ArrayBase) + public + Values: PByte; + Len : NativeUInt; + constructor Create(const TheValues: PByte; TheLen : NativeUInt); + constructor Create(const TheValues: TBytes); + end; + + IJSArray = interface; { IJSObject } @@ -694,6 +710,8 @@ type TJSTypedArray = class(TJSObject,IJSTypedArray) public + constructor Create(aBytes : PByte; aLen : NativeUInt); + constructor Create(aBytes : TBytes); class function Cast(const Intf: IJSObject): IJSTypedArray; overload; end; @@ -707,6 +725,7 @@ type TJSInt8Array = class(TJSTypedArray,IJSInt8Array) public + class function JSClassName: UnicodeString; override; class function Cast(const Intf: IJSObject): IJSInt8Array; overload; end; @@ -720,6 +739,7 @@ type TJSUint8Array = class(TJSTypedArray,IJSUint8Array) public + class function JSClassName: UnicodeString; override; class function Cast(const Intf: IJSObject): IJSUint8Array; overload; end; @@ -733,6 +753,7 @@ type TJSUint8ClampedArray = class(TJSTypedArray,IJSUint8ClampedArray) public + class function JSClassName: UnicodeString; override; class function Cast(const Intf: IJSObject): IJSUint8ClampedArray; overload; end; @@ -1405,14 +1426,24 @@ end; { TJSUint8ClampedArray } +class function TJSUint8ClampedArray.JSClassName: UnicodeString; +begin + Result:='Uint8ClampedArray'; +end; + class function TJSUint8ClampedArray.Cast(const Intf: IJSObject ): IJSUint8ClampedArray; begin - Result:=TJSUint8ClampedArray.Cast(Intf); + Result:=TJSUint8ClampedArray.JobCast(Intf); end; { TJSUInt8Array } +class function TJSUint8Array.JSClassName: UnicodeString; +begin + Result:='Uint8Array'; +end; + class function TJSUint8Array.Cast(const Intf: IJSObject): IJSUint8Array; begin Result:=TJSUInt8Array.Cast(Intf); @@ -1420,13 +1451,36 @@ end; { TJSInt8Array } +class function TJSInt8Array.JSClassName: UnicodeString; +begin + Result:='Int8Array'; +end; + class function TJSInt8Array.Cast(const Intf: IJSObject): IJSInt8Array; begin - Result:=TJSInt8Array.Cast(Intf); + Result:=TJSInt8Array.JobCast(Intf); end; { TJSTypedArray } +constructor TJSTypedArray.Create(aBytes: PByte; aLen: NativeUInt); + +var + Data : TJOB_JSValue; + +begin + Data:=TJOB_ArrayOfByte.Create(aBytes,aLen); + JobCreate([Data]); +end; + +constructor TJSTypedArray.Create(aBytes: TBytes); +var + Data : TJOB_JSValue; +begin + Data:=TJOB_ArrayOfByte.Create(aBytes); + JobCreate([Data]); +end; + class function TJSTypedArray.Cast(const Intf: IJSObject): IJSTypedArray; begin Result:=TJSTypedArray.Cast(Intf); @@ -2363,6 +2417,23 @@ begin Values:=TheValues; end; +{ TJOB_ArrayOfByte } + +constructor TJOB_ArrayOfByte.Create(const TheValues: PByte; TheLen: NativeUInt); +begin + inherited Create(jjvkArrayOfByte); + Writeln('A'); + Values:=TheValues; + Writeln('B'); + Len:=TheLen; + Writeln('C'); +end; + +constructor TJOB_ArrayOfByte.Create(const TheValues: TBytes); +begin + Create(PByte(TheValues),length(TheValues)) +end; + { TJSObject } function TJSObject.GetJSObjectID: TJOBObjectID; @@ -2713,6 +2784,18 @@ var PPointer(p)^:=@TJOB_ArrayOfDouble(aValue).Values[0]; inc(p,sizeof(Pointer)); end; + jjvkArrayOfByte: + begin + Prep(1+SizeOf(NativeInt)+SizeOf(Pointer),JOBArgArrayOfByte); + i:=TJOB_ArrayOfByte(aValue).Len; + PNativeInt(p)^:=i; + inc(p,SizeOf(NativeInt)); + if i=0 then + PPointer(p)^:=nil + else + PPointer(p)^:=@TJOB_ArrayOfByte(aValue).Values[0]; + inc(p,sizeof(Pointer)); + end; end; end; @@ -3350,7 +3433,9 @@ begin end; initialization + Writeln('x'); JSObject:=TJSObject.JOBCreateGlobal('Object') as IJSObject; + Writeln('y'); JSDate:=TJSDate.JOBCreateGlobal('Date') as IJSDate; end.