mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-08-24 13:59:04 +02:00
GetMemInfo calls
This commit is contained in:
parent
d83b17f4fd
commit
368b3ecf71
@ -119,6 +119,7 @@ type
|
|||||||
function GetTotalIOVsLen(iovs: TMemBufferArray): Integer;
|
function GetTotalIOVsLen(iovs: TMemBufferArray): Integer;
|
||||||
function GetIOVsAsBytes(iovs, iovsLen: NativeInt): TJSUInt8array;
|
function GetIOVsAsBytes(iovs, iovsLen: NativeInt): TJSUInt8array;
|
||||||
function GetMemory: TJSWebassemblyMemory;
|
function GetMemory: TJSWebassemblyMemory;
|
||||||
|
function GetUTF8ByteLength(const AString: String): Integer;
|
||||||
procedure SetArguments(AValue: TStrings);
|
procedure SetArguments(AValue: TStrings);
|
||||||
procedure SetEnvironment(AValue: TStrings);
|
procedure SetEnvironment(AValue: TStrings);
|
||||||
procedure SetInstance(AValue: TJSWebAssemblyInstance);
|
procedure SetInstance(AValue: TJSWebAssemblyInstance);
|
||||||
@ -133,6 +134,8 @@ type
|
|||||||
Procedure DoLog(Msg : String);
|
Procedure DoLog(Msg : String);
|
||||||
Procedure DoLog(Fmt : String; Args : array of const);
|
Procedure DoLog(Fmt : String; Args : array of const);
|
||||||
|
|
||||||
|
class function GetBigInt64(View: TJSDataView; byteOffset: NativeInt; littleEndian: Boolean): NativeInt;
|
||||||
|
class function GetBigUint64(View: TJSDataView; byteOffset: NativeInt; littleEndian: Boolean): NativeUInt;
|
||||||
class procedure setBigUint64(View: TJSDataView; byteOffset, value: NativeInt; littleEndian: Boolean);
|
class procedure setBigUint64(View: TJSDataView; byteOffset, value: NativeInt; littleEndian: Boolean);
|
||||||
class procedure setBigInt64(View: TJSDataView; byteOffset, value: NativeInt; littleEndian: Boolean);
|
class procedure setBigInt64(View: TJSDataView; byteOffset, value: NativeInt; littleEndian: Boolean);
|
||||||
procedure DoConsoleWrite(IsStdErr: Boolean; aBytes: TJSUint8Array); virtual;
|
procedure DoConsoleWrite(IsStdErr: Boolean; aBytes: TJSUint8Array); virtual;
|
||||||
@ -198,8 +201,9 @@ type
|
|||||||
Destructor Destroy; override;
|
Destructor Destroy; override;
|
||||||
Function GetUTF8StringFromMem(aLoc, aLen : Longint) : String;
|
Function GetUTF8StringFromMem(aLoc, aLen : Longint) : String;
|
||||||
// Write string as UTF8 string in memory at aLoc, with max aLen bytes.
|
// Write string as UTF8 string in memory at aLoc, with max aLen bytes.
|
||||||
// Return number of bytes written, or -1 if not enough room.
|
// Return number of bytes written, or -NeededLen if not enough room.
|
||||||
function SetUTF8StringInMem(aLoc: TWasmMemoryLocation; aLen: Longint; AString: String): Integer;
|
function SetUTF8StringInMem(aLoc: TWasmMemoryLocation; aLen: Longint; AString: String): Integer;
|
||||||
|
function SetUTF8StringInMem(aLoc: TWasmMemoryLocation; aLen: Longint; AStringBuf: TJSUint8Array): Integer;
|
||||||
function SetMemInfoInt8(aLoc : TWasmMemoryLocation; aValue : ShortInt) : TWasmMemoryLocation;
|
function SetMemInfoInt8(aLoc : TWasmMemoryLocation; aValue : ShortInt) : TWasmMemoryLocation;
|
||||||
function SetMemInfoInt16(aLoc : TWasmMemoryLocation; aValue : SmallInt) : TWasmMemoryLocation;
|
function SetMemInfoInt16(aLoc : TWasmMemoryLocation; aValue : SmallInt) : TWasmMemoryLocation;
|
||||||
function SetMemInfoInt32(aLoc : TWasmMemoryLocation; aValue : Longint) : TWasmMemoryLocation;
|
function SetMemInfoInt32(aLoc : TWasmMemoryLocation; aValue : Longint) : TWasmMemoryLocation;
|
||||||
@ -208,6 +212,15 @@ type
|
|||||||
function SetMemInfoUInt16(aLoc : TWasmMemoryLocation; aValue : Word) : TWasmMemoryLocation;
|
function SetMemInfoUInt16(aLoc : TWasmMemoryLocation; aValue : Word) : TWasmMemoryLocation;
|
||||||
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;
|
||||||
|
// Read values
|
||||||
|
function GetMemInfoInt8(aLoc : TWasmMemoryLocation) : ShortInt;
|
||||||
|
function GetMemInfoInt16(aLoc : TWasmMemoryLocation): SmallInt;
|
||||||
|
function GetMemInfoInt32(aLoc : TWasmMemoryLocation): Longint;
|
||||||
|
function GetMemInfoInt64(aLoc : TWasmMemoryLocation): NativeInt;
|
||||||
|
function GetMemInfoUInt8(aLoc : TWasmMemoryLocation): Byte;
|
||||||
|
function GetMemInfoUInt16(aLoc : TWasmMemoryLocation): Word;
|
||||||
|
function GetMemInfoUInt32(aLoc : TWasmMemoryLocation): Cardinal;
|
||||||
|
function GetMemInfoUInt64(aLoc : TWasmMemoryLocation): NativeUint;
|
||||||
// Add imports
|
// Add imports
|
||||||
Procedure AddImports(aObject: TJSObject);
|
Procedure AddImports(aObject: TJSObject);
|
||||||
procedure SetExports(aExports : TWasiExports);
|
procedure SetExports(aExports : TWasiExports);
|
||||||
@ -1006,6 +1019,46 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
class function TPas2JSWASIEnvironment.GetBigUint64(View: TJSDataView;
|
||||||
|
byteOffset: NativeInt; littleEndian: Boolean) : NativeUInt ;
|
||||||
|
|
||||||
|
Var
|
||||||
|
LowWord,HighWord : Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if LittleEndian then
|
||||||
|
begin
|
||||||
|
lowWord:=view.getUint32(ByteOffset+0, littleEndian);
|
||||||
|
highWord:=view.getUint32(ByteOffset+4, littleEndian);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
lowWord:=view.getUint32(ByteOffset+4, littleEndian);
|
||||||
|
highWord:=view.getUint32(ByteOffset+0, littleEndian);
|
||||||
|
end;
|
||||||
|
Result:=LowWord+(HighWord shl 32);
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TPas2JSWASIEnvironment.GetBigInt64(View: TJSDataView; byteOffset : NativeInt; littleEndian: Boolean) : NativeInt ;
|
||||||
|
|
||||||
|
Var
|
||||||
|
LowWord,HighWord : Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if LittleEndian then
|
||||||
|
begin
|
||||||
|
lowWord:=view.getUint32(ByteOffset+0, littleEndian);
|
||||||
|
highWord:=view.getUint32(ByteOffset+4, littleEndian);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
lowWord:=view.getUint32(ByteOffset+4, littleEndian);
|
||||||
|
highWord:=view.getUint32(ByteOffset+0, littleEndian);
|
||||||
|
end;
|
||||||
|
Result:=LowWord+(HighWord shl 32);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
class procedure TPas2JSWASIEnvironment.setBigInt64(View: TJSDataView;
|
class procedure TPas2JSWASIEnvironment.setBigInt64(View: TJSDataView;
|
||||||
byteOffset, value: NativeInt; littleEndian: Boolean);
|
byteOffset, value: NativeInt; littleEndian: Boolean);
|
||||||
|
|
||||||
@ -1298,8 +1351,9 @@ procedure TPas2JSWASIEnvironment.DoConsoleWrite(IsStdErr: Boolean; aBytes: TJSUi
|
|||||||
Function TryConvert : string;
|
Function TryConvert : string;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
Result:='';
|
||||||
asm
|
asm
|
||||||
S=String.fromCharCode.apply(null, aBytes);
|
Result=String.fromCharCode.apply(null, aBytes);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2203,6 +2257,16 @@ begin
|
|||||||
Result:=UTF8TextDecoder.Decode(getModuleMemoryDataView.buffer.slice(aLoc,aLoc+alen));
|
Result:=UTF8TextDecoder.Decode(getModuleMemoryDataView.buffer.slice(aLoc,aLoc+alen));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.GetUTF8ByteLength(const AString: String) : Integer;
|
||||||
|
|
||||||
|
var
|
||||||
|
Arr : TJSUint8Array;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Arr:=UTF8TextEncoder.Encode(AString);
|
||||||
|
Result:=Arr.byteLength;
|
||||||
|
end;
|
||||||
|
|
||||||
function TPas2JSWASIEnvironment.SetUTF8StringInMem(aLoc: TWasmMemoryLocation; aLen: Longint; AString: String) : Integer;
|
function TPas2JSWASIEnvironment.SetUTF8StringInMem(aLoc: TWasmMemoryLocation; aLen: Longint; AString: String) : Integer;
|
||||||
|
|
||||||
var
|
var
|
||||||
@ -2211,7 +2275,7 @@ var
|
|||||||
begin
|
begin
|
||||||
Arr:=UTF8TextEncoder.Encode(AString);
|
Arr:=UTF8TextEncoder.Encode(AString);
|
||||||
if (Arr.byteLength>aLen) then
|
if (Arr.byteLength>aLen) then
|
||||||
Result:=-1
|
Result:=-Arr.byteLength
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
Arr:=TJSUint8Array.New(getModuleMemoryDataView.buffer,aLoc,aLen);
|
Arr:=TJSUint8Array.New(getModuleMemoryDataView.buffer,aLoc,aLen);
|
||||||
@ -2219,6 +2283,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.SetUTF8StringInMem(aLoc: TWasmMemoryLocation; aLen: Longint; AStringBuf: TJSUint8Array): Integer;
|
||||||
|
|
||||||
|
var
|
||||||
|
Arr : TJSUint8Array;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Arr:=TJSUint8Array.New(getModuleMemoryDataView.buffer,aLoc,aLen);
|
||||||
|
Arr._set(aStringBuf);
|
||||||
|
Result:=aStringBuf.byteLength;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
function TPas2JSWASIEnvironment.SetMemInfoInt8(aLoc: TWasmMemoryLocation; aValue: ShortInt
|
function TPas2JSWASIEnvironment.SetMemInfoInt8(aLoc: TWasmMemoryLocation; aValue: ShortInt
|
||||||
): TWasmMemoryLocation;
|
): TWasmMemoryLocation;
|
||||||
@ -2312,6 +2387,82 @@ begin
|
|||||||
Result:=aLoc+SizeUint64;
|
Result:=aLoc+SizeUint64;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.GetMemInfoInt8(aLoc: TWasmMemoryLocation): ShortInt;
|
||||||
|
|
||||||
|
Var
|
||||||
|
View : TJSDataView;
|
||||||
|
|
||||||
|
begin
|
||||||
|
view:=getModuleMemoryDataView();
|
||||||
|
Result:=view.getint8(aLoc);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.GetMemInfoInt16(aLoc: TWasmMemoryLocation): SmallInt;
|
||||||
|
|
||||||
|
Var
|
||||||
|
View : TJSDataView;
|
||||||
|
|
||||||
|
begin
|
||||||
|
view:=getModuleMemoryDataView();
|
||||||
|
Result:=view.getint16(aLoc,IsLittleEndian);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.GetMemInfoInt32(aLoc: TWasmMemoryLocation): Longint;
|
||||||
|
Var
|
||||||
|
View : TJSDataView;
|
||||||
|
|
||||||
|
begin
|
||||||
|
view:=getModuleMemoryDataView();
|
||||||
|
Result:=view.getint32(aLoc,IsLittleEndian);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.GetMemInfoInt64(aLoc: TWasmMemoryLocation): NativeInt;
|
||||||
|
|
||||||
|
Var
|
||||||
|
View : TJSDataView;
|
||||||
|
|
||||||
|
begin
|
||||||
|
view:=getModuleMemoryDataView();
|
||||||
|
Result:=GetBigUint64(View,aLoc,IsLittleEndian);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.GetMemInfoUInt8(aLoc: TWasmMemoryLocation): Byte;
|
||||||
|
|
||||||
|
Var
|
||||||
|
View : TJSDataView;
|
||||||
|
|
||||||
|
begin
|
||||||
|
view:=getModuleMemoryDataView();
|
||||||
|
Result:=view.getUint8(aLoc);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.GetMemInfoUInt16(aLoc: TWasmMemoryLocation): Word;
|
||||||
|
Var
|
||||||
|
View : TJSDataView;
|
||||||
|
|
||||||
|
begin
|
||||||
|
view:=getModuleMemoryDataView();
|
||||||
|
Result:=view.getUint16(aLoc,IsLittleEndian);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.GetMemInfoUInt32(aLoc: TWasmMemoryLocation): Cardinal;
|
||||||
|
Var
|
||||||
|
View : TJSDataView;
|
||||||
|
|
||||||
|
begin
|
||||||
|
view:=getModuleMemoryDataView();
|
||||||
|
Result:=view.getUint32(aLoc,IsLittleEndian);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TPas2JSWASIEnvironment.GetMemInfoUInt64(aLoc: TWasmMemoryLocation): NativeUint;
|
||||||
|
Var
|
||||||
|
View : TJSDataView;
|
||||||
|
|
||||||
|
begin
|
||||||
|
view:=getModuleMemoryDataView();
|
||||||
|
Result:=GetBigInt64(View,aLoc,IsLittleEndian);
|
||||||
|
end;
|
||||||
|
|
||||||
function TPas2JSWASIEnvironment.PreLoadFiles(aFiles: array of string): TPreLoadFilesResult;
|
function TPas2JSWASIEnvironment.PreLoadFiles(aFiles: array of string): TPreLoadFilesResult;
|
||||||
|
|
||||||
var
|
var
|
||||||
|
Loading…
Reference in New Issue
Block a user