* First version of webassembly interface

This commit is contained in:
michael 2019-09-22 11:20:41 +00:00
parent ae4df85df3
commit abd08459c4

View File

@ -0,0 +1,105 @@
unit webassembly;
{$mode objfpc}
{$modeswitch externalclass}
interface
uses
js, Web;
Type
{ TJSModulesArray }
TJSModulesExports = Class external name 'anon' (TJSObject)
private
function GetFun(aName : String): TJSFunction; external name '[]';
public
Property functions [aName : String] : TJSFunction read GetFun; default;
end;
TJSModulesImports = TJSModulesExports;
TJSWebAssemblyModule = class external name 'WebAssembly.Module' (TJSObject)
constructor new(buffer : TJSArrayBuffer);
Class Function customSections(module: TJSWebAssemblyModule; const SectionName : string) : TJSArrayBuffer;
Class Function exports_(module: TJSWebAssemblyModule) : TJSModulesExports; external name 'exports';
Class Function imports(module: TJSWebAssemblyModule) : TJSModulesImports; external name 'exports';
end;
{ TJSWebAssemblyInstance }
TJSWebAssemblyInstance = class external name 'WebAssembly.Instance' (TJSObject)
private
Fexports: TJSModulesExports; external name 'exports';
public
constructor new(module : TJSWebAssemblyModule; ImportObject : TJSOBject);
constructor new(module : TJSWebAssemblyModule);
Property exports_ : TJSModulesExports Read Fexports;
end;
{ TJSInstantiated }
// Result returned when calling instantiate with buffer
{ TJSInstantiateResult }
TJSInstantiateResult = Class external name 'anon' (TJSObject)
private
FInstance: TJSWebAssemblyInstance; external name 'instance';
FModule: TJSWebAssemblyModule; external name 'module';
public
Property Module : TJSWebAssemblyModule Read FModule;
Property Instance : TJSWebAssemblyInstance Read Finstance;
end;
TJSWebAssembly = class external name 'WebAssembly' (TJSObject)
Class Function instantiate(Buffer : TJSArrayBuffer; ImportObject : TJSObject) : TJSPromise; overload;
Class Function instantiate(Buffer : TJSArrayBuffer) : TJSPromise; overload;
Class Function instantiate(Buffer : TJSWebAssemblyModule; ImportObject : TJSObject) : TJSPromise; overload;
Class Function instantiate(Buffer : TJSWebAssemblyModule) : TJSPromise; overload;
Class Function compile(Buffer : TJSArrayBuffer): TJSPromise;
Class Function compileStreaming(source : TJSResponse): TJSPromise;
Class Function instantiateStreaming(source : TJSResponse; ImportObject : TJSObject) : TJSPromise; overload;
Class Function instantiateStreaming(source : TJSResponse) : TJSPromise; overload;
Class Function validate(Buffer : TJSArrayBuffer): Boolean;
end;
{ TJSWebAssemblyTable }
TJSWebAssemblyTableDescriptor = record
element : string;
initial,
maximum : integer;
end;
TJSWebAssemblyTable = class external name 'WebAssembly.Table' (TJSObject)
private
FLength: NativeInt;
Public
constructor new (tabledescriptor : TJSWebAssemblyTableDescriptor);
constructor new (tabledescriptor : TJSObject);
Property length: NativeInt Read FLength;
end;
{ TJSWebAssemblyMemory }
TJSWebAssemblyMemoryDescriptor = record
initial,
maximum : integer;
end;
TJSWebAssemblyMemory = class external name 'WebAssembly.Memory' (TJSObject)
private
FBuffer: TJSArrayBuffer; external name 'buffer';
FLength: NativeInt; external name 'length';
Public
constructor new (memorydescriptor : TJSWebAssemblyMemoryDescriptor);
constructor new (memorydescriptor : TJSObject);
Property buffer : TJSArrayBuffer Read FBuffer;
Property length: NativeInt Read FLength;
end;
implementation
end.