* Move InsertJSFiles to compiler

git-svn-id: trunk@40439 -
This commit is contained in:
michael 2018-12-01 21:06:59 +00:00
parent 92c07633c2
commit a3337afa98
3 changed files with 91 additions and 89 deletions

View File

@ -412,6 +412,8 @@ type
FInterfaceType: TPasClassInterfaceType;
FRTLVersionCheck: TP2jsRTLVersionCheck;
FPrecompileGUID: TGUID;
FInsertFilenames: TStringList;
procedure AddInsertJSFilename(const aFilename: string);
procedure ConditionEvalLog(Sender: TCondDirectiveEvaluator;
Args: array of {$ifdef pas2js}jsvalue{$else}const{$endif});
function ConditionEvalVariable(Sender: TCondDirectiveEvaluator;
@ -431,10 +433,13 @@ type
function GetWriteDebugLog: boolean;
function GetWriteMsgToStdErr: boolean;
function HandleOptionOptimization(C: Char; aValue: String): Boolean;
function IndexOfInsertJSFilename(const aFilename: string): integer;
procedure InsertCustomJSFiles(aWriter: TPas2JSMapper);
function OnMacroCfgDir(Sender: TObject; var Params: string; Lvl: integer
): boolean;
function OnMacroEnv(Sender: TObject; var Params: string; Lvl: integer
): boolean;
procedure RemoveInsertJSFilename(const aFilename: string);
procedure SetCompilerExe(AValue: string);
procedure SetFileCache(AValue: TPas2jsFilesCache);
procedure SetMode(AValue: TP2jsMode);
@ -580,6 +585,7 @@ type
property WriteDebugLog: boolean read GetWriteDebugLog write SetWriteDebugLog;
property WriteMsgToStdErr: boolean read GetWriteMsgToStdErr write SetWriteMsgToStdErr;
property ExitCode: longint read GetExitCode write SetExitCode;
property InsertFilenames: TStringList read FInsertFilenames;
end;
@ -1566,7 +1572,7 @@ var
FoundPasUnitName:=TestUnitName;
end else begin
// search pas in unit path
FoundPasFilename:=Compiler.FileCache.FindUnitFileName(TestUnitName,'',FoundPasIsForeign,FileResolver.StrictFileCase);
FoundPasFilename:=Compiler.FileCache.FindUnitFileName(TestUnitName,'',FoundPasIsForeign);
if FoundPasFilename<>'' then
FoundPasUnitName:=TestUnitName;
end;
@ -1631,7 +1637,7 @@ begin
if FoundPasFilename='' then
begin
// search Pascal file
FoundPasFilename:=Compiler.FileCache.FindUnitFileName(UseUnitname,InFilename,FoundPasIsForeign,FileResolver.StrictFileCase);
FoundPasFilename:=Compiler.FileCache.FindUnitFileName(UseUnitname,InFilename,FoundPasIsForeign);
if FoundPasFilename<>'' then
begin
if InFilename<>'' then
@ -2273,7 +2279,7 @@ begin
DestFilename:=FileCache.GetResolvedMainJSFile;
CreateFileWriter(DestFilename);
CombinedFileWriter:=aFileWriter;
FileCache.InsertCustomJSFiles(CombinedFileWriter);
InsertCustomJSFiles(CombinedFileWriter);
end else begin
DestFilename:=aFile.JSFilename;
end;
@ -2290,7 +2296,7 @@ begin
// create writer for this file
CreateFileWriter(DestFilename);
if aFile.IsMainFile and not FileCache.AllJSIntoMainJS then
FileCache.InsertCustomJSFiles(aFileWriter);
InsertCustomJSFiles(aFileWriter);
end;
// write JavaScript
@ -3154,9 +3160,9 @@ begin
if aValue='' then
Result:=False
else
FileCache.RemoveInsertJSFilename(aValue);
RemoveInsertJSFilename(aValue);
end else
FileCache.AddInsertJSFilename(aValue);
AddInsertJSFilename(aValue);
end;
'l': SetOption(coLowercase,aValue<>'-');
'm':
@ -3983,6 +3989,7 @@ begin
FLog:=TPas2jsLogger.Create;
FParamMacros:=TPas2jsMacroEngine.Create;
RegisterMessages;
FInsertFilenames:=TStringList.Create;
FFileCache:=TPas2jsFilesCache.Create(Log);
FFileCache.BaseDirectory:=GetCurrentDirPJ;
@ -4017,6 +4024,7 @@ destructor TPas2jsCompiler.Destroy;
procedure FreeStuff;
begin
FreeAndNil(FWPOAnalyzer);
FreeAndNil(FInsertFilenames);
FMainFile:=nil;
FreeAndNil(FUnits);
@ -4137,7 +4145,7 @@ begin
FUnits.Clear;
FReadingModules.Clear;
FFiles.FreeItems;
FInsertFilenames.Clear;
FPostProcs.Clear;
FCompilerExe:='';
FOptions:=DefaultP2jsCompilerOptions;
@ -4751,5 +4759,57 @@ begin
Result:=ExpandFileNamePJ(Filename,FileCache.BaseDirectory);
end;
procedure TPas2jsCompiler.InsertCustomJSFiles(aWriter: TPas2JSMapper);
var
i: Integer;
Filename: String;
FileResolver: TPas2jsFileResolver;
aFile: TPas2jsCachedFile;
begin
if InsertFilenames.Count=0 then exit;
FileResolver:=FileCache.CreateResolver;
try
for i:=0 to InsertFilenames.Count-1 do begin
Filename:=FileCache.FindCustomJSFileName(ResolveDots(InsertFilenames[i]));
if Filename='' then
begin
Log.LogMsg(nCustomJSFileNotFound,[InsertFilenames[i]]);
raise EFileNotFoundError.Create('');
end;
aFile:=FileCache.LoadFile(Filename);
if aFile.Source='' then continue;
aWriter.WriteFile(aFile.Source,Filename);
end
finally
FileResolver.Free;
end;
end;
function TPas2jsCompiler.IndexOfInsertJSFilename(const aFilename: string
): integer;
var
i: Integer;
begin
for i:=0 to FInsertFilenames.Count-1 do
if CompareFilenames(aFilename,InsertFilenames[i])=0 then
exit(i);
Result:=-1;
end;
procedure TPas2jsCompiler.AddInsertJSFilename(const aFilename: string);
begin
if IndexOfInsertJSFilename(aFilename)<0 then
InsertFilenames.Add(aFilename);
end;
procedure TPas2jsCompiler.RemoveInsertJSFilename(const aFilename: string);
var
i: Integer;
begin
i:=IndexOfInsertJSFilename(aFilename);
if i>=0 then
InsertFilenames.Delete(i);
end;
end.

View File

@ -269,7 +269,6 @@ type
FForeignUnitPathsFromCmdLine: integer;
FIncludePaths: TStringList;
FIncludePathsFromCmdLine: integer;
FInsertFilenames: TStringList;
FLog: TPas2jsLogger;
FMainJSFile: string;
FMainJSFileResolved: string; // only valid if cfsMainJSFileResolved in FStates
@ -284,13 +283,13 @@ type
FResetStamp: TChangeStamp;
FSrcMapBaseDir: string;
FStates: TPas2jsFileCacheStates;
FStrictFileCase: Boolean;
FUnitOutputPath: string;
FUnitPaths: TStringList;
FUnitPathsFromCmdLine: integer;
function FileExistsILogged(var Filename: string): integer;
function FileExistsLogged(const Filename: string): boolean;
function FindCustomJSFileName(const aFilename: string): String;
function FindSourceFileName(const aFilename: string; StrictFileCase: Boolean): String;
function FindSourceFileName(const aFilename: string): String;
function GetAllJSIntoMainJS: Boolean;
function GetSearchLikeFPC: boolean;
function GetShowFullFilenames: boolean;
@ -317,10 +316,11 @@ type
constructor Create(aLog: TPas2jsLogger);
destructor Destroy; override;
procedure Reset; virtual;
function SearchLowUpCase(var Filename: string; StrictFileCase : Boolean): boolean;
function SearchLowUpCase(var Filename: string): boolean;
function FindCustomJSFileName(const aFilename: string): String;
function FindUnitJSFileName(const aUnitFilename: string): String;
function FindUnitFileName(const aUnitname, InFilename: string; out IsForeign: boolean; StrictFileCase: Boolean): String; virtual;
function FindIncludeFileName(const aFilename: string; StrictFileCase : Boolean): String; virtual;
function FindUnitFileName(const aUnitname, InFilename: string; out IsForeign: boolean): String; virtual;
function FindIncludeFileName(const aFilename: string): String; virtual;
function AddIncludePaths(const Paths: string; FromCmdLine: boolean; out ErrorMsg: string): boolean;
function AddNamespaces(const Paths: string; FromCmdLine: boolean; out ErrorMsg: string): boolean;
function AddUnitPaths(const Paths: string; FromCmdLine: boolean; out ErrorMsg: string): boolean;
@ -335,10 +335,6 @@ type
function FindFile(Filename: string): TPas2jsCachedFile;
function LoadFile(Filename: string; Binary: boolean = false): TPas2jsCachedFile;
function NormalizeFilename(const Filename: string; RaiseOnError: boolean): string;
procedure InsertCustomJSFiles(aWriter: TPas2JSMapper);
function IndexOfInsertJSFilename(const aFilename: string): integer;
procedure AddInsertJSFilename(const aFilename: string);
procedure RemoveInsertJSFilename(const aFilename: string);
procedure GetListing(const aDirectory: string; var Files: TStrings;
FullPaths: boolean = true);
procedure RaiseDuplicateFile(aFilename: string);
@ -354,7 +350,6 @@ type
property ForeignUnitPathsFromCmdLine: integer read FForeignUnitPathsFromCmdLine;
property IncludePaths: TStringList read FIncludePaths;
property IncludePathsFromCmdLine: integer read FIncludePathsFromCmdLine;
property InsertFilenames: TStringList read FInsertFilenames;
property Log: TPas2jsLogger read FLog;
property MainJSFile: string read FMainJSFile write SetMainJSFile;
property MainSrcFileShort: string read FMainSrcFileShort write FMainSrcFileShort;
@ -373,6 +368,7 @@ type
property UnitPathsFromCmdLine: integer read FUnitPathsFromCmdLine;
property OnReadFile: TPas2jsReadFileEvent read FOnReadFile write FOnReadFile;
property OnWriteFile: TPas2jsWriteFileEvent read FOnWriteFile write FOnWriteFile;
Property StrictFileCase : Boolean Read FStrictFileCase Write FStrictFileCase;
end;
@ -1312,7 +1308,7 @@ var
Filename: String;
begin
Result:=nil;
Filename:=Cache.FindIncludeFileName(aFilename,StrictFileCase);
Filename:=Cache.FindIncludeFileName(aFilename);
if Filename='' then exit;
try
Result:=FindSourceFile(Filename);
@ -1324,7 +1320,7 @@ end;
function TPas2jsFileResolver.FindIncludeFileName(const aFilename: string): String;
begin
Result:=Cache.FindIncludeFileName(aFilename,StrictFileCase);
Result:=Cache.FindIncludeFileName(aFilename);
end;
@ -1334,7 +1330,7 @@ var
CurFilename: String;
begin
CurFilename:=Cache.FindSourceFileName(aFileName,StrictFileCase);
CurFilename:=Cache.FindSourceFileName(aFileName);
Result:=Cache.LoadFile(CurFilename).CreateLineReader(false);
end;
@ -1663,7 +1659,6 @@ begin
FLog:=aLog;
FOptions:=DefaultPas2jsFileCacheOptions;
FIncludePaths:=TStringList.Create;
FInsertFilenames:=TStringList.Create;
FForeignUnitPaths:=TStringList.Create;
FNamespaces:=TStringList.Create;
FUnitPaths:=TStringList.Create;
@ -1683,7 +1678,6 @@ begin
FFiles.FreeItems;
FreeAndNil(FDirectoryCache);
FreeAndNil(FFiles);
FreeAndNil(FInsertFilenames);
FreeAndNil(FIncludePaths);
FreeAndNil(FForeignUnitPaths);
FreeAndNil(FNamespaces);
@ -1710,7 +1704,6 @@ begin
FUnitPathsFromCmdLine:=0;
FIncludePaths.Clear;
FIncludePathsFromCmdLine:=0;
FInsertFilenames.Clear;
FStates:=FStates-[cfsMainJSFileResolved];
FNamespaces.Clear;
FNamespacesFromCmdLine:=0;
@ -1865,57 +1858,6 @@ begin
raise EFileNotFoundError.Create('invalid file name "'+Filename+'"');
end;
procedure TPas2jsFilesCache.InsertCustomJSFiles(aWriter: TPas2JSMapper);
var
i: Integer;
Filename: String;
FileResolver: TPas2jsFileResolver;
aFile: TPas2jsCachedFile;
begin
if InsertFilenames.Count=0 then exit;
FileResolver:=CreateResolver;
try
for i:=0 to InsertFilenames.Count-1 do begin
Filename:=FindCustomJSFileName(ResolveDots(InsertFilenames[i]));
if Filename='' then
begin
Log.LogMsg(nCustomJSFileNotFound,[InsertFilenames[i]]);
raise EFileNotFoundError.Create('');
end;
aFile:=LoadFile(Filename);
if aFile.Source='' then continue;
aWriter.WriteFile(aFile.Source,Filename);
end
finally
FileResolver.Free;
end;
end;
function TPas2jsFilesCache.IndexOfInsertJSFilename(const aFilename: string
): integer;
var
i: Integer;
begin
for i:=0 to FInsertFilenames.Count-1 do
if CompareFilenames(aFilename,InsertFilenames[i])=0 then
exit(i);
Result:=-1;
end;
procedure TPas2jsFilesCache.AddInsertJSFilename(const aFilename: string);
begin
if IndexOfInsertJSFilename(aFilename)<0 then
InsertFilenames.Add(aFilename);
end;
procedure TPas2jsFilesCache.RemoveInsertJSFilename(const aFilename: string);
var
i: Integer;
begin
i:=IndexOfInsertJSFilename(aFilename);
if i>=0 then
InsertFilenames.Delete(i);
end;
procedure TPas2jsFilesCache.GetListing(const aDirectory: string;
var Files: TStrings; FullPaths: boolean);
@ -2066,7 +2008,7 @@ begin
Result:=ExpandFileNamePJ(Filename,BaseDirectory);
end;
function TPas2jsFilesCache.FindIncludeFileName(const aFilename: string; StrictFileCase : Boolean): String;
function TPas2jsFilesCache.FindIncludeFileName(const aFilename: string): String;
function SearchCasedInIncPath(const Filename: string): string;
var
@ -2077,12 +2019,12 @@ function TPas2jsFilesCache.FindIncludeFileName(const aFilename: string; StrictFi
if BaseDirectory<>'' then
begin
Result:=BaseDirectory+Filename;
if SearchLowUpCase(Result,StrictFileCase) then exit;
if SearchLowUpCase(Result) then exit;
end;
// then search in include path
for i:=0 to IncludePaths.Count-1 do begin
Result:=IncludeTrailingPathDelimiter(IncludePaths[i])+Filename;
if SearchLowUpCase(Result,StrictFileCase) then exit;
if SearchLowUpCase(Result) then exit;
end;
Result:='';
end;
@ -2100,7 +2042,7 @@ begin
if FilenameIsAbsolute(Filename) then
begin
Result:=Filename;
if not SearchLowUpCase(Result,StrictFileCase) then
if not SearchLowUpCase(Result) then
Result:='';
exit;
end;
@ -2121,7 +2063,7 @@ begin
end;
end;
function TPas2jsFilesCache.FindSourceFileName(const aFilename: string; StrictFileCase : Boolean): String;
function TPas2jsFilesCache.FindSourceFileName(const aFilename: string): String;
Var
Found: Boolean;
@ -2142,18 +2084,18 @@ begin
raise EFileNotFoundError.Create(aFilename)
end;
function TPas2jsFilesCache.FindUnitFileName(const aUnitname, InFilename: string; out IsForeign: boolean; StrictFileCase : Boolean): String;
function TPas2jsFilesCache.FindUnitFileName(const aUnitname, InFilename: string; out IsForeign: boolean): String;
function SearchInDir(Dir: string; var Filename: string): boolean;
// search in Dir for pp, pas, p times given case, lower case, upper case
begin
Dir:=IncludeTrailingPathDelimiter(Dir);
Filename:=Dir+aUnitname+'.pp';
if SearchLowUpCase(Filename,StrictFileCase) then exit(true);
if SearchLowUpCase(Filename) then exit(true);
Filename:=Dir+aUnitname+'.pas';
if SearchLowUpCase(Filename,StrictFileCase) then exit(true);
if SearchLowUpCase(Filename) then exit(true);
Filename:=Dir+aUnitname+'.p';
if SearchLowUpCase(Filename,StrictFileCase) then exit(true);
if SearchLowUpCase(Filename) then exit(true);
Result:=false;
end;
@ -2170,11 +2112,11 @@ begin
Result:=ResolveDots(aFilename);
if FilenameIsAbsolute(Result) then
begin
if SearchLowUpCase(Result,StrictFileCase) then exit;
if SearchLowUpCase(Result) then exit;
end else
begin
Result:=ResolveDots(BaseDirectory+Result);
if SearchLowUpCase(Result,StrictFileCase) then exit;
if SearchLowUpCase(Result) then exit;
end;
exit('');
end;
@ -2286,7 +2228,7 @@ begin
Log.LogMsgIgnoreFilter(nSearchingFileNotFound,[FormatPath(Filename)]);
end;
function TPas2jsFilesCache.SearchLowUpCase(var Filename: string; StrictFileCase : Boolean): boolean;
function TPas2jsFilesCache.SearchLowUpCase(var Filename: string): boolean;
var
i: Integer;
{$IFNDEF CaseInsensitiveFilenames}

View File

@ -35,7 +35,7 @@ Type
Function Compiler : TPas2JSCompiler;
Function HandleException(E: exception) : Boolean; override;
function FindPCU(const UseUnitName: string): string;override;
function FindPCU(const UseUnitName: string; out aFormat: TPas2JSPrecompileFormat): string;
function FindPCU(const UseUnitName: string; out aFormat: TPas2JSPrecompileFormat): string;
Function HasReader : Boolean; override;
Function ReadContinue: Boolean; override;
Function ReadCanContinue : Boolean; override;
@ -199,7 +199,7 @@ function TFilerPCUSupport.FindPCU(const UseUnitName: string; out aFormat: TPas2
CurFormat:=PrecompileFormats[i];
if not CurFormat.Enabled then continue;
Filename:=DirPath+UseUnitName+'.'+CurFormat.Ext;
if Compiler.FileCache.SearchLowUpCase(Filename,MyFile.FileResolver.StrictFileCase) then
if Compiler.FileCache.SearchLowUpCase(Filename) then
begin
FindPCU:=Filename;
aFormat:=CurFormat;