webassembly.pas 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. unit webassembly;
  2. {$mode objfpc}
  3. {$modeswitch externalclass}
  4. interface
  5. uses
  6. js, Web;
  7. Type
  8. { TJSModulesArray }
  9. TJSModulesExports = Class external name 'anon' (TJSObject)
  10. private
  11. function GetFun(aName : String): TJSFunction; external name '[]';
  12. public
  13. Property functions [aName : String] : TJSFunction read GetFun; default;
  14. end;
  15. TJSModulesImports = TJSModulesExports;
  16. TJSWebAssemblyModule = class external name 'WebAssembly.Module' (TJSObject)
  17. constructor new(buffer : TJSArrayBuffer);
  18. Class Function customSections(module: TJSWebAssemblyModule; const SectionName : string) : TJSArrayBuffer;
  19. Class Function exports_(module: TJSWebAssemblyModule) : TJSModulesExports; external name 'exports';
  20. Class Function imports(module: TJSWebAssemblyModule) : TJSModulesImports; external name 'exports';
  21. end;
  22. { TJSWebAssemblyInstance }
  23. TJSWebAssemblyInstance = class external name 'WebAssembly.Instance' (TJSObject)
  24. private
  25. Fexports: TJSModulesExports; external name 'exports';
  26. public
  27. constructor new(module : TJSWebAssemblyModule; ImportObject : TJSOBject);
  28. constructor new(module : TJSWebAssemblyModule);
  29. Property exports_ : TJSModulesExports Read Fexports;
  30. end;
  31. { TJSInstantiated }
  32. // Result returned when calling instantiate with buffer
  33. { TJSInstantiateResult }
  34. TJSInstantiateResult = Class external name 'anon' (TJSObject)
  35. private
  36. FInstance: TJSWebAssemblyInstance; external name 'instance';
  37. FModule: TJSWebAssemblyModule; external name 'module';
  38. public
  39. Property Module : TJSWebAssemblyModule Read FModule;
  40. Property Instance : TJSWebAssemblyInstance Read Finstance;
  41. end;
  42. TJSWebAssembly = class external name 'WebAssembly' (TJSObject)
  43. Class Function instantiate(Buffer : TJSArrayBuffer; ImportObject : TJSObject) : TJSPromise; overload;
  44. Class Function instantiate(Buffer : TJSArrayBuffer) : TJSPromise; overload;
  45. Class Function instantiate(Buffer : TJSWebAssemblyModule; ImportObject : TJSObject) : TJSPromise; overload;
  46. Class Function instantiate(Buffer : TJSWebAssemblyModule) : TJSPromise; overload;
  47. Class Function compile(Buffer : TJSArrayBuffer): TJSPromise;
  48. Class Function compileStreaming(source : TJSResponse): TJSPromise;
  49. Class Function instantiateStreaming(source : TJSResponse; ImportObject : TJSObject) : TJSPromise; overload;
  50. Class Function instantiateStreaming(source : TJSResponse) : TJSPromise; overload;
  51. Class Function validate(Buffer : TJSArrayBuffer): Boolean;
  52. end;
  53. { TJSWebAssemblyTable }
  54. TJSWebAssemblyTableDescriptor = record
  55. element : string;
  56. initial,
  57. maximum : integer;
  58. end;
  59. TJSWebAssemblyTable = class external name 'WebAssembly.Table' (TJSObject)
  60. private
  61. FLength: NativeInt;
  62. Public
  63. constructor new (tabledescriptor : TJSWebAssemblyTableDescriptor);
  64. constructor new (tabledescriptor : TJSObject);
  65. Property length: NativeInt Read FLength;
  66. end;
  67. { TJSWebAssemblyMemory }
  68. TJSWebAssemblyMemoryDescriptor = record
  69. initial,
  70. maximum : integer;
  71. end;
  72. TJSWebAssemblyMemory = class external name 'WebAssembly.Memory' (TJSObject)
  73. private
  74. FBuffer: TJSArrayBuffer; external name 'buffer';
  75. FLength: NativeInt; external name 'length';
  76. Public
  77. constructor new (memorydescriptor : TJSWebAssemblyMemoryDescriptor);
  78. constructor new (memorydescriptor : TJSObject);
  79. Property buffer : TJSArrayBuffer Read FBuffer;
  80. Property length: NativeInt Read FLength;
  81. end;
  82. implementation
  83. end.