* Introduce instanceexports at the extension level

This commit is contained in:
Michael Van Canneyt 2024-06-14 17:37:23 +02:00
parent dee43db2a7
commit fa69bdea7d

View File

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