Преглед изворни кода

* Implement TJSArrayBuffer

Michaël Van Canneyt пре 1 година
родитељ
комит
0c745fb257
1 измењених фајлова са 88 додато и 8 уклоњено
  1. 88 8
      packages/wasm-job/src/job.js.pas

+ 88 - 8
packages/wasm-job/src/job.js.pas

@@ -710,30 +710,55 @@ type
 
   IJSArrayBuffer = interface(IJSObject)
     ['{A1612EED-4F05-46C0-90BE-ACD511B15E89}']
+    function Slice : IJSArrayBuffer;
+    function Slice (aStart : NativeInt): IJSArrayBuffer;
+    function Slice (aStart,aEndExclusive : NativeInt): IJSArrayBuffer;
+    function _getByteLength: Nativeint;
+    function _getDetached: Boolean;
+    function _getMaxByteLength: Nativeint;
+    function _getResizable: Boolean;
+    property byteLength : Nativeint Read _getByteLength;
+    property maxByteLength : Nativeint Read _getMaxByteLength;
+    property detached : Boolean Read _getDetached;
+    property resizable : Boolean Read _getResizable;
   end;
 
 
   { TJSArrayBuffer }
 
   TJSArrayBuffer = class(TJSObject,IJSArrayBuffer)
+  Protected
+    function _getByteLength: Nativeint;
+    function _getDetached: Boolean;
+    function _getMaxByteLength: Nativeint;
+    function _getResizable: Boolean;
   public
+    constructor create (aSize : integer);
+    class function GlobalMemory : TJSArrayBuffer;
+    function Slice : IJSArrayBuffer;
+    function Slice (aStart : NativeInt): IJSArrayBuffer;
+    function Slice (aStart,aEndExclusive : NativeInt): IJSArrayBuffer;
     class function Cast(const Intf: IJSObject): IJSArrayBuffer; overload;
+    class function JSClassName: UnicodeString; override;
+    property byteLength : Nativeint Read _getByteLength;
+    property maxByteLength : Nativeint Read _getMaxByteLength;
+    property detached : Boolean Read _getDetached;
+    property resizable : Boolean Read _getResizable;
+
   end;
 
   { IJSArrayBufferView }
-  
   IJSArrayBufferView = interface(IJSObject)
     ['{A1612EED-4F05-46C0-90BE-ACD511B1598E}']
   end;
-  
+
   { TJSArrayBufferView }
-  
+
   TJSArrayBufferView = class(TJSObject,IJSArrayBufferView)
   public
     class function Cast(const Intf: IJSObject): IJSArrayBufferView; overload;
   end;
 
-
   { IJSTypedArray }
 
   IJSTypedArray = interface(IJSObject)
@@ -761,6 +786,7 @@ type
   public
     constructor Create(aBytes : PByte; aLen : NativeUInt);
     constructor Create(aBytes : TBytes);
+    constructor create(aArray : IJSArrayBuffer);
     class function Cast(const Intf: IJSObject): IJSTypedArray; overload;
     procedure set_(aArray : IJSTypedArray; TargetOffset : Integer);
     procedure set_(aArray : IJSTypedArray);
@@ -1834,6 +1860,11 @@ begin
   JobCreate(True,[Data]);
 end;
 
+constructor TJSTypedArray.create(aArray: IJSArrayBuffer);
+begin
+  JobCreate(True,[aArray]);
+end;
+
 class function TJSTypedArray.Cast(const Intf: IJSObject): IJSTypedArray;
 begin
   Result:=TJSTypedArray.Cast(Intf);
@@ -1851,9 +1882,60 @@ end;
 
 { TJSArrayBuffer }
 
+function TJSArrayBuffer._getByteLength: Nativeint;
+begin
+  Result:=ReadJSPropertyInt64('byteLength');
+
+end;
+
+function TJSArrayBuffer._getDetached: Boolean;
+begin
+  Result:=ReadJSPropertyBoolean('detached');
+end;
+
+function TJSArrayBuffer._getMaxByteLength: Nativeint;
+begin
+  Result:=ReadJSPropertyInt64('maxByteLength');
+end;
+
+function TJSArrayBuffer._getResizable: Boolean;
+begin
+  Result:=ReadJSPropertyBoolean('resizable');
+end;
+
+constructor TJSArrayBuffer.create(aSize: integer);
+begin
+  JobCreate(True,[aSize])
+end;
+
+class function TJSArrayBuffer.GlobalMemory: TJSArrayBuffer;
+begin
+  Result:=JOBCreateGlobal('InstanceBuffer');
+end;
+
+function TJSArrayBuffer.Slice: IJSArrayBuffer;
+begin
+  Result:=InvokeJSObjectResult('slice',[],TJSArrayBuffer) as IJSArrayBuffer;
+end;
+
+function TJSArrayBuffer.Slice(aStart: NativeInt): IJSArrayBuffer;
+begin
+  Result:=InvokeJSObjectResult('slice',[aStart],TJSArrayBuffer) as IJSArrayBuffer;
+end;
+
+function TJSArrayBuffer.Slice(aStart, aEndExclusive: NativeInt): IJSArrayBuffer;
+begin
+  Result:=InvokeJSObjectResult('slice',[aStart,aEndExclusive],TJSArrayBuffer) as IJSArrayBuffer;
+end;
+
 class function TJSArrayBuffer.Cast(const Intf: IJSObject): IJSArrayBuffer;
 begin
-  Result:=TJSArrayBuffer.Cast(Intf);
+  Result:=TJSArrayBuffer.JOBCast(Intf);
+end;
+
+class function TJSArrayBuffer.JSClassName: UnicodeString;
+begin
+  Result:='ArrayBuffer';
 end;
 
 { TJSArrayBufferView }
@@ -1863,9 +1945,6 @@ begin
   Result:=TJSArrayBufferView.JOBCast(Intf);
 end;
 
-
-
-
 { TJSArray }
 
 function TJSArray._GetElements(Index: NativeInt): TJOB_JSValue;
@@ -3983,6 +4062,7 @@ begin
   Result:=InvokeJSUnicodeStringResult('toLocaleDateString',[]);
 end;
 
+
 exports JOBCallback;
 
 initialization