From 6c1c4a66e820f3f807edff51be7abbc357b661e8 Mon Sep 17 00:00:00 2001 From: mattias Date: Sun, 19 Sep 2021 16:56:36 +0200 Subject: [PATCH] pastojs: fixed invalidate directory cache --- packages/pastojs/src/pas2jsfilecache.pp | 29 +++++++++++++++++++---- packages/pastojs/src/pas2jspcucompiler.pp | 2 +- packages/pastojs/tests/tcunitsearch.pas | 2 +- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/packages/pastojs/src/pas2jsfilecache.pp b/packages/pastojs/src/pas2jsfilecache.pp index 41f7e8c65b..e4f91160aa 100644 --- a/packages/pastojs/src/pas2jsfilecache.pp +++ b/packages/pastojs/src/pas2jsfilecache.pp @@ -65,7 +65,7 @@ type private FChangeStamp: TChangeStamp; FPath: string; - FEntries: TFPList; // list of TPas2jsCachedDirectoryEntry + FEntries: TFPList; // list of TPas2jsCachedDirectoryEntry, sorted first case insensitive then sensitive FPool: TPas2jsCachedDirectories; FRefCount: integer; FSorted: boolean; @@ -78,6 +78,7 @@ type destructor Destroy; override; function Count: integer; procedure Clear; + procedure Invalidate; inline; property ChangeStamp: TChangeStamp read FChangeStamp write FChangeStamp;// set on Update to Pool.ChangeStamp function NeedsUpdate: boolean; procedure Update; @@ -132,6 +133,7 @@ type destructor Destroy; override; property ChangeStamp: TChangeStamp read FChangeStamp; procedure Invalidate; inline; + procedure InvalidateDirectory(const aDirectory: string); virtual; procedure Clear; function DirectoryExists(Filename: string): boolean; function FileExists(Filename: string): boolean; @@ -290,10 +292,9 @@ type Function AddForeignUnitPath(const aValue: String; FromCmdLine: Boolean): String; override; function TryCreateRelativePath(const Filename, BaseDirectory: String; UsePointDirectory, AlwaysRequireSharedBaseFolder: boolean; out RelPath: String): Boolean; override; - Protected - property DirectoryCache: TPas2jsCachedDirectories read FDirectoryCache; public property BaseDirectory: string read FBaseDirectory write SetBaseDirectory; // includes trailing pathdelim + property DirectoryCache: TPas2jsCachedDirectories read FDirectoryCache; property ForeignUnitPaths: TStringList read FForeignUnitPaths; property ResourcePaths : TStringList read FResourcePaths; property ForeignUnitPathsFromCmdLine: integer read FForeignUnitPathsFromCmdLine; @@ -593,6 +594,11 @@ begin FSorted:=true; end; +procedure TPas2jsCachedDirectory.Invalidate; +begin + FChangeStamp:=InvalidChangeStamp; +end; + procedure TPas2jsCachedDirectory.Update; begin if not NeedsUpdate then exit; @@ -890,7 +896,22 @@ end; procedure TPas2jsCachedDirectories.Invalidate; begin - IncreaseChangeStamp(FChangeStamp); + FChangeStamp:=IncreaseChangeStamp(FChangeStamp); +end; + +procedure TPas2jsCachedDirectories.InvalidateDirectory(const aDirectory: string + ); +var + Dir: String; + CacheDir: TPas2jsCachedDirectory; +begin + Dir:=ResolveDots(aDirectory); + if not FilenameIsAbsolute(Dir) then + Dir:=WorkingDirectory+Dir; + Dir:=IncludeTrailingPathDelimiter(Dir); + CacheDir:=TPas2jsCachedDirectory(FDirectories.FindKey(Pointer(Dir))); + if CacheDir=nil then exit; + CacheDir.Invalidate; end; procedure TPas2jsCachedDirectories.Clear; diff --git a/packages/pastojs/src/pas2jspcucompiler.pp b/packages/pastojs/src/pas2jspcucompiler.pp index ec9eedc432..09911e45ee 100644 --- a/packages/pastojs/src/pas2jspcucompiler.pp +++ b/packages/pastojs/src/pas2jspcucompiler.pp @@ -240,7 +240,7 @@ function TFilerPCUSupport.FindPCU(const UseUnitName: string; end; var - L: TstringList; + L: TStringList; i: Integer; begin diff --git a/packages/pastojs/tests/tcunitsearch.pas b/packages/pastojs/tests/tcunitsearch.pas index 66b1813a0a..9eeddfa3c7 100644 --- a/packages/pastojs/tests/tcunitsearch.pas +++ b/packages/pastojs/tests/tcunitsearch.pas @@ -466,7 +466,7 @@ begin try try //writeln('TCustomTestCLI.Compile WorkDir=',WorkDir); - Compiler.Run(CompilerExe,WorkDir,Params,false); + Compiler.Run(CompilerExe,WorkDir,Params,true); except on E: ECompilerTerminate do begin