Browse Source

* Introduce instanceexports at the extension level

Michael Van Canneyt 1 year ago
parent
commit
fa69bdea7d
1 changed files with 18 additions and 1 deletions
  1. 18 1
      packages/wasi/src/wasienv.pas

+ 18 - 1
packages/wasi/src/wasienv.pas

@@ -207,7 +207,8 @@ type
     function SetMemInfoUInt32(aLoc : TWasmMemoryLocation; aValue : Cardinal) : TWasmMemoryLocation;
     function SetMemInfoUInt64(aLoc : TWasmMemoryLocation; aValue : NativeUint) : TWasmMemoryLocation;
     // Add imports
-    Procedure AddImports(aObject: TJSObject); 
+    Procedure AddImports(aObject: TJSObject);
+    procedure SetExports(aExports : TWasiExports);
     Property ImportObject : TJSObject Read GetImportObject;
     Property IsLittleEndian : Boolean Read FIsLittleEndian Write FIsLittleEndian;
     // Filesystem
@@ -235,6 +236,7 @@ type
   TImportExtension = class (TObject)
   Private
     FEnv : TPas2JSWASIEnvironment;
+    FInstanceExports: TWASIExports;
   Protected
     function getModuleMemoryDataView : TJSDataView;  
   Public
@@ -243,6 +245,7 @@ type
     Procedure FillImportObject(aObject : TJSObject); virtual; abstract;
     Function ImportName : String; virtual; abstract;
     Property Env : TPas2JSWASIEnvironment Read FEnv;
+    Property InstanceExports : TWASIExports Read FInstanceExports Write FInstanceExports;
   end;
 
   TRunWebassemblyProc = reference to Procedure(aExports : TWASIExports);
@@ -479,6 +482,7 @@ begin
   FExported:=aDescr.Exported;
   WasiEnvironment.Instance:=aDescr.Instance;
   WasiEnvironment.SetMemory(aDescr.Memory);
+  WasiEnvironment.SetExports(FExported);
   // We do this here, so in the event, the FPreparedStartDescriptor Is ready.
   DoAfterInstantiate;
 end;
@@ -761,6 +765,19 @@ begin
       end;
 end;
 
+procedure TPas2JSWASIEnvironment.SetExports(aExports: TWasiExports);
+Var
+  Ext : TImportExtension;
+  I : Integer;
+begin
+  if Assigned(FImportExtensions) then
+    For I:=0 to FImportExtensions.Count-1 do
+      begin
+      Ext:=TImportExtension(FImportExtensions[i]);
+      Ext.InstanceExports:=aExports;
+      end;
+end;
+
 procedure TPas2JSWASIEnvironment.AddExtension(aExtension : TImportExtension); 
 begin
   if Not Assigned(FImportExtensions) then