Browse Source

* Dotted filenames for package pastojs

Michaël Van Canneyt 2 years ago
parent
commit
81c6474e9f
45 changed files with 345 additions and 27 deletions
  1. 3 0
      packages/pastojs/namespaced/=Pas2Js.Logger.pp
  2. 3 0
      packages/pastojs/namespaced/Pas2Js.Compiler.Base.pp
  3. 3 0
      packages/pastojs/namespaced/Pas2Js.Compiler.Config.pp
  4. 3 0
      packages/pastojs/namespaced/Pas2Js.Compiler.Files.pp
  5. 3 0
      packages/pastojs/namespaced/Pas2Js.Compiler.Lib.pp
  6. 3 0
      packages/pastojs/namespaced/Pas2Js.Compiler.Pcu.pp
  7. 3 0
      packages/pastojs/namespaced/Pas2Js.Compiler.PostProcess.pp
  8. 3 0
      packages/pastojs/namespaced/Pas2Js.Compiler.Transpile.pp
  9. 3 0
      packages/pastojs/namespaced/Pas2Js.Compiler.Transpiler.pp
  10. 3 0
      packages/pastojs/namespaced/Pas2Js.Filer.pp
  11. 3 0
      packages/pastojs/namespaced/Pas2Js.Files.Cache.pp
  12. 3 0
      packages/pastojs/namespaced/Pas2Js.Files.Fs.pp
  13. 3 0
      packages/pastojs/namespaced/Pas2Js.Files.Utils.pp
  14. 3 0
      packages/pastojs/namespaced/Pas2Js.Logger.pp
  15. 3 0
      packages/pastojs/namespaced/Pas2Js.Parser.pp
  16. 3 0
      packages/pastojs/namespaced/Pas2Js.Resources.Html.pp
  17. 3 0
      packages/pastojs/namespaced/Pas2Js.Resources.Js.pp
  18. 3 0
      packages/pastojs/namespaced/Pas2Js.Resources.Strings.pp
  19. 3 0
      packages/pastojs/namespaced/Pas2Js.Resources.pp
  20. 3 0
      packages/pastojs/namespaced/Pas2Js.SrcMap.pp
  21. 3 0
      packages/pastojs/namespaced/Pas2Js.UseAnalyzer.pp
  22. 3 0
      packages/pastojs/namespaced/Pas2Js.Utils.pp
  23. 22 0
      packages/pastojs/namespaces.lst
  24. 13 0
      packages/pastojs/src/fppas2js.pp
  25. 8 0
      packages/pastojs/src/fppjssrcmap.pp
  26. 29 11
      packages/pastojs/src/pas2jscompiler.pp
  27. 10 0
      packages/pastojs/src/pas2jscompilercfg.pp
  28. 11 0
      packages/pastojs/src/pas2jscompilerpp.pp
  29. 22 7
      packages/pastojs/src/pas2jsfilecache.pp
  30. 15 1
      packages/pastojs/src/pas2jsfiler.pp
  31. 20 1
      packages/pastojs/src/pas2jsfileutils.pp
  32. 2 2
      packages/pastojs/src/pas2jsfileutilsunix.inc
  33. 4 4
      packages/pastojs/src/pas2jsfileutilswin.inc
  34. 8 0
      packages/pastojs/src/pas2jsfs.pp
  35. 12 0
      packages/pastojs/src/pas2jsfscompiler.pp
  36. 7 0
      packages/pastojs/src/pas2jshtmlresources.pp
  37. 7 0
      packages/pastojs/src/pas2jsjsresources.pp
  38. 9 0
      packages/pastojs/src/pas2jslibcompiler.pp
  39. 19 0
      packages/pastojs/src/pas2jslogger.pp
  40. 12 0
      packages/pastojs/src/pas2jspcucompiler.pp
  41. 8 0
      packages/pastojs/src/pas2jspparser.pp
  42. 13 0
      packages/pastojs/src/pas2jsresources.pp
  43. 7 0
      packages/pastojs/src/pas2jsresstrfile.pp
  44. 9 0
      packages/pastojs/src/pas2jsuseanalyzer.pp
  45. 12 1
      packages/pastojs/src/pas2jsutils.pp

+ 3 - 0
packages/pastojs/namespaced/=Pas2Js.Logger.pp

@@ -0,0 +1,3 @@
+unit =Pas2Js.Logger;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jslogger.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Compiler.Base.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Compiler.Base;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jscompiler.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Compiler.Config.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Compiler.Config;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jscompilercfg.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Compiler.Files.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Compiler.Files;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsfscompiler.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Compiler.Lib.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Compiler.Lib;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jslibcompiler.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Compiler.Pcu.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Compiler.Pcu;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jspcucompiler.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Compiler.PostProcess.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Compiler.PostProcess;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jscompilerpp.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Compiler.Transpile.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Compiler.Transpile;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i fppas2js.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Compiler.Transpiler.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Compiler.Transpiler;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i fppas2js.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Filer.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Filer;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsfiler.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Files.Cache.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Files.Cache;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsfilecache.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Files.Fs.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Files.Fs;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsfs.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Files.Utils.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Files.Utils;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsfileutils.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Logger.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Logger;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jslogger.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Parser.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Parser;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jspparser.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Resources.Html.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Resources.Html;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jshtmlresources.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Resources.Js.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Resources.Js;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsjsresources.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Resources.Strings.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Resources.Strings;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsresstrfile.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Resources.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Resources;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsresources.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.SrcMap.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.SrcMap;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i fppjssrcmap.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.UseAnalyzer.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.UseAnalyzer;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsuseanalyzer.pp}

+ 3 - 0
packages/pastojs/namespaced/Pas2Js.Utils.pp

@@ -0,0 +1,3 @@
+unit Pas2Js.Utils;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i pas2jsutils.pp}

+ 22 - 0
packages/pastojs/namespaces.lst

@@ -0,0 +1,22 @@
+src/pas2jscompilercfg.pp=namespaced/Pas2Js.Compiler.Config.pp
+{s*:src/}=namespaced/
+{i+:src/}
+src/pas2jsutils.pp=namespaced/Pas2Js.Utils.pp
+src/pas2jsresources.pp=namespaced/Pas2Js.Resources.pp
+src/pas2jspcucompiler.pp=namespaced/Pas2Js.Compiler.Pcu.pp
+src/pas2jspparser.pp=namespaced/Pas2Js.Parser.pp
+src/pas2jsfscompiler.pp=namespaced/Pas2Js.Compiler.Files.pp
+src/pas2jsuseanalyzer.pp=namespaced/Pas2Js.UseAnalyzer.pp
+src/pas2jsjsresources.pp=namespaced/Pas2Js.Resources.Js.pp
+src/pas2jsresstrfile.pp=namespaced/Pas2Js.Resources.Strings.pp
+src/pas2jslibcompiler.pp=namespaced/Pas2Js.Compiler.Lib.pp
+src/pas2jsfileutils.pp=namespaced/Pas2Js.Files.Utils.pp
+src/pas2jscompilerpp.pp=namespaced/Pas2Js.Compiler.PostProcess.pp
+src/fppas2js.pp=namespaced/Pas2Js.Compiler.Transpiler.pp
+src/fppjssrcmap.pp=namespaced/Pas2Js.SrcMap.pp
+src/pas2jshtmlresources.pp=namespaced/Pas2Js.Resources.Html.pp
+src/pas2jsfs.pp=namespaced/Pas2Js.Files.Fs.pp
+src/pas2jsfilecache.pp=namespaced/Pas2Js.Files.Cache.pp
+src/pas2jsfiler.pp=namespaced/Pas2Js.Filer.pp
+src/pas2jslogger.pp=namespaced/Pas2Js.Logger.pp
+src/pas2jscompiler.pp=namespaced/Pas2Js.Compiler.Base.pp

+ 13 - 0
packages/pastojs/src/fppas2js.pp

@@ -453,7 +453,9 @@ ToDos:
 Debugging this unit: -d<x>
    VerbosePas2JS
 *)
+{$IFNDEF FPC_DOTTEDUNITS}
 unit FPPas2Js;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 {$inline on}
@@ -471,6 +473,16 @@ unit FPPas2Js;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  {$ifdef pas2js}
+  {$else}
+  Fcl.AVLTree,
+  {$endif}
+  System.Classes, System.SysUtils, System.Math, System.Contnrs,
+  Js.Base, Js.Tree, Js.Writer,
+  Pascal.Tree, Pascal.Scanner, Pascal.ResolveEval, Pascal.Resolver;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   {$ifdef pas2js}
   {$else}
@@ -479,6 +491,7 @@ uses
   Classes, SysUtils, math, contnrs,
   jsbase, jstree, jswriter,
   PasTree, PScanner, PasResolveEval, PasResolver;
+{$ENDIF FPC_DOTTEDUNITS}
 
 // message numbers
 const

+ 8 - 0
packages/pastojs/src/fppjssrcmap.pp

@@ -18,15 +18,23 @@ Abstract:
 
 
 *)
+{$IFNDEF FPC_DOTTEDUNITS}
 unit FPPJsSrcMap;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.SysUtils, System.Math,
+  Js.Writer, Js.Tree, Js.SrcMap, FpJson.Data, Pas2Js.Utils;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   SysUtils, math,
   jswriter, jstree, JSSrcMap, fpjson, Pas2JSUtils;
+{$ENDIF FPC_DOTTEDUNITS}
 
 type
   { TPas2JSSrcMap }

+ 29 - 11
packages/pastojs/src/pas2jscompiler.pp

@@ -16,7 +16,9 @@ Compiler-ToDos:
   -Fa<x>[,y] (for a program) load units <x> and [y] before uses is parsed
   Add Windows macros, see InitMacros.
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2jsCompiler;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
@@ -28,6 +30,21 @@ unit Pas2jsCompiler;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  {$IFDEF Pas2js}
+  JS,
+  {$ELSE}
+  System.RtlConsts,
+  {$ENDIF}
+  // !! No NdsApi.Filesystem units here.
+  System.Classes, System.SysUtils, System.Contnrs,
+  Js.Base, Js.Tree, Js.Writer, Js.SrcMap, FpJson.Data,
+  Pascal.Scanner, Pascal.Parser, Pascal.Tree, Pascal.Resolver, Pascal.ResolveEval, Pascal.UseAnalyzer,
+  Pas2Js.Utils,
+  Pas2Js.Resources.Strings, Pas2Js.Resources, Pas2Js.Resources.Html, Pas2Js.Resources.Js,
+  Pas2Js.Compiler.Transpiler, Pas2Js.SrcMap, Pas2Js.Logger, Pas2Js.Files.Fs, Pas2Js.Parser, Pas2Js.UseAnalyzer;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   {$IFDEF Pas2js}
   JS,
@@ -41,6 +58,7 @@ uses
   Pas2JSUtils,
   pas2jsresstrfile, pas2jsresources, pas2jshtmlresources, pas2jsjsresources,
   FPPas2Js, FPPJsSrcMap, Pas2jsLogger, Pas2jsFS, Pas2jsPParser, Pas2jsUseAnalyzer;
+{$ENDIF FPC_DOTTEDUNITS}
 
 const
   VersionMajor = 2;
@@ -1059,27 +1077,27 @@ begin
   Result:=DefaultPasToJSOptions;
 
   if coUseStrict in Compiler.Options then
-    Include(Result,fppas2js.coUseStrict)
+    Include(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coUseStrict)
   else
-    Exclude(Result,fppas2js.coUseStrict);
+    Exclude(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coUseStrict);
 
   if coEnumValuesAsNumbers in Compiler.Options then
-    Include(Result,fppas2js.coEnumNumbers);
+    Include(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coEnumNumbers);
   if (coShortRefGlobals in Compiler.Options) or IsUnitReadFromPCU then
-    Include(Result,fppas2js.coShortRefGlobals);
+    Include(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coShortRefGlobals);
   if coObfuscateLocalIdentifiers in Compiler.Options then
-    Include(Result,fppas2js.coObfuscateLocalIdentifiers);
+    Include(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coObfuscateLocalIdentifiers);
 
   if coLowerCase in Compiler.Options then
-    Include(Result,fppas2js.coLowerCase)
+    Include(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coLowerCase)
   else
-    Exclude(Result,fppas2js.coLowerCase);
+    Exclude(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coLowerCase);
 
   case Compiler.RTLVersionCheck of
     rvcNone: ;
-    rvcMain: Include(Result,fppas2js.coRTLVersionCheckMain);
-    rvcSystem: Include(Result,fppas2js.coRTLVersionCheckSystem);
-    rvcUnit: Include(Result,fppas2js.coRTLVersionCheckUnit);
+    rvcMain: Include(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coRTLVersionCheckMain);
+    rvcSystem: Include(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coRTLVersionCheckSystem);
+    rvcUnit: Include(Result,{$IFDEF FPC_DOTTEDUNITS}Pas2Js.Compiler.Transpiler{$ELSE}fppas2js{$ENDIF}.coRTLVersionCheckUnit);
   end;
 end;
 
@@ -3356,7 +3374,7 @@ begin
   r(mtInfo,nRTLIdentifierChanged,sRTLIdentifierChanged);
   r(mtNote,nSkipNoConstResourcestring,sSkipNoConstResourcestring);
   r(mtWarning,nUnknownOptimizationOption,sUnknownOptimizationOption);
-  Pas2jsPParser.RegisterMessages(Log);
+  {$IFDEF FPC_DOTTEDUNITS}Pas2js.Parser{$ELSE}Pas2jsPParser{$ENDIF}.RegisterMessages(Log);
 end;
 
 procedure TPas2jsCompiler.LoadConfig(CfgFilename: string);

+ 10 - 0
packages/pastojs/src/pas2jscompilercfg.pp

@@ -16,17 +16,27 @@
   Abstract:
     Config file handling for compiler, depends on filesystem.
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2JSCompilerCfg;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  {$IFDEF NodeJS}
+  node.fs,
+  {$ENDIF}
+  System.SysUtils, System.Classes, Pas2Js.Files.Utils, Pas2Js.Files.Fs, Pas2Js.Compiler.Base;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   {$IFDEF NodeJS}
   node.fs,
   {$ENDIF}
   SysUtils, Classes, Pas2jsFileUtils, Pas2JSFS, Pas2jsCompiler;
+{$ENDIF FPC_DOTTEDUNITS}
 
 Type
   TPas2JSFileConfigSupport = Class(TPas2JSConfigSupport)

+ 11 - 0
packages/pastojs/src/pas2jscompilerpp.pp

@@ -16,14 +16,21 @@
   Abstract:
     Pas2JS compiler Postprocessor support. Can depend on filesystem.
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2JSCompilerPP;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.Classes, System.SysUtils, Pas2Js.Compiler.Base, Js.Writer, Pas2Js.SrcMap, System.Contnrs;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   Classes, SysUtils, pas2jscompiler, jswriter, FPPJSSrcMap, contnrs;
+{$ENDIF FPC_DOTTEDUNITS}
 
 Type
 
@@ -45,7 +52,11 @@ Type
 
 implementation
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses System.Process, Pas2Js.Logger, Pas2Js.Utils, Pas2Js.Files.Utils;
+{$ELSE FPC_DOTTEDUNITS}
 uses process, pas2jslogger, pas2jsutils, pas2jsfileutils;
+{$ENDIF FPC_DOTTEDUNITS}
 
 function TPas2JSFSPostProcessorSupport.CmdListAsStr(CmdList: TStrings): string;
 var

+ 22 - 7
packages/pastojs/src/pas2jsfilecache.pp

@@ -16,7 +16,9 @@
   Abstract:
     TPas2jsFileResolver extends TFileResolver and searches source files.
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2jsFileCache;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
@@ -24,6 +26,18 @@ unit Pas2jsFileCache;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  {$IFDEF Pas2js}
+    {$IFDEF NodeJS}
+    JS, node.fs,
+    {$ENDIF}
+  {$ENDIF}
+  System.Classes, System.SysUtils,
+  FpJson.Data,
+  Pascal.Scanner, Pascal.Resolver, Pascal.UseAnalyzer,
+  Pas2Js.Logger, Pas2Js.Files.Utils, Pas2Js.Files.Fs, Pas2Js.Utils;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   {$IFDEF Pas2js}
     {$IFDEF NodeJS}
@@ -34,6 +48,7 @@ uses
   fpjson,
   PScanner, PasResolver, PasUseAnalyzer,
   Pas2jsLogger, Pas2jsFileUtils, Pas2JSFS, Pas2JSUtils;
+{$ENDIF FPC_DOTTEDUNITS}
 
 
 type
@@ -954,7 +969,7 @@ begin
       Filename:=ChompPathDelim(ResolveDots(Filename));
       if not FilenameIsAbsolute(Filename) then
         Filename:=WorkingDirectory+Filename;
-      Result:={$IFDEF pas2js}Node.FS{$ELSE}SysUtils{$ENDIF}.DirectoryExists(Filename);
+      Result:={$IFDEF pas2js}Node.FS{$ELSE}{$IFDEF FPC_DOTTEDUNITS}System.{$ENDIF}SysUtils{$ENDIF}.DirectoryExists(Filename);
       end;
     end;
 end;
@@ -968,7 +983,7 @@ begin
   if Info.Dir<>nil then
     Result:=Info.Dir.IndexOfFile(Info.ShortFilename)>=0
   else
-    Result:={$IFDEF pas2js}Node.FS{$ELSE}SysUtils{$ENDIF}.FileExists(Info.Filename);
+    Result:={$IFDEF pas2js}Node.FS{$ELSE}{$IFDEF FPC_DOTTEDUNITS}System.{$ENDIF}SysUtils{$ENDIF}.FileExists(Info.Filename);
 end;
 
 function TPas2jsCachedDirectories.FileExistsI(var Filename: string): integer;
@@ -981,7 +996,7 @@ begin
   if not GetFileInfo(Info) then exit;
   if Info.Dir=nil then
   begin
-    if {$IFDEF pas2js}Node.FS{$ELSE}SysUtils{$ENDIF}.FileExists(Info.Filename) then
+    if {$IFDEF pas2js}Node.FS{$ELSE}{$IFDEF FPC_DOTTEDUNITS}System.{$ENDIF}SysUtils{$ENDIF}.FileExists(Info.Filename) then
       Result:=1;
   end
   else
@@ -1084,7 +1099,7 @@ begin
     {$ENDIF}
     Result:=TPas2jsCachedDirectory.Create(Dir,Self);
     FDirectories.Add(Result);
-    if DoReference then
+    if DoReference then 
       Result.Reference;
     Result.Update;
   end else
@@ -1264,7 +1279,7 @@ end;
 
 procedure TPas2jsFilesCache.SetBaseDirectory(AValue: string);
 begin
-  AValue:=Pas2jsFileUtils.ExpandDirectory(AValue);
+  AValue:={$IFDEF FPC_DOTTEDUNITS}Pas2js.Files.Utils{$ELSE}Pas2jsFileUtils{$ENDIF}.ExpandDirectory(AValue);
   if FBaseDirectory=AValue then Exit;
   FBaseDirectory:=AValue;
   DirectoryCache.WorkingDirectory:=BaseDirectory;
@@ -1583,7 +1598,7 @@ end;
 
 function TPas2jsFilesCache.SameFileName(const File1, File2: String): Boolean;
 begin
-  Result:=Pas2jsFileUtils.CompareFilenames(File1,File2)=0;
+  Result:={$IFDEF FPC_DOTTEDUNITS}Pas2js.Files.Utils{$ELSE}Pas2jsFileUtils{$ENDIF}.CompareFilenames(File1,File2)=0;
 end;
 
 function TPas2jsFilesCache.File1IsNewer(const File1, File2: String): Boolean;
@@ -1871,7 +1886,7 @@ function TPas2jsFilesCache.TryCreateRelativePath(const Filename,
   BaseDirectory: String; UsePointDirectory,
   AlwaysRequireSharedBaseFolder: boolean; out RelPath: String): Boolean;
 begin
-  Result:=Pas2jsFileUtils.TryCreateRelativePath(Filename, BaseDirectory,
+  Result:={$IFDEF FPC_DOTTEDUNITS}Pas2js.Files.Utils{$ELSE}Pas2jsFileUtils{$ENDIF}.TryCreateRelativePath(Filename, BaseDirectory,
     UsePointDirectory, AlwaysRequireSharedBaseFolder, RelPath);
 end;
 

+ 15 - 1
packages/pastojs/src/pas2jsfiler.pp

@@ -76,7 +76,9 @@ Todo:
 - when pcu is bad, unload and use src
 - replace GUID with crc
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2JsFiler;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
@@ -86,6 +88,17 @@ unit Pas2JsFiler;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.Classes, System.Types, System.SysUtils, System.Contnrs,
+  {$ifdef pas2js}
+  {$else}
+  System.ZLib.Zstream, Fcl.AVLTree,
+  {$endif}
+  FpJson.Data, FpJson.Parser, FpJson.Scanner,
+  Pascal.Tree, Pascal.Scanner, Pascal.Parser, Pascal.ResolveEval, Pascal.Resolver,
+  Pas2Js.Files.Utils, Pas2Js.Compiler.Transpiler, Pas2Js.Utils, Js.Base;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   Classes, Types, SysUtils, contnrs,
   {$ifdef pas2js}
@@ -95,6 +108,7 @@ uses
   fpjson, jsonparser, jsonscanner,
   PasTree, PScanner, PParser, PasResolveEval, PasResolver,
   Pas2jsFileUtils, FPPas2Js, Pas2JSUtils, jsbase;
+{$ENDIF FPC_DOTTEDUNITS}
 
 const
   PCUMagic = 'Pas2JSCache';
@@ -5010,7 +5024,7 @@ begin
     {$IFDEF VerbosePCUFiler}
     writeln('TPCUWriter.WritePCU create js');
     {$ENDIF}
-    Pas2jsFiler.WriteJSON(aJSON,TargetStream,Compressed);
+    {$IFDEF FPC_DOTTEDUNITS}Pas2js.Filer{$ELSE}Pas2jsFiler{$ENDIF}.WriteJSON(aJSON,TargetStream,Compressed);
     if Compressed then
       try
         {$IFDEF VerbosePCUFiler}

+ 20 - 1
packages/pastojs/src/pas2jsfileutils.pp

@@ -16,7 +16,9 @@
   Abstract:
     Low level file path handling.
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2jsFileUtils;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
@@ -24,6 +26,16 @@ unit Pas2jsFileUtils;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  {$IFDEF Unix}
+  UnixApi.Base,
+  {$ENDIF}
+  {$IFDEF Pas2JS}
+  JS, NodeJS, Node.FS,
+  {$ENDIF}
+  System.SysUtils, System.Classes, Pas2Js.Utils;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   {$IFDEF Unix}
   BaseUnix,
@@ -32,6 +44,7 @@ uses
   JS, NodeJS, Node.FS,
   {$ENDIF}
   SysUtils, Classes, Pas2JSUtils;
+{$ENDIF FPC_DOTTEDUNITS}
 
 function FilenameIsAbsolute(const aFilename: string):boolean;
 function FilenameIsWinAbsolute(const aFilename: string):boolean;
@@ -106,9 +119,15 @@ function UTF8ToConsole(const s: ansistring): ansistring;
 
 implementation
 
+{$IFDEF FPC_DOTTEDUNITS}
+{$IFDEF Windows}
+uses WinApi.Windows;
+{$ENDIF}
+{$ELSE FPC_DOTTEDUNITS}
 {$IFDEF Windows}
 uses Windows;
 {$ENDIF}
+{$ENDIF FPC_DOTTEDUNITS}
 
 var
   EncodingValid: boolean = false;
@@ -937,7 +956,7 @@ begin
   {$IFDEF Windows}
   NonUTF8System:=true;
   {$ELSE}
-  NonUTF8System:=SysUtils.CompareText(DefaultTextEncoding,'UTF8')<>0;
+  NonUTF8System:={$IFDEF FPC_DOTTEDUNITS}System.{$ENDIF}SysUtils.CompareText(DefaultTextEncoding,'UTF8')<>0;
   {$ENDIF}
   {$ENDIF}
 

+ 2 - 2
packages/pastojs/src/pas2jsfileutilsunix.inc

@@ -157,7 +157,7 @@ end;
 
 function FileIsWritable(const AFilename: string): boolean;
 begin
-  Result := BaseUnix.FpAccess(AFilename, BaseUnix.W_OK) = 0;
+  Result := {$IFDEF FPC_DOTTEDUNITS}UnixApi.Base{$ELSE}BaseUnix{$ENDIF}.FpAccess(AFilename, {$IFDEF FPC_DOTTEDUNITS}UnixApi.Base{$ELSE}BaseUnix{$ENDIF}.W_OK) = 0;
 end;
 
 function FileIsExecutable(const AFilename: string): boolean;
@@ -166,7 +166,7 @@ var
 begin
   // first check AFilename is not a directory and then check if executable
   Result:= (FpStat(AFilename,info{%H-})<>-1) and FPS_ISREG(info.st_mode) and
-           (BaseUnix.FpAccess(AFilename,BaseUnix.X_OK)=0);
+           ({$IFDEF FPC_DOTTEDUNITS}UnixApi.Base{$ELSE}BaseUnix{$ENDIF}.FpAccess(AFilename,{$IFDEF FPC_DOTTEDUNITS}UnixApi.Base{$ELSE}BaseUnix{$ENDIF}.X_OK)=0);
 end;
 
 function GetEnvironmentVariableCountPJ: Integer;

+ 4 - 4
packages/pastojs/src/pas2jsfileutilswin.inc

@@ -247,7 +247,7 @@ begin
   begin
     res := GetCurrentDirectoryW(0, nil);
     SetLength(SavedDir{%H-}, res);
-    res:=Windows.GetCurrentDirectoryW(res, @SavedDir[1]);
+    res:={$IFDEF FPC_DOTTEDUNITS}WinApi.{$ENDIF}Windows.GetCurrentDirectoryW(res, @SavedDir[1]);
     SetLength(SavedDir,res);
 
     D := WideChar(64 + DriveNr) + ':';
@@ -392,7 +392,7 @@ begin
   {$else}
   res:=GetCurrentDirectoryW(0, nil);
   SetLength(w{%H-}, res);
-  res:=Windows.GetCurrentDirectoryW(res, @w[1]);
+  res:={$IFDEF FPC_DOTTEDUNITS}WinApi.{$ENDIF}Windows.GetCurrentDirectoryW(res, @w[1]);
   SetLength(w, res);
   Result:=UTF16ToUTF8(w);
   {$endif}
@@ -463,7 +463,7 @@ end;
 
 function FileGetAttrUTF8(const FileName: String): Longint;
 begin
-  Result:=Integer(Windows.GetFileAttributesW(PWideChar(UTF8Decode(FileName))));
+  Result:=Integer({$IFDEF FPC_DOTTEDUNITS}WinApi.{$ENDIF}Windows.GetFileAttributesW(PWideChar(UTF8Decode(FileName))));
 end;
 
 function FileIsWritable(const AFilename: string): boolean;
@@ -512,7 +512,7 @@ end;
 
 function GetEnvironmentVariablePJ(const EnvVar: string): String;
 begin
-  Result:=UTF16ToUTF8(SysUtils.GetEnvironmentVariable(UTF8ToUTF16(EnvVar)));
+  Result:=UTF16ToUTF8({$IFDEF FPC_DOTTEDUNITS}System.{$ENDIF}SysUtils.GetEnvironmentVariable(UTF8ToUTF16(EnvVar)));
 end;
 
 // AConsole - If false, it is the general system encoding,

+ 8 - 0
packages/pastojs/src/pas2jsfs.pp

@@ -19,16 +19,24 @@
     interacts with the filesystem.
     See Pas2JSFileCache for an actual implementation.
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2JSFS;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 {$I pas2js_defines.inc}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  // No NdsApi.Filesystem-dependent units here !
+  System.Classes, System.SysUtils, Pascal.Scanner, FpJson.Data;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   // No filesystem-dependent units here !
   Classes, SysUtils, PScanner, fpjson;
+{$ENDIF FPC_DOTTEDUNITS}
 
 const // Messages
   nUsingPath = 104; sUsingPath = 'Using %s: "%s"';

+ 12 - 0
packages/pastojs/src/pas2jsfscompiler.pp

@@ -16,12 +16,23 @@
   Abstract:
     FileSystem aware compiler descendent. No support for PCU.
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2JSFSCompiler;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.SysUtils,
+  Pascal.UseAnalyzer,
+  Pas2Js.SrcMap,
+  Pas2Js.Files.Cache, Pas2Js.Compiler.Base,
+  Pas2Js.Files.Fs,
+  Pas2Js.Files.Utils;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   SysUtils,
   PasUseAnalyzer,
@@ -29,6 +40,7 @@ uses
   Pas2jsFileCache, Pas2jsCompiler,
   Pas2JSFS,
   Pas2jsFileUtils;
+{$ENDIF FPC_DOTTEDUNITS}
 
 Type
 

+ 7 - 0
packages/pastojs/src/pas2jshtmlresources.pp

@@ -1,11 +1,18 @@
+{$IFNDEF FPC_DOTTEDUNITS}
 unit pas2jshtmlresources;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.Classes, System.SysUtils, Pas2Js.Resources, Pas2Js.Files.Fs;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   Classes, SysUtils, pas2jsResources, pas2jsFS;
+{$ENDIF FPC_DOTTEDUNITS}
 
 Type
 

+ 7 - 0
packages/pastojs/src/pas2jsjsresources.pp

@@ -1,11 +1,18 @@
+{$IFNDEF FPC_DOTTEDUNITS}
 unit pas2jsjsresources;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.Classes, System.SysUtils, Pas2Js.Resources, Pas2Js.Files.Fs;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   Classes, SysUtils, pas2jsResources, pas2jsFS;
+{$ENDIF FPC_DOTTEDUNITS}
 
 Type
 

+ 9 - 0
packages/pastojs/src/pas2jslibcompiler.pp

@@ -13,7 +13,9 @@
 
  **********************************************************************
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit pas2jslibcompiler;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
@@ -23,10 +25,17 @@ unit pas2jslibcompiler;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.SysUtils, System.Classes, System.Math,
+  Pas2Js.SrcMap, Pas2Js.Files.Cache, Pas2Js.Compiler.Base, Pas2Js.Compiler.Pcu,
+  Pas2Js.Compiler.Config, Pas2Js.Compiler.PostProcess;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   SysUtils, Classes, Math,
   FPPJsSrcMap, Pas2jsFileCache, Pas2JSCompiler, Pas2jsPCUCompiler,
   Pas2JSCompilerCfg, Pas2JSCompilerPP;
+{$ENDIF FPC_DOTTEDUNITS}
 
 { ---------------------------------------------------------------------
   Compiler descendant, usable in library

+ 19 - 0
packages/pastojs/src/pas2jslogger.pp

@@ -18,7 +18,9 @@
     Filtering messages by number and type.
     Registering messages with number, pattern and type (error, warning, note, etc).
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2jsLogger;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 {$WARN 6018 off : Unreachable code}
@@ -26,6 +28,22 @@ unit Pas2jsLogger;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  {$IFDEF Pas2JS}
+  JS,
+  {$IFDEF NodeJS}
+  Node.FS,
+  {$ENDIF}
+  {$ENDIF}
+  Pas2Js.Utils,
+  {$IFDEF HASFILESYSTEM}
+  Pas2Js.Files.Utils,
+  {$ENDIF}
+  System.Types, System.Classes, System.SysUtils,
+  Pascal.Tree, Pascal.Scanner,
+  Js.Tree, Js.Base, Js.Writer, FpJson.Data;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   {$IFDEF Pas2JS}
   JS,
@@ -40,6 +58,7 @@ uses
   Types, Classes, SysUtils,
   PasTree, PScanner,
   jstree, jsbase, jswriter, fpjson;
+{$ENDIF FPC_DOTTEDUNITS}
 
 const
   ExitCodeErrorInternal = 1; // internal error

+ 12 - 0
packages/pastojs/src/pas2jspcucompiler.pp

@@ -16,7 +16,9 @@
   Abstract:
     FileSystem aware compiler descendent with support for PCU files.
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2JSPCUCompiler;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
@@ -28,6 +30,15 @@ unit Pas2JSPCUCompiler;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.SysUtils, System.Classes,
+  Js.Tree,
+  Pascal.Tree, Pascal.Scanner, Pascal.ResolveEval,
+  Pas2Js.Compiler.Transpiler,
+  Pas2Js.Compiler.Base, Pas2Js.Files.Fs, Pas2Js.Compiler.Files, Pas2Js.Filer,
+  Pas2Js.Logger, Pas2Js.Files.Utils, Pas2Js.SrcMap;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   SysUtils, Classes,
   jstree,
@@ -35,6 +46,7 @@ uses
   FPPas2Js,
   Pas2jsCompiler, Pas2JSFS, Pas2JSFSCompiler, Pas2JsFiler,
   Pas2jsLogger, Pas2jsFileUtils, FPPJsSrcMap;
+{$ENDIF FPC_DOTTEDUNITS}
 
 Type
 

+ 8 - 0
packages/pastojs/src/pas2jspparser.pp

@@ -16,7 +16,9 @@
   Abstract:
     Extends the FCL Pascal parser for the language subset of pas2js.
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2jsPParser;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
@@ -24,9 +26,15 @@ unit Pas2jsPParser;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.Classes, System.SysUtils, Pascal.Parser, Pascal.Scanner, Pascal.Tree, Pascal.Resolver, Pas2Js.Compiler.Transpiler,
+  Pas2Js.Logger;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   Classes, SysUtils, PParser, PScanner, PasTree, PasResolver, fppas2js,
   Pas2jsLogger;
+{$ENDIF FPC_DOTTEDUNITS}
 
 const // Messages
   nFinalizationNotSupported = 3001;

+ 13 - 0
packages/pastojs/src/pas2jsresources.pp

@@ -1,9 +1,21 @@
+{$IFNDEF FPC_DOTTEDUNITS}
 unit pas2jsresources;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.Classes, System.SysUtils,
+  {$IFDEF pas2js}
+  web,
+  {$ELSE}
+  System.Hash.Base64,
+  {$ENDIF}
+  Pas2Js.Files.Fs, Js.Tree;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   Classes, SysUtils,
   {$IFDEF pas2js}
@@ -12,6 +24,7 @@ uses
   base64,
   {$ENDIF}
   pas2jsfs, jsTree;
+{$ENDIF FPC_DOTTEDUNITS}
 
 Type
   TResourceScopeMode = (rmProgram,rmUnit);

+ 7 - 0
packages/pastojs/src/pas2jsresstrfile.pp

@@ -1,11 +1,18 @@
+{$IFNDEF FPC_DOTTEDUNITS}
 unit pas2jsresstrfile;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.SysUtils, FpJson.Data;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   SysUtils, fpJSON;
+{$ENDIF FPC_DOTTEDUNITS}
 
 Type
 

+ 9 - 0
packages/pastojs/src/pas2jsuseanalyzer.pp

@@ -21,17 +21,26 @@ Works:
 - TPascalDescendantOfExt.Create marks class method NewInstance
 
 }
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2jsUseAnalyzer;
+{$ENDIF FPC_DOTTEDUNITS}
 
 {$mode objfpc}{$H+}
 {$inline on}
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.Classes,
+  Pascal.UseAnalyzer, Pascal.Tree, Pascal.Resolver,
+  Pas2Js.Compiler.Transpiler;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   Classes,
   PasUseAnalyzer, PasTree, PasResolver,
   FPPas2Js;
+{$ENDIF FPC_DOTTEDUNITS}
 
 type
 

+ 12 - 1
packages/pastojs/src/pas2jsutils.pp

@@ -1,4 +1,6 @@
+{$IFNDEF FPC_DOTTEDUNITS}
 unit Pas2JSUtils;
+{$ENDIF FPC_DOTTEDUNITS}
 {
     This file is part of the Free Component Library (FCL)
     Copyright (c) 2018  Mattias Gaertner  [email protected]
@@ -22,8 +24,13 @@ unit Pas2JSUtils;
 
 interface
 
+{$IFDEF FPC_DOTTEDUNITS}
+uses
+  System.Classes, System.SysUtils;
+{$ELSE FPC_DOTTEDUNITS}
 uses
   Classes, SysUtils;
+{$ENDIF FPC_DOTTEDUNITS}
 
 function ChompPathDelim(const Path: string): string;
 function GetNextDelimitedItem(const List: string; Delimiter: Char;
@@ -70,7 +77,11 @@ procedure SplitCmdLineParams(const Params: string; ParamList: TStrings;
 implementation
 
 {$IFDEF Windows}
+{$IFDEF FPC_DOTTEDUNITS}
+uses WinApi.Windows;
+{$ELSE FPC_DOTTEDUNITS}
 uses Windows;
+{$ENDIF FPC_DOTTEDUNITS}
 {$ENDIF}
 
 Var
@@ -332,7 +343,7 @@ begin
   {$IFDEF Windows}
   gNonUTF8System:=true;
   {$ELSE}
-  gNonUTF8System:=SysUtils.CompareText(DefaultTextEncoding,'UTF8')<>0;
+  gNonUTF8System:={$IFDEF FPC_DOTTEDUNITS}System.{$ENDIF}SysUtils.CompareText(DefaultTextEncoding,'UTF8')<>0;
   {$ENDIF}
   {$ENDIF}
 end;