Browse Source

* Some fixes to compile with pas2js

Michaël Van Canneyt 1 year ago
parent
commit
32137ac160

+ 2 - 1
packages/fcl-passrc/src/passrcutil.pp

@@ -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:='.';

+ 37 - 9
packages/fcl-passrc/src/pscanner.pp

@@ -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

+ 2 - 0
packages/fcl-passrc/tests/tcpassrcutil.pas

@@ -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);