|
@@ -12,6 +12,21 @@
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
**********************************************************************}
|
|
|
+const
|
|
|
+{$if defined(CPUWASM)}
|
|
|
+ { Since WebAssembly is a Harvard architecture, the code is invisible in linear
|
|
|
+ memory and the data section starts at address 0. Resources reside after the
|
|
|
+ initialized data section, just before the bss (uninitialized data) section,
|
|
|
+ therefore it's perfectly possible that their data exist on a relatively low
|
|
|
+ address (less than 64KB). So, for WebAssembly we check whether the pointer
|
|
|
+ resides in the first 4KB of linear memory, instead of the first 64KB. Note
|
|
|
+ that the first 4KB of linear memory in WebAssembly aren't used by Free
|
|
|
+ Pascal. }
|
|
|
+ MaxIntResource=4095;
|
|
|
+{$else}
|
|
|
+ MaxIntResource=65535;
|
|
|
+{$endif}
|
|
|
+
|
|
|
type
|
|
|
PResInfoNode = ^TResInfoNode;
|
|
|
TResInfoNode = packed record
|
|
@@ -100,19 +115,7 @@ var i : integer;
|
|
|
s : shortstring;
|
|
|
code : word;
|
|
|
begin
|
|
|
-{$if defined(CPUWASM)}
|
|
|
- { Since WebAssembly is a Harvard architecture, the code is invisible in linear
|
|
|
- memory and the data section starts at address 0. Resources reside after the
|
|
|
- initialized data section, just before the bss (uninitialized data) section,
|
|
|
- therefore it's perfectly possible that their data exist on a relatively low
|
|
|
- address (less than 64KB). So, for WebAssembly we check whether the pointer
|
|
|
- resides in the first 4KB of linear memory, instead of the first 64KB. Note
|
|
|
- that the first 4KB of linear memory in WebAssembly aren't used by Free
|
|
|
- Pascal. }
|
|
|
- InternalIsIntResource:=((PtrUInt(aStr) shr 12)=0);
|
|
|
-{$else}
|
|
|
- InternalIsIntResource:=((PtrUInt(aStr) shr 16)=0);
|
|
|
-{$endif}
|
|
|
+ InternalIsIntResource:=PtrUInt(aStr)<=MaxIntResource;
|
|
|
if InternalIsIntResource then aInt:=PtrUInt(aStr)
|
|
|
else
|
|
|
begin
|