* Some fixes to compile with pas2js

This commit is contained in:
Michaël Van Canneyt 2023-11-17 17:05:14 +01:00
parent a7016a9ea0
commit 32137ac160
3 changed files with 41 additions and 10 deletions

View File

@ -141,7 +141,8 @@ begin
TStreamResolver(Fresolver).AddStream(FileName,Stream); TStreamResolver(Fresolver).AddStream(FileName,Stream);
end end
else else
FResolver:=TFileResolver.Create; {$IFNDEF PAS2JS}FResolver:=TFileResolver.Create{$ENDIF}
;
D:=ExtractFilePath(FileName); D:=ExtractFilePath(FileName);
If (D='') then If (D='') then
D:='.'; D:='.';

View File

@ -507,9 +507,7 @@ type
{$ENDIF} {$ENDIF}
FPos : Integer; FPos : Integer;
public public
{$ifdef HasStreams}
Procedure InitFromStream(AStream : TStream); Procedure InitFromStream(AStream : TStream);
{$endif}
Procedure InitFromString(const s: TPasScannerString); Procedure InitFromString(const s: TPasScannerString);
function IsEOF: Boolean; override; function IsEOF: Boolean; override;
function ReadLine: TPasScannerString; override; function ReadLine: TPasScannerString; override;
@ -594,7 +592,6 @@ type
end; end;
{$ENDIF} {$ENDIF}
{$ifdef fpc}
{ TStreamResolver } { TStreamResolver }
TStreamResolver = class(TBaseFileResolver) TStreamResolver = class(TBaseFileResolver)
@ -617,7 +614,7 @@ type
Property OwnsStreams : Boolean Read FOwnsStreams write SetOwnsStreams; Property OwnsStreams : Boolean Read FOwnsStreams write SetOwnsStreams;
Property Streams: TStringList read FStreams; Property Streams: TStringList read FStreams;
end; end;
{$endif}
const const
CondDirectiveBool: array[boolean] of TPasScannerString = ( CondDirectiveBool: array[boolean] of TPasScannerString = (
@ -2832,20 +2829,47 @@ end;
{ TStreamLineReader } { TStreamLineReader }
{$ifdef HasStreams}
Procedure TStreamLineReader.InitFromStream(AStream : TStream); Procedure TStreamLineReader.InitFromStream(AStream : TStream);
{$IFDEF PAS2JS}
function BufferToString(aBuffer: TBytes): String;
var
a : TJSUint16Array;
i,len: Integer;
begin
Result:=''; // Silence warning
len:=Length(aBuffer);
a:=TJSUint16Array.New(Len);
for I:=0 to Len-1 do
a[i]:=aBuffer[i];
if a<>nil then
Result:=String(TJSFunction(@TJSString.fromCharCode).apply(nil,TJSValueDynArray(JSValue(a))));
end;
{$ENDIF}
Var Var
B : TBytes; B : TBytes;
begin begin
SetLength(B{%H-},AStream.Size); SetLength(B{%H-},AStream.Size);
if Length(B)>0 then if Length(B)>0 then
{$ifdef pas2js}
AStream.Read(B,length(B));
{$ELSE}
AStream.Read(B[0],length(B)); AStream.Read(B[0],length(B));
{$ENDIF}
{$IFNDEF PAS2JS}
FContent:=TEncoding.Default.GetAnsiString(B); FContent:=TEncoding.Default.GetAnsiString(B);
{$ELSE}
FContent:=BufferToString(B);
{$ENDIF}
FPos:=0; FPos:=0;
end; end;
{$endif}
procedure TStreamLineReader.InitFromString(const s: TPasScannerString); procedure TStreamLineReader.InitFromString(const s: TPasScannerString);
begin begin
@ -3184,7 +3208,6 @@ begin
end; end;
{$ENDIF} {$ENDIF}
{$ifdef fpc}
{ TStreamResolver } { TStreamResolver }
procedure TStreamResolver.SetOwnsStreams(AValue: Boolean); procedure TStreamResolver.SetOwnsStreams(AValue: Boolean);
@ -3224,11 +3247,16 @@ procedure TStreamResolver.Clear;
Var Var
I : integer; I : integer;
Obj : TObject;
begin begin
if OwnsStreams then if OwnsStreams then
begin begin
For I:=0 to FStreams.Count-1 do For I:=0 to FStreams.Count-1 do
Fstreams.Objects[i].Free; begin
Obj:=Fstreams.Objects[i];
Fstreams.Objects[i]:=nil;
Obj.Free;
end;
end; end;
FStreams.Clear; FStreams.Clear;
end; end;
@ -3295,7 +3323,7 @@ function TStreamResolver.FindIncludeFile(const AName: String): TLineReader;
begin begin
Result:=FindStreamReader(AName,True); Result:=FindStreamReader(AName,True);
end; end;
{$endif}
{ --------------------------------------------------------------------- { ---------------------------------------------------------------------
TPascalScanner TPascalScanner

View File

@ -398,7 +398,9 @@ procedure TPasSrcUtilTest.EndSource;
begin begin
AddLine(''); AddLine('');
AddLine('end.'); AddLine('end.');
{$IFNDEF PAS2JS}
FSrc.SaveToStream(FStream); FSrc.SaveToStream(FStream);
{$ENDIF}
FStream.Position:=0; FStream.Position:=0;
{$IFNDEF NOCONSOLE} {$IFNDEF NOCONSOLE}
Writeln('// Test name : ',Self.TestName); Writeln('// Test name : ',Self.TestName);