mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 21:48:09 +02:00
* Move InsertJSFiles to compiler
git-svn-id: trunk@40439 -
This commit is contained in:
parent
92c07633c2
commit
a3337afa98
@ -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.
|
||||
|
||||
|
@ -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}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user