webassembly.pas 3.6 KB

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